Departamento de Lenguajes y Sistemas Informáticos

________

Universidad de Granada

PROGRAMACION DIRIGIDA A OBJETOS

Versión: 1

Tema 5.- Herencia

Fecha:19/01/2005

Guía de estudio

Autores: José Parets, M. José Rodríguez, Nuria Medina


 LECCION 1.- Concepto de herencia

       DURACION: 1 hora.

       Preguntas: - ¿Qué es la herencia?

                        - ¿Qué posibilidades de herencia presentan los lenguajes dirigidos a objetos (LDO)?

                        - ¿Qué dificultades de implementación de los LDO introduce la herencia?     

PUNTOS A TRATAR

1.- Concepto de herencia

BUDD p.87-88, 98-99

FROUFE p. 112-113

2.- Herencia simple

3.- Herencia múltiple

3.1.- Concepto

BUDD p.171-175

MC

3.2.- Problemas

BUDD p. 173-177

4.- Coste de la herencia

BUDD p. 91-92

  INDICACIONES

            Punto 3.2.- El ejemplo que utiliza BUDD para mostrar la colisión (ambigüedad) de nombres no es demasiado afortunado.????

EJERCICIOS  

1.       Realice los ejercicios 2 y 6 de BUDD pág. 185.

          

LECCION 2.- Herencia en Smalltalk

      DURACION: 2 horas.

      Preguntas:      - ¿Qué características específicas presenta la herencia en Smalltalk?

                        - ¿Qué diferencias existen entre la herencia de métodos de instancia y de clase?

  PUNTOS A TRATAR

1.- Características de la herencia en Smalltalk

GOLDBERG p. 56-61

2.- Herencia de métodos y variables de instancia

2.1.- Jerarquía de clases

MC

2.1.- Determinación de los métodos a ejecutar: self y super

MC

2.2.- Superclases abstractas

BUDD p.196-199, 382

3.- Herencia de métodos de clase

3.1.- Concepto de metaclase

BUDD p.267-270

GOLDBERG, p.76-81

3.2.- Herencia de metaclases

MC

GOLDBERG, p.81-84

                  3.3.- Inicialización de variables de clase

4.- Incorporación de nuevas clases al sistema

5.- Implementación de la herencia

INDICACIONES

Punto 2.1.- La jerarquía de clases en Smalltalk se ha ido complicando con las distintas versiones. La versión 7.1 de Visualworks ofrece una representación gráfica de la jerarquía.

Punto 2.2.- Algunos autores llaman a las clases y métodos asbtractos, clases y métodos diferidos. Esta denominación indica una de las características importantes de ellos: de algunas forma se retrasan.

Puntos 3.1 y 3.2.- Pueden estudiarse en el MC

Punto 3.3.- Realizar el ejercicio 3

Punto 4.- En el MC al comentar las metaclases se comenta cómo se crea una clase. Lo que ahí se dice es el proceso de creación, pero este proceso comienza con un mensaje a un objeto del sistema que varía con la versión de Smalltalk considerada. Realice el ejercicio 4

Punto 5.- Realizar el ejericicio 5

EJERCICIOS

1.- Compruebe la jerarquía de clases (métodos de instancia) y metaclases (métodos de clase) en Smalltalk enviando los siguientes mensajes: Object superclass, Object class, Object class superclass, Class superclass, Metaclass class, Metaclass class class,  #(1 2) class, Array class.

2.- Observe la composición de los objetos clase y los objetos superclase enviando los siguientes mensajes: Object inspect, Object class inspect.

3.- En la práctica 4 se propone la inicialización de la variable de clase BarajaInicial,. ¿dónde se realiza? ¿Por qué?

4.- Tome une versión de Smalltalk cualquiera, determine cuál es el mensaje que se utiliza para crear una clase y sígale la pista. En versiones recientes de Smalltalk la cadena de mensajes es francamente compleja, es preferible que utilice versiones más simples.

