P. 1
Conceptos Avanzados de POO

Conceptos Avanzados de POO

|Views: 336|Likes:
Published by paelams

More info:

Categories:Types, Research
Published by: paelams on Dec 18, 2010
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PPT, PDF, TXT or read online from Scribd
See more
See less

07/06/2014

pdf

text

original

Diseño y Programación Orientada a Objetos Un enfoque científico

Conceptos avanzados de POO
Facultad de Informática Departamento de Lenguajes y Sistemas Informáticos e Ingeniería de Software Universidad Pontificia de Salamanca en Madrid

Conceptos avanzados de POO

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

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

Septiembre 1999
2

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
3

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
4

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
5

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
6

Clases abstractas (lll)

impresora

Figura

impresora chorro_tinta

impresora matriz_puntos

Elipse

Rectángulo

impresora láser Circulo (a) (b) Cuadrado

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

Septiembre 1999
7

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
8

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
9

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 abstracta

clase concreta

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

Septiembre 1999
10

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
11

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
12

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
13

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
14

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
15

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
16

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
17

Ejemplo
Persona

Perso a N om bre edad visualizar() Est ia te nom bre edad id visualizar()

Profesor

Estudiante

heredado heredado definido redefinido

Profesor nom bre edad salario visualizar

heredado heredado definido heredada

visualizar() virtual: Estudiante concreta / Profesor virtual visualizar() concreta: Estudiante redefine / Profesor hereda

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

Septiembre 1999
18

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
19

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
20

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
21

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
22

Agregación (ll)
Puede ser de dos tipos: por contenido físico o por contenido por referencia o 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? Septiembre 1999
23 

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

Agregación (ejemplos)
Grafo

Grafo

Nodo

Nodo

Arco

Directorio
Coche

4

Archivo

Motor

Rueda

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

Septiembre 1999
24

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
25

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 Universidad Pontificia de Salamanca en Madrid
Departamento de Lenguajes y Sistemas Informáticos e Ingeniería del Software

Septiembre 1999
26

Asociación (ejemplos)
Ventana 0..* Es visible en 1 Pantalla

Empleado 1..*

Trabaja para 1..*
Jugador

Empresa

Temporada Milita

Equipo

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

Septiembre 1999
27

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->