Curso de Java POO: Programación orientada a...

92
Previo Repaso y encapsulaci´on Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz Curso de Java POO: Programaci´on orientada a objetos Luis Guerra [email protected] Curso INEM. Programaci´on en Java Marzo 2011

Transcript of Curso de Java POO: Programación orientada a...

Page 1: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Curso de JavaPOO: Programacion orientada a objetos

Luis [email protected]

Curso INEM. Programacion en Java

Marzo 2011

Page 2: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Indice

1 Previo

2 Repaso y encapsulacion

3 Empaquetado

4 Relaciones entre clases

5 Herencia

6 Polimorfismo

7 Abstractas e Interfaz

Page 3: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Indice

1 Previo

2 Repaso y encapsulacion

3 Empaquetado

4 Relaciones entre clases

5 Herencia

6 Polimorfismo

7 Abstractas e Interfaz

Page 4: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Paradigma

Un paradigma es una forma de afrontar la construccion decodigo software

No hay paradigmas mejores ni peoresTodos tienen sus ventajas e inconvenientes

Hay distintos paradigmas:

POO, Estructurado, Funcional, Logico, etc

Page 5: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Caracterısticas de la POO

Facilidad de diseno y relacion con el mundo real (UML)

Reusabilidad y facilidad de mantenimiento

Sistemas mas complejos

AbstraccionTrabajo en equipo

Del lenguaje maquina hacia el mundo real

Resuelve problemas complicados. No esta pensado para tareassencillas

Page 6: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

UML

UML (Unified Modeling Language): Lenguaje unificado demodelos

“Mapa” del codigo. No sirve para desarrollar, sino paradescribir

Se utilizan diferentes diagramas. 13 en UML 2.0

Figura: Jerarquıa de diagramas UML 2.0

Page 7: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Elementos de la POO

Los elementos principales son:

clases: Especificacion de un conjunto de elementosobjetos: Elemento autonomo y con una funcionalidad concreta.Instancias concretas de una clase

Tambien se basa en otros conceptos, como herencia,polimorfismo y encapsulamiento, que seran estudiados masadelante

Page 8: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Elementos de la POO

Los elementos principales son:

clases: Especificacion de un conjunto de elementosobjetos: Elemento autonomo y con una funcionalidad concreta.Instancias concretas de una clase

Tambien se basa en otros conceptos, como herencia,polimorfismo y encapsulamiento, que seran estudiados masadelante

Page 9: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Perros. Objetos y Clases

Page 10: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Perros. Objetos y Clases

Page 11: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Perros. Objetos y Clases

Page 12: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Perros. Objetos y Clases

Page 13: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Resumen de objetos y clases

Clases

Representan conceptos o entidades significativas de unproblemaSe pueden ver como plantillas para definir elementos (objetos)Pueden estar directamente relacionadas unas con otras

Objetos

Elementos con comportamiento definido en la clase y estadoconcretoInstancias de claseInteractuan por medio de mensajes

Page 14: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Resumen de objetos y clases

Clases

Representan conceptos o entidades significativas de unproblemaSe pueden ver como plantillas para definir elementos (objetos)Pueden estar directamente relacionadas unas con otras

Objetos

Elementos con comportamiento definido en la clase y estadoconcretoInstancias de claseInteractuan por medio de mensajes

Page 15: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Metodos y atributos

Comportamiento, describe los servicios que proporciona unaclase (lo que se puede hacer con ella). Son los metodos

Estado, describe el estado interno. Existen varias formas dedefinir distintos estados. Son los atributos

Page 16: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Metodos

Definen el comportamiento de los objetos de una clase

Devuelven un resultado

Pueden necesitar parametros

Estructura

Cabecera: tipoSalida - nombre - (parametros)

Cuerpo: Se define la implementacion del servicio

Page 17: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Metodos habituales

Constructor

Sirve para inicializar un objeto al crearlo

Existe sobrecarga (distintos parametros) (para cualquiermetodo)

Coincide con el nombre de la clase y no devuelve nada pordefinicion

Get & Set

Sirven para obtener o para modificar los atributos de una clase

Page 18: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Metodos habituales

Constructor

Sirve para inicializar un objeto al crearlo

