polimorfismo,clases abstractas e interfaces en java
TRANSCRIPT
POLIMORFISMOPOLIMORFISMO
http://www.miprimercodigo.com
Polimorfismo Polimorfismo
Mediante el polimorfismo, se pueden escribir programas que procesen genéricamente – como objetos de superclase- objetos de todas las clases existentes en una jerarquía. Las clases que no existen durante el desarrollo de los programas se pueden agregar con poca o ninguna modificación de la parte genérica del programa, en tanto esas clases formen parte de la jerarquía que se esta procesando genéricamente.
22
Polimorfismo Polimorfismo
Hay varias formas de polimorfismo:– Cuando invocamos el mismo nombre de método
sobre instancias de distinta clase– cuando creamos múltiples constructores– cuando vía subtipo asignamos una instancia de
una subclase a una referencia a la clase base.
Cuando creamos una clase derivada, gracias a la relación es-un podemos utilizar instancias de la clase derivada donde se esperaba una instancia de la clase base. También se conoce como principio de substitución.
33
Conceptos básicos: POLIMORFISMOConceptos básicos: POLIMORFISMO
Ej: Operación “Abrir”
44
Permite al modelador hablar el lenguaje del cliente. Evita asignar identificadores artificiosos para
distinguir las operaciones. Contribuye a la reutilización de código. Ej: Operación “Enchufar”
Puerta PlazoPuertoCuenta
Abrir()Abrir() Abrir()Abrir()
TomaDeCorrientetensión
Enchufar(e:Electrodoméstico)
““Casteo”(Casting): Cambio de tipo Casteo”(Casting): Cambio de tipo forzadoforzado
¿Cómo podemos acceder a los métodos definido en una clase derivada pero no en la base?
Se debe hacer un cambio de tipo forzado. Por ejemplo:
55
““Casteo”(Casting): Cambio de tipo Casteo”(Casting): Cambio de tipo forzadoforzado
66
““Casteo”(Casting): Cambio de tipo Casteo”(Casting): Cambio de tipo forzadoforzado
¿Cómo sabemos que e es una referencia a una instancia de Manger?
Lo podemos preguntar con el operador instance of.
77
““Casteo”(Casting): Cambio de tipo Casteo”(Casting): Cambio de tipo forzadoforzado
88
CLASES ABSTRACTASCLASES ABSTRACTAS
http://www.miprimercodigo.com
Clases Abstractas Clases Abstractas
Llevando la idea de herencia a un extremo, podemos pensar en buenas clases para representar un grupo de objetos pero que no tienen instancias propias.– Por ejemplo Forma como clase base de Triangulo,
Circulo, Cuadrado.
Forma puede indicar todo el comportamiento válido para una forma pero no puede instanciarse por si mismo.
1010
Clases Abstractas Clases Abstractas
Las clases abstractas suelen representar conceptos generales, las características comunes de una serie de objetos.
1111
Declaración: Declaración:
En ente caso las clases abstractas deben por tener al menos un método declarado pero no implementado( Método Abstracto)
1212
Atributos
Métodos
Nombre de la Clase
Uno o mas Métodos
Abstractos
Palabra Reservada
Clases Abstractas Clases Abstractas
Las clases abstractas suelen representar conceptos generales, las características comunes de una serie de objetos.
Las clases abstractas pueden definir métodos no abstractos y atributos, y normalmente métodos abstractos. El Lenguaje java obliga a que si una clase tiene un método abstracto la clase se declara abstracta.
1313
Clases Abstractas Clases Abstractas
Una característica importante es que no se pueden crear objetos de una clase abstracta. Pero si se pueden declarar variables de una clase abstracta. Como estas están en lo más alto de la Jerarquía de clases, son superclases base, hay una conversión automática de referencias de clases derivadas a clases base. Así, se puede asignar a una variable de clase base abstracta cualquier objeto concreto de las clases derivadas.
1414
Clases Abstractas Clases Abstractas
Una clase derivada que no redefine un método abstracto es también clase abstracta.
A menudo existen clases que sirven para definir un tipo genérico pero que no tiene sentido instanciar (crear objetos de ella).
Métodos abstractos: Un método abstracto significa que tiene que ser sobrescrito. No está implementado.
1515
Clases Abstractas Clases Abstractas
Una clase con uno o varios métodos abstractos tiene que ser declarada abstracta.
No obstante una clase abstracta no tiene porque tener métodos abstractos.
La clase abstracta tiene un método sin implementación.
1616
INTERFACESINTERFACES
http://www.miprimercodigo.com
INTERFACES INTERFACES
El concepto de interface lleva un paso más adelante la idea de las clases abstractas.
En Java una interface es una clase abstracta pura, es decir una clase donde todos los métodos son abstractos (no se implementa ninguno).
Permite al diseñador de clases establecer la forma de una clase (nombres de métodos, listas de argumentos y tipos de retorno, pero no bloques de código).
1818
INTERFACES INTERFACES
Una interface puede también contener datos miembro, pero estos son siempre static y final. Una interface sirve para establecer un 'protocolo' entre clases.
Para crear una interface, se utiliza la palabra clave interface en lugar de class.
La interface puede definirse public o sin modificador de acceso, y tiene el mismo significado que para las clases
1919
INTERFACES INTERFACES
Todos los métodos que declara una interface son siempre public.
Para indicar que una clase implementa los métodos de una interface se utiliza la palabra clave implements.
El compilador se encargará de verificar que la clase efectivamente declare e implemente todos los métodos de la interface.
Una clase puede implementar más de una interface.
2020
INTERFACES INTERFACES
Los interfaces son un tipo de clase especial que no implementa ninguno de sus métodos. Todos son abstractos. Por tanto no se pueden instanciar.
Si una clase que hereda de un interface, no implementa todos los métodos de este, deberá ser definida como abstracta.
2121
Referencias a Interfaces
Es posible crear referencias a interfaces, pero las interfaces no pueden ser instanciadas. Una referencia a una interface puede ser asignada a cualquier objeto que implemente la interface.
Por ejemplo:
InstrumentoMusical instrumento = new Guitarra();
instrumento.play();
System.out.prinln(instrumento.tipoInstrumento());
2222
Extensión de interfaces
Las interfaces pueden extender otras interfaces y, a diferencia de las clases, una interface puede extender más de una interface. La sintaxis es:
2323
Paquetes Paquetes
Claúsula package
Un package es una agrupación de clases afines. Equivale al concepto de librería existente en otros lenguajes o sistemas. Una clase puede definirse como perteneciente a un package y puede usar otras clases definidas en ese o en otros packages.
2424
Paquetes Paquetes
Claúsula package
Los packages delimitan el espacio de nombres (space name). El nombre de una clase debe ser único dentro del package donde se define. Dos clases con el mismo nombre en dos packages distintos pueden coexistir e incluso pueden ser usadas en el mismo programa.
2525
Paquetes Paquetes
Claúsula package
Una clase se declara perteneciente a un package con la clausula package, cuya sintaxis es:
package nombre_package; La clausula package debe ser la primera
sentencia del archivo fuente. Cualquier clase declarada en ese archivo pertenece al package indicado.
2626
Paquetes Paquetes
Claúsula package
La claúsula package es opcional. Si no se utiliza, las clases declaradas en el archivo fuente no pertenecen a ningún package concreto, sino que pertenecen a un package por defecto sin nombre.
2727
Paquetes Paquetes
Claúsula package
La agrupación de clases en packages es conveniente desde el punto de vista organizativo, para mantener bajo una ubicación común clases relacionadas que cooperan desde algún punto de vista.
También resulta importante por la implicación que los packages tienen en los modificadores de acceso, que se explican en un capítulo posterior.
2828
Claúsula import Cuando se referencia cualquier clase dentro de otra se asume, si no se indica otra cosa, que ésta otra está declarada en el mismo package .
Tema 5. El Paradigma Orientado a Objetos.Tema 5. El Paradigma Orientado a Objetos.
2929