– El único módulo son las clases
– Cluster = Agrupación de clases relacionadas pero no es
parte del lenguaje sino que depende del entorno de
desarrollo
– Para hacer uso de un cluster se debe decir al entorno Eiffel
Clases y Objetos
7
Eiffel y Ocultación de Información
class ICE1 feature
at1: INTEGER;
...
end
class TEC1 feature
//Público
atrib1: ICE1;
atrib2: INTEGER;
una_rutina (p: INTEGER) is do
-- No error
-- Error en compilación
-- Error en compilación
atrib1.setAt1(p);
Modificación:
Clases y Objetos
8
e
d
n
ó
i
c
i
n
i
f
e
d
e
d
o
l
p
m
e
j
E
)
z
a
f
r
e
t
n
i
(
+
+
C
n
e
e
s
a
l
c
// Cuenta.h, definición del TAD Cuenta
class Cuenta {
public:
Cuenta (Persona *quien) {saldo=0;
titular=quien;
codigo = nuevoCodigo();
ultOper = new lista<int>;}
reintegro(int suma);
void
ingreso(int suma);
void
verSaldo();
int
verUltOper(int n);
void
static int nuevoCodigo();
//devuelve el ultimoCodigo y lo incrementa
private:
Persona * titular;
int
int
static int ultimoCodigo; //variable de clase
lista<int> * ultOper;
saldo;
codigo;
bool
puedoSacar(int suma) {return (saldo >=suma);}
};
Clases y Objetos
9
e
d
n
ó
i
c
i
n
i
f
e
d
e
d
o
l
p
m
e
j
E
)
n
ó
i
c
a
t
n
e
m
e
l
p
m
i
(
+
+
C
e
s
a
l
c
// cuenta.cpp, Definición de las funciones de la clase
#include “cuenta.h”
// inicializa la variable de clase
int Cuenta :: ultimoCodigo = 0;
void
}
void
}
int
}
void
}
Cuenta :: reintegro (int suma) {
if puedoSacar(suma) saldo=saldo-suma;
Cuenta :: ingreso (int suma) {
saldo=saldo+suma;
Cuenta :: verSaldo () {
return saldo;
Cuenta :: verUltOper(int n) {
...
static int Cuenta :: nuevoCodigo() {
return (ultimoCodigo++);
}
Clases y Objetos
10
Clases en C++
• Abstracción de tipos
– atributos.
• No pueden ser exportados en modo consulta
• Tipos primitivos y punteros
– todas las rutinas tienen un valor de retorno.
– Atributos y métodos de clase (static)
• Ocultación de información
– Especificación de acceso para un grupo de miembros:
•public: un cliente puede consultarlo y ¡¡modificarlo!!
•private: sólo accesible dentro de la clase
– Clases amigas: Se le concede acceso TOTAL a la clase amiga
11
Clases y Objetos
Clase “amiga”
class NodoArbol {
friend class Arbol;
private:
class B {
friend class A;
private:
int
i;
public: ...
}
En la clase A,
B *ob
ob -> i = 89
int dato;
NodoArbol decha;
NodoArbol izda;
…
};
class Arbol{
private:
NodoArbol *raiz;
...
… raiz ->dato=50; ...
La amistad no es hereditaria ni transitiva
};
Clases y Objetos
12
Clases en C++
• Modularidad
– Definición de nuevos tipos: clases (class) y estructuras
(struct)
– Una estructura equivale a una clase con todos los miembros
públicos por defecto (se puede usar private)
– namespace: mecanismo para agrupar datos, funciones, etc.
relacionadas dentro de un espacio de nombres separado
namespace Parser {
double term(bool obten){/*multiplica y divide */}
double expr(bool obte) {/*suma y resta */}
…
}
Para usar una función: Parser::expr(…);
Clases y Objetos
13
Ficheros para la especificación de la clase
Cuenta
Cuenta.h
Interfaz de la clase
cuenta
Banco.cpp
Cuenta.cpp
#include “Cuenta.h”
utiliza Cuenta
#include “Cuenta.h”
implementa Cuenta
• #include para importar ficheros cabecera
• toda la información se use o no
• pueden ocurrir dependencias circulares que debe solucionar
el programador en lugar del compilador
Clases y Objetos
14
Ejercicio
Intenta escribir en C++ la siguiente clase Eiffel,
class CELOSO
feature {NONE}
esposa: MUJER;
feature {MECANICO}
coche: AUTOMOVIL
…
end
Clases y Objetos
15
using System;
namespace Banco.GestionCuentas{
public class Cuenta {
private Persona titular;
private float saldo;
private int codigo;
private static int ultimoCodigo;
private Operacion[] ultOper;
Cuenta (Persona quien){
}
public virtual void Reintegro(float suma){
if puedoSacar(suma) saldo-=suma;
}
public virtual void Ingreso(float suma){
}
public void VerUltOper(int n) { ... }
public static int NuevoCodigo(){
}
private boolean puedoSacar(float suma){
}
return ultimoCodigo++;
return (saldo >=suma);
}
}
Clases y Objetos
16
Clases en C#
• Abstracción de tipos
– especificación de atributos y métodos igual que Java
– Atributos y métodos de clase (static)
• Ocultación de Información
– public y private igual que Java y C++
– internal: accesible desde el código del ensamblado
(librería o ejecutable)
– Proteger el acceso a los atributos mediante la definición de
propiedades (principio de Acceso Uniforme)
– Se escribe el código que se ejecutará en el acceso para lectura
(get) y modificación (set) de un atributo privado de igual
nombre que la propiedad.
Clases y Objetos
17
Definición de propiedades en C#
<tipoPropiedad> <nombrePropiedad>
{
set
{
}
get
{
}
}
<códigoEscritura>
<códigoLectura>
• Puede ser una propiedad de sólo lectura (sólo se define el
get) o de sólo escritura (sólo se define el set).
Clases y Objetos
18
Ejemplo de propiedad C#
class Cuenta{
…
public double Saldo
{
total = total + ultOper[i];
get
{
double total = 0;
for …
return total;
}
set
{
}
ultOper[indice]= value;
Clases y Objetos
19
}
}
• Acceso a una propiedad como si estuviéramos accediendo a uno de los
campos del objeto
Cuenta cta = new Cuenta();
cta.Saldo = 300;
Clases en C#
• Modularidad
– Definición de nuevos tipos: clases, estructuras e interfaces
– Agrupación de tipos de datos en espacios de nombres
(equivalente a los paquetes de Java)
namespace nombreEspacio{
…//tipos pertenecientes al espacio de nombres
}
– Para utilizar un tipo definido en un espacio de nombres:
•using: para importar los tipos definidos en un espacio de
nombres
• Calificar el tipo utilizando la notación punto.
Clases y Objetos
20
Exportación de características entre clases
relacionadas
• ¿Cómo exportar características a un conjunto de clases
• Los paquetes añaden complejidad al lenguaje.
• Con las soluciones de Java y C++ se corre el riesgo de
perjudicar la reutilización.
Clases y Objetos
21
Ejercicio
[Examen 2/12/2005] Dada la implementación parcial de la
clase Bola en Eiffel que representa una bola en un juego
de billar, especificar una clase Java equivalente,
explicando TODAS
Links de descarga
http://lwp-l.com/pdf5009
Comentarios de: TEMA 2 Clases y Objetos (2ª parte) (0)
Comentarios de: TEMA 2 Clases y Objetos (2ª parte) (0)
No hay comentarios