Existe sobrecarga (distintos parametros) (para cualquiermetodo)

Coincide con el nombre de la clase y no devuelve nada pordefinicion

Get & Set

Sirven para obtener o para modificar los atributos de una clase

Page 19: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Metodos habituales

Destructor

No es tan habitual, no se suele usar (se hace de maneraautomatica)

Se tiene que sobreescribir

No devuelve nada por definicion

finalize

void f i n a l i z e ( )

Page 20: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Metodos habituales

Destructor

No es tan habitual, no se suele usar (se hace de maneraautomatica)

Se tiene que sobreescribir

No devuelve nada por definicion

finalize

void f i n a l i z e ( )

Page 21: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Atributos

Describen el estado interno de cada objeto concreto

Pueden ser:

Tipos basicos (int, boolean, short, etc)Array de elementosReferencias a otros objetos

Page 22: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Tipos de variables

De instancia: Definida para las instancias de una clase. Unacopia por objeto

De clase: Definida para la clase. Una copia por clase

static

s t a t i c i n t p e r r o s = 0 ;

Local: Definida dentro del cuerpo de un metodo, ambitorestringido

Page 23: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Tipos de variables

De instancia: Definida para las instancias de una clase. Unacopia por objeto

De clase: Definida para la clase. Una copia por clase

static

s t a t i c i n t p e r r o s = 0 ;

Local: Definida dentro del cuerpo de un metodo, ambitorestringido

Page 24: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Tipos de variables

De instancia: Definida para las instancias de una clase. Unacopia por objeto

De clase: Definida para la clase. Una copia por clase

static

s t a t i c i n t p e r r o s = 0 ;

Local: Definida dentro del cuerpo de un metodo, ambitorestringido

Page 25: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Uso de objetos e interaccion

Los objetos son instanciaciones de las clases. Es necesariorealizar dicha instanciacion para poder usarlos

Se comunican entre si mediante paso de mensajes

La invocacion de los metodos es la manera en la que se realizael paso de mensajes

Page 26: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo de plantilla

pub l i c c l a s s NombreClase {

/∗∗∗ At r i b u t o s :∗ t i p o nombreAtr ibuto1 ;∗ t i p o nombreAtr ibuto2 ;∗/

/∗∗∗ Metodos :∗ s a l i d a nombreMetodo1 ( pa ramet ros ) { con t en i do d e l

metodo } ;∗ s a l i d a nombreMetodo2 ( pa ramet ros ) { con t en i do d e l

metodo } ;∗/

}

Page 27: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplos de metodos habituales

c l a s s Per ro {S t r i n g nombre ;. . .vo id Per ro ( S t r i n g nombre ) {

t h i s . nombre = nombre ;}S t r i n g getNombre ( ) {

re tu rn t h i s . nombre ;}vo id setNombre ( S t r i n g nombre ) {

t h i s . nombre = nombre}

}

Page 28: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo de clase Perro

pub l i c c l a s s Per ro {

S t r i n g nombre ;S t r i n g r a za ;f l o a t a l t u r a ;

vo id pe r r o ( ) {}vo id comer ( ) {}vo id dormi r ( ) {}vo id l a d r a r ( ) {}

}

Page 29: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo de clase Perro

pub l i c c l a s s Per ro {

S t r i n g nombre ;S t r i n g r a za ;f l o a t a l t u r a ;

vo id pe r r o ( ) {}vo id comer ( ) {}vo id dormi r ( ) {}vo id l a d r a r ( ) {}

}

Page 30: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Instanciacion de objetos

Antes de poder usar un objeto tenemos que crearlo:

Nuevo operador

Tipo identificador = new Tipo()

Ejemplo con Perro

P e r r o miPancho = new P e r r o ( ” Pancho ” )

Per ro miPancho = new Per ro ( ”Pancho” , ”Cocker ” , 40)

Page 31: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Instanciacion de objetos

Antes de poder usar un objeto tenemos que crearlo:

Nuevo operador

Tipo identificador = new Tipo()

Ejemplo con Perro

P e r r o miPancho = new P e r r o ( ” Pancho ” )

Per ro miPancho = new Per ro ( ”Pancho” , ”Cocker ” , 40)

