Conceptos Avanzados de POO

27
ultad de Informática artamento de Lenguajes y Sistemas Informáticos e Ingeniería de Software versidad Pontificia de Salamanca en Madrid Diseño y Diseño y Programación Programación Orientada a Orientada a Objetos Objetos Un Un enfoque enfoque científico científico Conceptos avanzados de POO

Transcript of Conceptos Avanzados de POO

Page 1: Conceptos Avanzados de POO

Facultad de InformáticaDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería de SoftwareUniversidad Pontificia de Salamanca en Madrid

Diseño y Programación Diseño y Programación Orientada a Objetos Orientada a Objetos UnUn enfoqueenfoque científicocientífico

Conceptos avanzados de POO

Page 2: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

2

Conceptos avanzados de POO

Redefinición Sobrecarga Clases abstractas Funciones virtuales Polimorfismo Ligadura dinámica

Page 3: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

3

Redefinición

También conocida como anulación o sustitución (overriding).

Una vez que un atributo o método se redefine en un nivel de clases específico, entonces cualquier objeto de esa clase, o de sus descendientes en cualquier profundidad, utilizan este método o atributo redefinido.

La sustitución se emplea como parte del mecanismo de especialización.

Page 4: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

4

Sobrecarga

Utilización del mismo nombre de operación para representar operaciones similares en clases distintas.

Añade uniformidad a los diseños OO.

Mecanismo muy utilizado en las jerarquías de clases para anular las operaciones de niveles superiores.

La aplicación más general es la sobrecarga de operadores.

Page 5: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

5

Clases abstractas (l)

Con frecuencia, es útil introducir clases a cierto nivel que pueden no existir en la realidad, pero que son construcciones conceptuales útiles.

Sólo tienen significado como clase base de otras clases.

No tienen instancias directamente.

Normalmente son las clases de nivel más alto de la jerarquía.

Page 6: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

6

Clases abstractas (ll)

Una clase abstracta tiene al menos una función miembro que se declara pero no se define; su definición se realiza en una clase derivada.

Debido a que tiene al menos una función que no se puede llamar, no puede ser instanciada.

Las funciones declaradas y no definidas se denominan virtuales, diferidas o postergadas.

Page 7: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

7

Clases abstractas (lll)

impresora

impresorachorro_tinta

impresoramatriz_puntos

impresoraláser

(a)

Figura

Elipse

Circulo

Rectángulo

Cuadrado

(b)

Page 8: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

8

Funciones virtuales (l)

Funciones cuya declaración no está seguida por una definición.

La implementación se posterga a las clases derivadas.

La redefinición en las subclases debe tener la misma signatura.

Su uso fundamental es la declaración de clases abstractas y la implementación del polimorfismo.

Page 9: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

9

Funciones virtuales (ll)

No pueden ser llamadas.

Si una clase derivada de una clase abstracta no define todas las funciones virtuales puras de la clase base, la clase derivada es también una clase abstracta.

Una clase es abstracta por el hecho de tener al menos una función virtual.

Las clases abstractas declaran las funciones miembro que han de ser implementadas en las clases derivadas.

Page 10: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

10

Funciones virtuales (lll)

Figura{abstracta}

x_centro: float

y_centro: float

calcular_area (): float

dibujar(): void

Círculo

radio: float

color_fondo: int

calcular_area (): float

dibujar(): void

clase concretaclase abstracta

Page 11: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

11

Formación de estructuras jerárquicas (l)

La jerarquía de clases debe ser estrecha (afilada) y profunda (honda). Debe tener varios niveles de profundidad y no se puede resolver en una estructura "planta" de sólo un par de niveles.

(A) (B)

Page 12: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

12

Formación de estructuras jerárquicas (ll)

La clase de nivel más alto en la jerarquía debe ser abstracta. Generalmente, si más de una clase tiene que redefinir un método heredado, entonces puede ser preferible mover la parte común a una nueva clase abstracta de las que todas las clases se pueden heredar.

Las clases derivadas deben ser especializaciones.

Todas las clases intermedias deben ser abstractas, mientras que sólo las clases terminales serán concretas. Principio difícil de cumplir.

Page 13: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

13

Formación de estructuras jerárquicas (lll)

Minimizar el acceso a variables. Es preferible que se acceda a variables mediante funciones, en lugar de directamente para permitircambiar la representación de datos fácilmente.

La herencia simple se representa con árboles y la herencia múltiple mediante grafos acíclicos dirigidos.

Page 14: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

14

Polimorfismo

El mismo operador se utiliza con diferentes tipos de objetos, los cuales responden de forma diferente.

Máxima potencia en jerarquías de herencia.

Permite utilizar la misma interfaz para trabajar con diferentes clases de objetos de la misma jerarquía.

La comprobación estática de tipos debe ser lo suficientemente flexible como para permitirlo.

Page 15: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

15

Aplicaciones del polimorfismo

Especialización de clases derivadas. El polimorfismo aumenta la eficiencia de las subclases, conservando un