5.- ¿Cómo conoce un objeto la clase a la que pertenece? ¿Cómo se relacionan las clases entre sí? Mándele a un objeto el mensaje class y búsquelo en Object. Inspeccione un objeto clase. Enviéle a una clase los mensajes: subclasses, superclass, allInstances.

          
LECCION 3.- Herencia en JAVA

DURACION: 2 horas.

      Preguntas:      - ¿Qué características específicas presenta la herencia en JAVA?

                            - ¿Qué es una interface?

  PUNTOS A TRATAR

1.- Herencia de clases

        ARNOLD, 61-73

        FROUFE, 112-115

2. Herencia de interfaces

            MC

3. Polimorfismo y herencia

4. Estructura de clases en JAVA: colecciones

Arnold p. 407-416

Froufe p. 47-79

5. La clase Class

        Arnold, p. 270-274

6. Simulación de herencia múltiple con interfaces

                        FROUFE 121-127

                        MC

INDICACIONES  

Punto 1.- Las características fundamentales de la herencia de clases en JAVA son muy similares a Smalltalk. Debido a la presencia de los constructores y de los modificadores de ámbito, JAVA tiene una serie de características de implementación que conviene conocer para no encontrarse con sorpresas. Estas características se explican muy bien en Arnold

Punto 2.- Este punto se explica en el MC

Punto 3.- En este punto conviene recordar lo visto en el tema 3 sobre ligadura estática y dinámica. Realizar el ejercicio 1. Leer detenidamente lo que se menciona sobre herencia y sobreescritura de métodos en FROUFE, p 113-115.  

Punto 5.- La clase Class introduce algunas propiedades de reflexión en JAVA. Realizar el ejercicio 2.

Punto 6.- Este punto se introduce para provocar una discusión sobre el tema: ¿en realidad las interfaces permiten sustituir a la herencia múltiple?

  EJERCICIOS

1.- ¿Son posibles las colecciones de objetos heterogéneos (de diferentes clases) en JAVA? ¿Qué requisitos debe cumplir el envío de mensajes a los objetos contenidos en estas colecciones heterogéneas? Recordar lo visto acerca del 'casting' en JAVA (tema 3) y pensar en la posibilidad de hacer el casting a interfaces.

2.- Comparar el significado y utilidad de la clase Class en JAVA y Smalltalk. ¿A qué clase de Smalltalk equivaldría la clase Class de JAVA?

 

LECCION 4.- Diseño de estructuras de herencia

      DURACION: 2 horas.

      Preguntas:      - ¿Cuándo se debe usar la herencia?

                        - ¿Qué diferencias hay entre el uso de herencia, polimorfismo y agregación?

PUNTOS A TRATAR

            1.- Especialización y herencia

                  BUDD, p.92-93

            2.- Otros buenos y malos usos de la herencia: ventajas e inconvenientes.

                  BUDD, p.93-97

            3.-  Herencia y agregación

                  BUDD, p. 99-102

            4.- Herencia y tipos

                  AC

            5.- Herencia y generalización

                  AC

INDICACIONES

            Punto 3.- Budd llama CONSTRUCCION al uso de la herencia y COMPOSICION a la agregación. El traductor se ha hecho un lío con ambas y a lo largo del texto las confunde. En la figura 6.9 debe decir ‘composición’ en vez de ‘construcción’.

  EJERCICIOS

            Las prácticas 4 y 5 deberían hacer reflexionar sobre el uso de la herencia y, especialmente, sobre la oposición entre herencia y agregación.


 LECCION 5.- Implementación de la herencia y el polimorfismo

 DURACION: 1 hora.

 Preguntas: - ¿Qué características tiene la implementación de la herencia y el polimorfismo en los LDO?

 

PUNTOS A TRATAR

            1.- Implementación en lenguajes compilados

                  BUDD p.283-290

            2.- Implementación en lenguajes interpretados

                  BUDD p.291-293