Page 32: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Operadores

Operador “.”

Acceso a miembros de una clase:

miPancho . nombre = ” Pancho ” ;miPancho . l a d r a r ( ) ;

Operador “this”

Acceso a atributos dentro de la propia clase:

t h i s . nombre = ” Pancho ” ;

Page 33: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Operadores

Operador “.”

Acceso a miembros de una clase:

miPancho . nombre = ” Pancho ” ;miPancho . l a d r a r ( ) ;

Operador “this”

Acceso a atributos dentro de la propia clase:

t h i s . nombre = ” Pancho ” ;

Page 34: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Uso de objetos

Una vez tenemos el objeto instanciado...

...podemos modificar su estado usando los metodos

Per ro miPancho = new Per ro ( ”Pancho” , ”Cocker ” , 40)

miPancho . setNombre ( ”Toby” )miPancho . d o r m i r ( )

Page 35: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Uso de objetos

Una vez tenemos el objeto instanciado...

...podemos modificar su estado usando los metodos

Per ro miPancho = new Per ro ( ”Pancho” , ”Cocker ” , 40)

miPancho . setNombre ( ”Toby” )miPancho . d o r m i r ( )

Page 36: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Indice

1 Previo

2 Repaso y encapsulacion

3 Empaquetado

4 Relaciones entre clases

5 Herencia

6 Polimorfismo

7 Abstractas e Interfaz

Page 37: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Repaso de conceptos

Clase

Objeto

Atributo

Variable

Metodo

Instanciar

Constructor

finalize

Paso de mensajes

static

Operador .

Operador this

Sobrecarga

final

Page 38: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Algunas preguntas

¿Tienen valor los atributos de una clase?

¿Que ocurre si no hay constructor en una clase?

¿Que ocurre si en el constructor de un objeto no se inicializantodos sus atributos?

¿Se puede utilizar una clase como atributo de otra clase?

¿Que ocurre si hay mas de una clase con main?

Page 39: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Encapsulacion

Puede (y suele) haber distintos niveles de visibilidad:

public: se puede acceder desde cualquier lugar

private: solo se puede acceder desde la propia clase

protected: solo se puede acceder desde la propia clase o desdeuna clase que herede de ella

De esta forma se controla que cosas son modificables y como sepueden modificar El estado suele ser privado, y se suele modificar atraves del comportamiento

Page 40: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo de clase Perro con visibilidad

pub l i c c l a s s Per ro {

p r i v a t e S t r i n g nombre ;p r i v a t e S t r i n g r a za ;p r i v a t e f l o a t a l t u r a ;

pub l i c vo id pe r r o ( ) {}pub l i c vo id comer ( ) {}pub l i c vo id dormi r ( ) {}pub l i c vo id l a d r a r ( ) {}

}

Page 41: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo de clase Perro con visibilidad

pub l i c c l a s s Per ro {

p r i v a t e S t r i n g nombre ;p r i v a t e S t r i n g r a za ;p r i v a t e f l o a t a l t u r a ;

pub l i c vo id pe r r o ( ) {}pub l i c vo id comer ( ) {}pub l i c vo id dormi r ( ) {}pub l i c vo id l a d r a r ( ) {}

}

Page 42: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Uso de metodos get y set

Get

Devuelve el valor de una variable

Set

Modifica el valor de una variable

Se pueden llamar como se quiera

El uso indiscriminado de estos metodos elimina laencapsulacion en Java. Principalmente si no se tiene cuidadoal programar cosas que pueden no tener sentido (pesonegativo, dıa 34, etc.)

Page 43: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Indice

1 Previo

2 Repaso y encapsulacion

3 Empaquetado

4 Relaciones entre clases

5 Herencia

6 Polimorfismo

7 Abstractas e Interfaz

Page 44: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Organizacion de clases

Puede haber mas de una clase en el mismo fichero fuente...

...pero solo una puede ser publica y debe coincidir en nombrecon el fichero

Lo habitual suele ser tener una clase por cada fichero fuente

Page 45: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ficheros

El codigo de una clase publica se encontrara en un fichero.java

El nombre del fichero coincidira con el nombre de la clase

Excepcion

