Polimorfismo,Clases Abstractas e Interfaces en java

29
POLIMORFISMO POLIMORFISMO http://www.miprimercodigo.com

Transcript of Polimorfismo,Clases Abstractas e Interfaces en java

Page 1: Polimorfismo,Clases Abstractas e Interfaces en java

POLIMORFISMOPOLIMORFISMO

http://www.miprimercodigo.com

Page 2: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 3: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 4: Polimorfismo,Clases Abstractas e Interfaces en java

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)

Page 5: Polimorfismo,Clases Abstractas e Interfaces en java

““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

Page 6: Polimorfismo,Clases Abstractas e Interfaces en java

““Casteo”(Casting): Cambio de tipo Casteo”(Casting): Cambio de tipo forzadoforzado

66

Page 7: Polimorfismo,Clases Abstractas e Interfaces en java

““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

Page 8: Polimorfismo,Clases Abstractas e Interfaces en java

““Casteo”(Casting): Cambio de tipo Casteo”(Casting): Cambio de tipo forzadoforzado

88

Page 9: Polimorfismo,Clases Abstractas e Interfaces en java

CLASES ABSTRACTASCLASES ABSTRACTAS

http://www.miprimercodigo.com

Page 10: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 11: Polimorfismo,Clases Abstractas e Interfaces en java

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)

Page 12: Polimorfismo,Clases Abstractas e Interfaces en java

1212

Atributos

Métodos

Nombre de la Clase

Uno o mas Métodos

Abstractos

Palabra Reservada

Page 13: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 14: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 15: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 16: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 17: Polimorfismo,Clases Abstractas e Interfaces en java

INTERFACESINTERFACES

http://www.miprimercodigo.com

Page 18: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 19: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 20: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 21: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 22: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 23: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 24: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 25: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 26: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 27: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 28: Polimorfismo,Clases Abstractas e Interfaces en java

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

Page 29: Polimorfismo,Clases Abstractas e Interfaces en java

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