alto grado de flexibilidad y proporcionando un medio uniforme.

Estructuras de datos heterogéneos. Creación y manejo de estructuras de datos heterogéneos fáciles de

diseñar.

Gestión de una jerarquía de clases. Las jerarquías de clases son colecciones de clases altamente

estructuradas con relaciones de herencia que se pueden extender fácilmente

Page 16: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

16

Ligadura dinámica

La invocación a una característica sobre una entidad debe desencadenar siempre la característica correspondiente al tipo del objeto asociado a dicha entidad, que no será necesariamente el mismo en diferentes ejecuciones de la llamada.

Resolución del método a emplear en tiempo de ejecución.

Se basa en que una referencia a una clase derivada también lo es a la clase base.

Una función polimórfica que se enlaza dinámicamente se llama función virtual.

Page 17: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

17

Ligadura dinámica vs. Ligadura estática

La ligadura estática se produce cuando se define una función polimórfica para diferentes clases de una familia y el código real de la función se conecta o enlaza en tiempo de compilación.

La ligadura estática, se produce cuando el código de la función "se enlaza" en tiempo de compilación.

Las funciones sobrecargadas se enlazan estáticamente: el compilador puede determinar cual es la función a llamar según el número y tipo de datos de los parámetros de función.

Page 18: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

18

Ejemplo

Persona

EstudianteProfesor

PersonaNombreedadvisualizar()

Estudiante Profesornombre heredado nombre heredadoedad heredado edad heredadoid definido salario definidovisualizar() redefinido visualizar heredada

visualizar() virtual: Estudiante concreta / Profesor virtual

visualizar() concreta: Estudiante redefine / Profesor hereda

Page 19: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

19

Relaciones (l)

Los objetos no existen de forma aislada.

Las relaciones entre entidades se expresan utilizando locuciones del lenguaje ordinario, tales como vive-en, estudia-en, trabaja-para, etc.

Las relaciones indican: compartición (Por ejemplo, margaritas y rosas, son ambas tipos de

flores). conexión semántica; por ejemplo, las rosas rojas y amarillas son más

parecidas entre si que las margaritas y rosas.

Page 20: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

20

Relaciones (ll)

Tipos de relaciones: generalización/especialización (es-un) agregación (todo/parte) asociación

Los objetos cuentan con las asociaciones de la clase a la que pertenecen.

Dos clases no relacionadas no pueden comunicarse mediante mensajes.

Page 21: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

21

Generalización/Especialización

Relación “es-un” / “es-un-tipo-de”.

Estructura las clases del modelo en jerarquías.

Una de sus propiedades es la herencia de características.

Relación de ascendencia: Ascendiente inmediato: clase padre. Descendiente inmediato: clase hija.

Page 22: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

22

Agregación (l)

Relación que representa objetos compuestos.

Palabras clave: “es-parte-de” / “está-formado-por”.

Dos objetos tienen una relación de agregación si existe entre ellos una relación todo-parte, continente-contenido.

Representación (UML):

Todo Parte

Page 23: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

23

Agregación (ll)

Puede ser de dos tipos: por contenido físico o por contenido por referencia o conceptual.

Encontrar las agregaciones:

¿Se utiliza la frase parte-de (tiene-un, consta-de...) para describir la relación?

¿Las operaciones del todo se aplican automáticamente a sus partes?

¿Los valores de los atributos se propagan del ‘todo’ a todas o a algunas de sus partes?

¿Existe una asimetría intrínseca a la asociación, en la que una clase de objetos se subordina a la otra?

Page 24: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

24

Agregación (ejemplos)

Grafo NodoGrafo

Nodo Arco

Archivo

Directorio

Coche

Motor Rueda

4

Page 25: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

25

Asociación (l)

Dependencia semántica más débil entre clases.

En general, las asociaciones son bidireccionales, aunque pueden ser unidireccionales.

Para encontrar relaciones de asociación es preciso buscar frases tales como "pertenece a", "es miembro de", "está asociado con", "trabaja para",...

Las asociaciones pueden ser unitarias, binarias, ternarias o de cualquier otro orden, aunque la mayoría serán binarias.

Page 26: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

26

Asociación (ll)

Una asociación es un conjunto de enlaces.

La multiplicidad es la propiedad que expresa el número de instancias de una clase que pueden asociarse o conectarse con una instancia de la clase asociada. Es un rango.

La cardinalidad expresa el número de instancias de una clase asociadas o conectadas con una instancia de la clase asociada. Es un número.

Valores de multiplicidad típicos: 1..1, 1..n, n..n

Page 27: Conceptos Avanzados de POO

©Luis Joyanes, Salvador Sánchez Septiembre 1999Universidad Pontificia de Salamanca en MadridDepartamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

27

Asociación (ejemplos)

Ventana PantallaEs visible en

0..* 1

Empleado Empresa

1..*

Trabaja para

1..*

Jugador

Temporada Equipo

Milita