En un fichero podrıa haber varias clases, si solo una de ellas espublic y el resto clases auxiliares

Page 46: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ficheros

El codigo de una clase publica se encontrara en un fichero.java

El nombre del fichero coincidira con el nombre de la clase

Excepcion

En un fichero podrıa haber varias clases, si solo una de ellas espublic y el resto clases auxiliares

Page 47: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Paquetes

Las clases se agrupan en paquetes

El paquete al que pertenece una clase se indica al comienzodel fichero:

Package

package e j e m p l o ;pub l i c c l a s s . . . {

Una clase solo puede pertenecer a un paquete

Page 48: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Paquetes

Las clases se agrupan en paquetes

El paquete al que pertenece una clase se indica al comienzodel fichero:

Package

package e j e m p l o ;pub l i c c l a s s . . . {

Una clase solo puede pertenecer a un paquete

Page 49: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Paquetes

Las clases se agrupan en paquetes

El paquete al que pertenece una clase se indica al comienzodel fichero:

Package

package e j e m p l o ;pub l i c c l a s s . . . {

Una clase solo puede pertenecer a un paquete

Page 50: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Paquetes

Se pueden organizar los paquetes de forma jerarquica

Jerarquia

package e j e m p l o . o b j e t o s ;

Para usar una clase que esta en distinto paquete:

Se puede importar la clase enteraSe pueden realizar llamadas utilizando:nombrepaquete.loquesea

Page 51: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Importar clases

Se puede importar un conjunto de clases

O una clase concreta

import

import e j e m p l o . ∗ ;import e j e m p l o . Concreto ;

Page 52: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Librerias externas

Se pueden utilizar librerias (clases compiladas) externas anuestro codigo

Por defecto, la libreria basica de JDK esta cargada

Por eso podemos utilizar directamente cosas como Math.PI

Cualquier paquete compilado se puede guardar como un .jar...

...y, por lo tanto, usarlo en otro proyecto

Page 53: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

.JAR

Las librerias son ficheros .JAR (Java ARchive)

Al compilar se guardan en la carpeta “dist”

Para usarlos, los anadimos a nuestro proyecto:

Propiedades - Librerias - Anadir JAR

Page 54: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Indice

1 Previo

2 Repaso y encapsulacion

3 Empaquetado

4 Relaciones entre clases

5 Herencia

6 Polimorfismo

7 Abstractas e Interfaz

Page 55: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Introduccion a UML

Las relaciones entre clases se suelen ver en el diagrama declases en la fase de diseno

Posteriormente se implementan en el codigo dependiendo deltipo de relacion

Figura: Ejemplo de clase en UML

Page 56: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Asociacion

Relacion entre clases que se mantiene en el tiempo

Puede tener un nombre, una direccion y una cardinalidad

Se refleja cuando se introducen referencias a objetos comoatributos

Dependiendo de la cardinalidad, habra que usar arrays oestructuras de datos

Page 57: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Agregacion

Caso particular de asociacion con contenido semantico

Hay una clase que representa el “todo” y el resto son las“partes”

El ciclo de vida de las “partes” no esta ligado al del “todo”

Ejemplo: PC y monitor

Page 58: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Composicion

Caso particular de agregacion

En este caso, la clase “todo” controla a las clases “parte”

Las clases “parte” no existen sin la clase “todo”

Ejemplo: Arbol y hojas

En lenguajes con recolector de basura, la diferencia entrecomposicion y agregacion es conceptual

Page 59: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Dependencia

Es muy habitual

Es cuando una clase utiliza a otra

Se refleja en las clases cuando:

Una clase hace una instanciacion de otro objetoCuando se pasa un objeto como parametro de un metodo deotro objetoCuando se realiza un “return” de un objeto

Page 60: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Generalizacion

Es una relacion de herencia

Se puede sustituir por la frase “es un”

Ejemplo: Medio de transporte y coche

Existe la relacion de Realizacion, cuando se implementa unainterfaz (se vera mas adelante)

Page 61: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo de diagrama de clases

Figura: Ejemplo de diagrama de clases

Page 62: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo de diagrama de clases II

Figura: Ejemplo de diagrama de clases con relaciones

Page 63: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Indice

1 Previo

2 Repaso y encapsulacion

3 Empaquetado

4 Relaciones entre clases

5 Herencia

6 Polimorfismo

7 Abstractas e Interfaz

Page 64: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Herencia

Es un mecanismo que sirve para reutilizar clases

Se utiliza cuando existen clases que comparten muchas de suscaracterısticas

Se extiende la funcionalidad de clases mas genericas

Se introducen los conceptos de superclase y subclase

Page 65: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Superclase y Subclase

Trabajador es la superclase

Empleado y consultor son subclases

Page 66: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Superclase y subclase

Los objetos de las subclases pueden poseer atributos ymetodos propios (no existentes en la superclase): adicion

Y ademas, heredan los atributos y metodos de la superclase

Page 67: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Clase Object

Realmente todas las clases que creemos son subclases...

...de la clase Object

Esta clase tiene metodos habituales que estan disponibles paracualquier clase que creemos:

cloneequalstoString...

Page 68: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Clase Object

Realmente todas las clases que creemos son subclases...

...de la clase Object

Esta clase tiene metodos habituales que estan disponibles paracualquier clase que creemos:

cloneequalstoString...

Page 69: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Palabras reservadas

extends

Sirve para indicar la superclase de la cual se hereda

super

Sirve para acceder a miembros de la superclase desde la subclase

super() = Llamada al constructor

super.metodoquesea = Llamada al metodoquesea

Page 70: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo de superclase

pub l i c c l a s s Mamifero {

p r i v a t e S t r i n g o r i g e n ;p r i v a t e i n t pa ta s ;p r i v a t e S t r i n g nombre ;. . .

pub l i c Mamifero ( S t r i n g nombre , S t r i n g o r i g en , i n tpa ta s ) {t h i s . nombre = nombre ;t h i s . o r i g e n = o r i g e n ;t h i s . pa ta s = pata s

}. . .

}

Page 71: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo de subclase

pub l i c c l a s s Per ro extends Mamifero {p r i v a t e S t r i n g r a za ;. . .

pub l i c Per ro ( S t r i n g nombre , S t r i n g o r i g e n ) {super ( nombre , o r i g en , 4)

}. . .

}

Page 72: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Recordatorio

Los miembros protected son accesibles desde los miembros desu subclase

Un objeto de una subclase, tambien es objeto de lasuperclase. Al reves no

Java no permite herencia multiple

Page 73: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Redefinicion de metodos

Se puede modificar localmente el comportamiento de losmetodos heredados

De esta manera, objetos de diferentes tipos pueden responderde forma diferente a la misma llamada

Permite programar de manera mas general

Override

La palabra reservada @Override encima de un metodo indica alcompilador que queremos sobreescribir el metodo de la clase queestamos heredando.

Page 74: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo

¿Se mueve igual un pez, un pajaro o una rana?

En cambio, todos son animales y por tanto podrıan heredar elmetodo mover de dicha clase

Gracias a la redefinicion, cada objeto concreto realizara laoperacion mover como corresponda

Page 75: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo

¿Se mueve igual un pez, un pajaro o una rana?

En cambio, todos son animales y por tanto podrıan heredar elmetodo mover de dicha clase

Gracias a la redefinicion, cada objeto concreto realizara laoperacion mover como corresponda

Page 76: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo

¿Se mueve igual un pez, un pajaro o una rana?

En cambio, todos son animales y por tanto podrıan heredar elmetodo mover de dicha clase

Gracias a la redefinicion, cada objeto concreto realizara laoperacion mover como corresponda

Page 77: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Apuntes

No se debe confundir la redefinicion con la sobrecarga

En caso de querer no permitir la redefinicion de metodos oincluso la creacion de subclases (herencia):

final

pub l i c f i n a l void mover ( )pub l i c f i n a l c l a s s P e r r o extends Mamifero

NOTA: Se puede preguntar si un objeto es instancia de otroconcreto con la palabra reservada instanceof

Page 78: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Indice

1 Previo

2 Repaso y encapsulacion

3 Empaquetado

4 Relaciones entre clases

5 Herencia

6 Polimorfismo

7 Abstractas e Interfaz

Page 79: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Concepto

Consiste en la posibilidad de que una referencia a un objeto,pueda conectarse tambien con objetos descendientes de este

Por tanto, es la capacidad de un objeto para comportarse demultiples formas

Tiene sentido por la existencia de la herencia

Sirve para generalizar, olvidandose de detalles y buscandopuntos comunes

Page 80: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Uso

Se usa en la construccion de estructuras de datos (variablespolimorficas)

Escenario:

Necesitamos mantener un array de perros y gatos de unaclınica veterinaria¿Como definimos dicho array? ¿Usamos uno o dos?

Tambien se puede realizar de manera implıcita en el paso deargumentos

Ejemplo

pub l i c void metodoquesea ( Mamifero m)

Page 81: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Indice

1 Previo

2 Repaso y encapsulacion

3 Empaquetado

4 Relaciones entre clases

5 Herencia

6 Polimorfismo

7 Abstractas e Interfaz

Page 82: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Clases Abstractas

Es una clase tan generica, que nunca se creara unainstanciacion en objetos

Sirve solo como superclase, y por tanto, para definir subclases

Cuando uno de los metodos no tiene implementacion, estamosante una clase abstracta

El metodo sin implementacion sera un metodo abstracto

abstract

pub l i c abst ract c l a s s F i g u r apub l i c abst ract double a r e a ( ) ;

Page 83: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Clases Abstractas

Es una clase tan generica, que nunca se creara unainstanciacion en objetos

Sirve solo como superclase, y por tanto, para definir subclases

Cuando uno de los metodos no tiene implementacion, estamosante una clase abstracta

El metodo sin implementacion sera un metodo abstracto

abstract

pub l i c abst ract c l a s s F i g u r apub l i c abst ract double a r e a ( ) ;

Page 84: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo abstract

Una figura es una clase abstracta tıpica...¿Por que?

No se puede calcular el area de una fıgura

Es necesario saber que figura es la subclase (cırculo,cuadrado...)

Y redefinir el metodo para calcular el area dependiendo de lafigura concreta

Page 85: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo abstract

Una figura es una clase abstracta tıpica...¿Por que?

No se puede calcular el area de una fıgura

Es necesario saber que figura es la subclase (cırculo,cuadrado...)

Y redefinir el metodo para calcular el area dependiendo de lafigura concreta

Page 86: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Ejemplo abstract

Una figura es una clase abstracta tıpica...¿Por que?

No se puede calcular el area de una fıgura

Es necesario saber que figura es la subclase (cırculo,cuadrado...)

Y redefinir el metodo para calcular el area dependiendo de lafigura concreta

Page 87: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Clases Interfaz

Una interfaz es una clase completamente abstracta

No contiene nada de implementacion ni encapsula datos

Los atributos solo pueden ser constantes y deben inicializarse

Siempre public, static y final

La ventaja es que indica el que pero no el como, define elcomportamiento, pero no la implementacion

Page 88: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Palabras reservadas

interface

pub l i c i n t e r f a ce F i g u r a

implements

pub l i c c l a s s C i r c u l o implements F i g u r a

Page 89: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Interfaz

Toda clase que implemente una interfaz debe proporcionaruna definicion a sus metodos

Si alguno de los metodos no obtiene una “conducta”,estaremos creando una clase abstracta

Si no se hace correctamente se obtendran errores decompilacion

Page 90: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Herencia multiple

Ya hemos dicho que no existe herencia multiple...

...pero se pueden usar interfaces para ello

Una clase puede implementar mas de una interfaz

Una interfaz puede heredar de otra interfaz

Page 91: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Herencia multiple

Ya hemos dicho que no existe herencia multiple...

...pero se pueden usar interfaces para ello

Una clase puede implementar mas de una interfaz

Una interfaz puede heredar de otra interfaz

Page 92: Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es/_media/docencia/cursos/java/2011/pooc.pdf · POO: Programaci on orientada a objetos Luis Guerra l.guerra@upm.es

Previo Repaso y encapsulacion Empaquetado Relaciones entre clases Herencia Polimorfismo Abstractas e Interfaz

Herencia multiple

A, B y C deben ser interfaces

B y C son subclases de A

D extiende tanto a B como a C (y por tanto a A)