Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de...

21
Tema 5 Lección 4 Diseño de estructuras de herencia

Transcript of Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de...

Page 1: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Tema 5

Lección 4Diseño de estructuras de herencia

Page 2: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Especialización y herencia

• El uso más legítimo de la herencia es la especialización

Si dados dos conceptos A y B, tiene sentido el enunciado B es un A,

entonces es probable que B sea una subclase de A

Perro es un Mamífero �class Perro extends Mamifero { ...}

Mamifero subclass: #Perro ...

Page 3: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Especialización y herencia

• El uso de herencia para especializar garantiza que:– Todo objeto de las subclases también lo son

de la superclase

– Todas las propiedades de la superclase se conservan en la subclase

Page 4: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Buenos y malos usos

• Además de por especialización ¿cómo se suelen crear subclases?– Especificación

– Extensión

– Generalización

– Limitación

– Variación

– Combinación

Page 5: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Especificación

Especificación• Clases Collection, Object

• En Java se pueden usar interfaces

Usar la herencia para garantizar que un conjunto de clases tiene un protocolo común

A

A1 A2 AN...

Page 6: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Extensión

• Extensión• No es obligatorio redefinir ningún método

• Suele usarse cuando la subclase es una especialización

Se amplía la subclase añadiendo métodos y variables

Page 7: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Generalización

Generalización• Es lo opuesto a la Especialización

• La subclase es más general

– Se redefine al menos un método

• Sólo si la superclase no puede ser modificada

Ventana es una VentanaAColor (donde color es negro) �class VentanaAColor extends Ventana {

... public void dibuja(Color unColor) {...} ...}

Page 8: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Limitación

Limitación• Es lo opuesto a la Extensión

• Suele obligar a redefinir al menos un método dando un mensaje de error

• Suele utilizarse cuando la subclase es una generalización

• Debe limitarse su uso

Se reduce el comportamiento de la subclase

Page 9: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Variación

Variación

Agrupar el código comúnde dos clases sin relación de herencia

A

B A A

mejor:ó?

B

B

C

Page 10: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Combinación

Combinación• Herencia múltiple

Combinar en una clase características de dos o más superclases

A

C

B

Page 11: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Agregación y herencia(composición – contrucción)

• Agregación

Automóvil tiene un Motor �class Automovil { private Motor unMotor; ...}

Object subclass: #Automovil variableInstanceNames:’unMotor ...’ ...

Si dados dos conceptos A y B, tiene sentido el enunciado B tiene un A,

entonces es probable que en la clase B exista un atributo de tipo A

Page 12: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Composición vs. Construcción

• Problema: Dada la clase Numero, definir la clase Numero2 con la misma funcionalidad más una función de conversión a romano

Page 13: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Composición vs. Construcción

• Solución por Composición (Usando la clase):

Page 14: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Composición vs. Construcción

• Solución por Construcción (Heredando de la clase):

Page 15: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

A

A1 A2 AN...- int varB - char varD

- int varA

Asignación stack/heap

• Si se reserva en pila memoria para la clase

declarada se pierde información (C++)

• A var;

• A2 var2 (34, ‘c’);

• var = var2

• No se puede reservar en pila memoria para la clase y cualquiera

de sus subclases por que no se conocen todas las subclases

hasta tiempo de ejecución

• Se reserva en pila memoria para un puntero y en tiempo de

ejecución se reserva en el montículo memoria para la clase

referenciada: (Java) A = new A2 (34, ‘c’)

Page 16: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Asignación en el heap

• Ejemplo Smalltalk:Object subclass:#Rectangulo instancevariablleNames: ‘alto ancho

centro’ ...unPunto := Punto cordx:0 cordy:0.x := Rectangulo ancho:1 alto:2 centro:unPunto.

• Ejemplo Java:class Rectangulo {

private int alto;private int ancho;private Punto centro;...

}Punto unPunto := new Punto(0,0);Rectangulo x:= new Rectangulo(1, 2, unPunto);

Page 17: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Asignación y copia

• Objetos en el Heap– En Smalltalk (y :=x.)

– En Java (y = x;)

• Copia en Smalltalk

...

xy 1

2

0 0

...

xy

12 0 0 ...

xy

12

12

0 0

0 0

DEEPCOPY: Las variables de instancia son copias del original

COPY: Las variables de instancia se comparten con el original

Page 18: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Asignación y copia

• Copia en Java– Método clone

• Heredado de Object• Hay que redefinirlo

– También el método equals

– La asignación copia la referencia en los objetos (heap), pero el valor en los valores primitivos (stack)

class Rectangulo { ...public Object clone() {

ancho2 = ancho;alto2 = alto;centro2 = centro.clone();return new Rectangulo(ancho2, alto2, centro2);

}

}

Page 19: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Comparación de Objetos

• En Smalltalk– Comparar identidad (==)– Comparar estado (=)

• En Java– Comparar identidad de objetos y valor de tipos

primitivos (==)– Comparar estado de objetos (equals)

class Rectangulo { ...public boolean equals(Object o){

Rectangulo r = (Rectangulo) o;return ( ( (r.centro()). equals(centro) ) && (r.alto()==alto) && (r.ancho()==ancho));

}

}

Page 20: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Comparación de Objetos

• Responde V o F:– Samlltalk:

• y:=x. y==x.

• y := x copy. y==x.

• y := x copy. y centro == x centro.• y := x deepCopy. y centro ==x centro.

– Java: • y = x; y==x;• y=x; y.equals(x);

• y=x.clone(); y==x;

• y=x.clone(); y.ancho() == x.ancho()• y=x.clone(); y.centro() == x.centro()

• y=x.clone(); y.equals(x);

Page 21: Tema 5 - lsi.ugr.eslsi.ugr.es/~pdo/MaterialTeoriaAlumnos/Tema 5... · Tema 5 Lección 4 Diseño de estructuras de herencia. Especialización y herencia • El uso más legítimo de

Comparación de Objetos

• Responde V o F:– Samlltalk:

• y:=x. y==x. V• y := x copy. y==x. F• y := x copy. y centro == x centro. V• y := x deepCopy. y centro ==x centro. F

– Java: • y = x; y==x; V• y=x; y.equals(x); V• y=x.clone(); y==x; F• y=x.clone(); y.ancho() == x.ancho(); V• y=x.clone(); y.centro() == x.centro(); F• y=x.clone(); y.equals(x); V

Depende de la implementación