Upload
paelams
View
325
Download
0
Embed Size (px)
Citation preview
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
©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
©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.
©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.
©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.
©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.
©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)
©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.
©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.
©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
©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)
©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.
©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.
©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.
©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
©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.
©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.
©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
©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.
©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.
©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.
©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
©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?
©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
©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.
©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
©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