Tema 2 Relaciones Entre Clases-1
Tema 2 Relaciones Entre Clases-1
[2.4] Polimorfismo
TEMA
Métodos Avanzados de Programación Científica y Computación
Esquema
Ideas clave
Para estudiar este tema debes leer las páginas 75-114 y 123-124 del siguiente libro,
disponible en la Biblioteca Virtual de UNIR:
García, L. F. (2010). Todo lo básico que debería saber sobre programación orientada a
objetos en Java. Barranquilla: Uninorte.
Para comprobar si has comprendido los conceptos realiza el test de autoevaluación del
tema.
En este tema vamos a estudiar las principales relaciones entre clases. Entraremos en
profundidad en todos los conceptos de diseño y modelado de diagramas de clases. A
partir de estas relaciones podemos desarrollar soluciones a problemas complejos de
programación.
Abstracción
Según la RAE, es el proceso de separar por medio de una operación intelectual
las cualidades de un objeto para considerarlas aisladamente o para considerar el
mismo objeto en su pura esencia o noción.
Ejemplo:
Se quiere realizar un programa informático que gestione los empleados de una empresa
informática. Existen dos tipos de empleados los empleados: internos y los colaboradores.
Los empleados internos tienen nombre, apellidos, DNI, teléfono, cargo e ID de
empleado. De los empleados externos se almacena el nombre, apellidos, DNI y empresa
a la que pertenece.
EmpleadoInterno EmpleadoExterno
Como podemos ver, hay atributos que son comunes. Si realizáramos la identificación
de los métodos veríamos que ocurre lo mismo. De estas dos clases podríamos extraer
una en la que se agruparan aquellos atributos y métodos comunes.
Con lo que nos quedaría algo similar a una clase en la que se agrupan todos los elementos
comunes y luego dos clases que tienen la parte especializada.
Herencia
Es el proceso por el que una subclase obtiene todos los métodos y atributos de
una clase superior. Como se puede ver, la herencia no puede existir sin la
abstracción.
En UML la herencia se identifica a través de una flecha que apunta a la clase padre.
Clase padre
Clase hija
Empleado
Nombre: String
Apellidos: String
DNI: String
EmpleadoInterno EmpleadoExterno
Implementación en Java
class padre {
}
Para acceder desde la clase hijo a la clase padre utilizamos la palabra reservada super. Si
utlizamos super() o super(argumentos) lo que hacemos es invocar el método constructor
de la clase padre.
La subclase:
Clase abstracta
Es aquella que no tiene implementado alguno de los métodos que la dotan de
comportamiento. No es instanciable. Es decir, no se puede hacer new de la clase.
Cuando tenemos una clase abstracta pura, es decir, que no tiene implementados ninguno
de sus métodos, hablamos de una interface. Para que una clase use una interface se
utiliza la palabra reservada implements.
Interface Instrumento{
Void tocar(){}
}
Class viento implements instrumento{
Herencia múltiple
En POO la herencia múltiple se refiere al proceso por el que una clase hereda de
dos clases superiores.
2.4. Polimorfismo
Polimorfismo
Según la RAE es la cualidad de lo que tiene o puede tener distintas formas.
Una clase hereda el comportamiento de la clase base, pero reescribe los métodos
necesarios para dotarla de otro comportamiento.
Figura
Color: RGB
CalcularArea()
DibujarFigura()
Rectangulo Cuadrado
base: integer
lado: integer
altura: integer
CalcularArea() CalcularArea()
DibujarFigura() DibujarFigura()
En este caso, las figuras Rectangulo y Cuadrado heredan de la clase base Figura el
atributo color. Los métodos CalcularArea() y DibujarFigura() los sobreescribiran, ya
que son diferentes dependiendo de la figura.
Redefinición y sobrecarga
Agregación
Es un tipo de asociación que indica que una clase es parte de otra más grande,
también se llama como composición débil. La destrucción del objeto
compuesto no supone la destrucción de los objetos que la componen.
EquipoFutbol Futbolista
Composición
Este tipo asociación indica que una clase contenedora contiene elementos más
pequeños. Los componentes forman parte del objeto compuesto. La
destrucción del objeto contenedor supone la eliminación de los objetos que la
componen. También se llama agregación fuerte.
Coche Motor
En este caso lo que estamos indicando es que el objeto motor no puede vivir si desaparece
el objeto coche. Ambos acabarían su ciclo de vida a la vez.
Por ejemplo, una clase MiLinea, quedaría definida por dos objetos de la clase MiPunto,
que representasen el punto de inicio y de fin de la línea:
class MiLinea {
MiPunto punto1;
MiPunto punto2;
Libro() {
punto1=new MiPunto();
punto2=new MiPunto();
}
}
La palabra reservada this nos permite acceder a los miembros de la propia clase.
Mediante this.NombreVariable estamos indicando que la variable NombreVariable
es la de la propia clase.
this.base = base;
this.exponente = exponente;
if (exponente == 0) return;
for (;exponent>0;exponent--)
valor*=base;
}
En el constructor de la clase Potencia los argumentos tienen el mismo nombre que las
variables de la clase. En la sentencia this.base = base, this.base se refiere a la variable
base de la clase Potencia y base se refiere al argumento del constructor.
La palabra reservada super nos permite hacer referencia al método o variable de la clase
padre.
public ClaseHija() {
j = 12;
}
public setValor( int valor ) {
j = valor/2;
super.setValor( valor );
}
}
ClaseHija ch;
ch = new ClaseHija();
ch.setValor( 20 );
public ClaseHija() {
j = 12;
}
}
}
ClaseHija ch;
ch = new ClaseHija(30);
ch.setValor( 20 );
Es decir que se pude definir que un tiempo más eficiente (Te) es menor a otro tiempo de
ejecución menos eficiente (Tm) y se puede expresar de la siguiente forma:
<
Por ejemplo, consideremos dos tiempos de ejecución que tienen los siguientes tiempos
en función de una entra n=100.000.
Comparando estos dos tiempos de ejecución, el tiempo 5n3 es mejor que 106n2. Sin
embargo, para tamaños de entrada mayores a 200.000, el tiempo 106n2 será mejor que
el de 5n3. En la siguiente tabla se puede ver la relación de entrada y salida para estos dos
tiempos.
Por lo tanto, se pueden definir tres casos diferentes como son: caso mejor, caso medio
y caso peor. En donde el caso mejor será el caso con menos instrucciones y el caso
medio será la media entre el máximo y mínimo de instrucciones.
Línea 6 else {
Como se puede observar, las líneas 1, 5 y 7 tienen solo una operación y por lo tanto OB=1.
Mientras que las demás realizan más operaciones.
a) Para el caso mejor, se indicó anteriormente que será el caso en donde se realicen
menos operaciones. Es decir que empezara por la línea 1 y seguirá por la línea 2. En el
mejor de los casos (en términos de menos operaciones) la línea dos, se realizará solo
la mitad de la condición y seguirá por la línea 4 y terminará por las líneas 5 o 7 según
sea el caso. Por lo tanto, el Tmejor = 1+2+2+1 = 6.
b) Para el caso peor, el algoritmo empezara por la línea 1 y llegara al bucle while que se
repetirá n-1 veces hasta que se cumpla la segunda condición. Dentro del bucle while
hay un incremento con 1 OB y el bucle vale 4 OB es decir que se repetirá (n-1)(4+1),
después que la condición se efectúa del while valdrá otros 4 OB. Después la línea 4
usa 2 OB y finalmente la función termina con la línea 7 que vale 1 OB. Por
consiguiente, el tiempo en el peor caso es:
c) Para el caso medio, será la mitad de veces que se repita el bucle while: (n-1)/2=m.
Por lo tanto, el valor medio es:
De esta manera se puede saber los grados de complejidad que un algoritmo tiene y
analizar hasta qué punto el algoritmo será más o menos eficiente como se vio en la
comparación de un algoritmo de grado cubico y cuadrado.
Lo + recomendado
No dejes de leer…
Herencia
García, L. F. (2010). Todo lo básico que debería saber sobre programación orientada a
objetos en Java. Barranquilla: Uninorte.
Paquetes en Java
Consulta la página de Oracle en la que podrás encontrar información detallada sobre los
paquetes en Java.
Herencia en Java
No dejes de ver…
Proyecto en ArgoUML
Herencia en Java
Polimorfismo en Java
+ Información
A fondo
UML Distilled
Accede a una parte del libro desde el aula virtual o a través de la siguiente dirección web:
http://books.google.es/books?id=nHZslSr1gJAC&printsec=frontcover
Actividades
Para poder afrontar los ejercicios planteados en este laboratorio es necesario haber
estudiado previamente los temas 1 y 2. Además, tendrás que tener instalado el entorno
de desarrollo Eclipse, del que encontrarás más información en el apartado Recursos
externos del tema.
Entrega de laboratorio
Test
3. La agregación es:
A. La propiedad por la que una clase hereda comportamiento de otra clase llamada
clase padre.
B. Es la relación que tienen dos clases que se crean de manera consecutiva.
C. Es la relación que tienen dos clases en las que una clase forma parte de la otra.
D. Es la relación que tienen dos clases que se intercambian mensajes.