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

92
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...

Curso de JavaPOO: Programacion orientada a objetos

Luis [email protected]

Curso INEM. Programacion en Java

Marzo 2011

Indice

Previo

Repaso y encapsulacion

Empaquetado

Relaciones entre clases

Herencia

Polimorfismo

Abstractas e Interfaz

Indice

Previo

Repaso y encapsulacion

Empaquetado

Relaciones entre clases

Herencia

Polimorfismo

Abstractas e Interfaz

Paradigma

I Un paradigma es una forma de afrontar la construccion decodigo software

I No hay paradigmas mejores ni peoresI Todos tienen sus ventajas e inconvenientes

I Hay distintos paradigmas:I POO, Estructurado, Funcional, Logico, etc

Caracterısticas de la POO

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

I Reusabilidad y facilidad de mantenimientoI Sistemas mas complejos

I AbstraccionI Trabajo en equipo

I Del lenguaje maquina hacia el mundo real

I Resuelve problemas complicados. No esta pensado para tareassencillas

UML

I UML (Unified Modeling Language): Lenguaje unificado demodelos

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

I Se utilizan diferentes diagramas. 13 en UML 2.0

Figura: Jerarquıa de diagramas UML 2.0

Elementos de la POO

I Los elementos principales son:I clases: Especificacion de un conjunto de elementosI objetos: Elemento autonomo y con una funcionalidad concreta.

Instancias concretas de una clase

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

Elementos de la POO

I Los elementos principales son:I clases: Especificacion de un conjunto de elementosI objetos: Elemento autonomo y con una funcionalidad concreta.

Instancias concretas de una clase

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

Perros. Objetos y Clases

Perros. Objetos y Clases

Perros. Objetos y Clases

Perros. Objetos y Clases

Resumen de objetos y clases

I ClasesI Representan conceptos o entidades significativas de un

problemaI Se pueden ver como plantillas para definir elementos (objetos)I Pueden estar directamente relacionadas unas con otras

I ObjetosI Elementos con comportamiento definido en la clase y estado

concretoI Instancias de claseI Interactuan por medio de mensajes

Resumen de objetos y clases

I ClasesI Representan conceptos o entidades significativas de un

problemaI Se pueden ver como plantillas para definir elementos (objetos)I Pueden estar directamente relacionadas unas con otras

I ObjetosI Elementos con comportamiento definido en la clase y estado

concretoI Instancias de claseI Interactuan por medio de mensajes

Metodos y atributos

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

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

Metodos

I Definen el comportamiento de los objetos de una clase

I Devuelven un resultado

I Pueden necesitar parametros

Estructura

I Cabecera: tipoSalida - nombre - (parametros)

I Cuerpo: Se define la implementacion del servicio

Metodos habituales

Constructor

I Sirve para inicializar un objeto al crearlo

I Existe sobrecarga (distintos parametros) (para cualquiermetodo)

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

Get & Set

I Sirven para obtener o para modificar los atributos de una clase

Metodos habituales

Constructor

I Sirve para inicializar un objeto al crearlo

I Existe sobrecarga (distintos parametros) (para cualquiermetodo)

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

Get & Set

I Sirven para obtener o para modificar los atributos de una clase

Metodos habituales

Destructor

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

I Se tiene que sobreescribir

I No devuelve nada por definicion

finalize

void f i n a l i z e ( )

Metodos habituales

Destructor

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

I Se tiene que sobreescribir

I No devuelve nada por definicion

finalize

void f i n a l i z e ( )

Atributos

I Describen el estado interno de cada objeto concretoI Pueden ser:

I Tipos basicos (int, boolean, short, etc)I Array de elementosI Referencias a otros objetos

Tipos de variables

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

I 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 ;

I Local: Definida dentro del cuerpo de un metodo, ambitorestringido

Tipos de variables

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

I 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 ;

I Local: Definida dentro del cuerpo de un metodo, ambitorestringido

Tipos de variables

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

I 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 ;

I Local: Definida dentro del cuerpo de un metodo, ambitorestringido

Uso de objetos e interaccion

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

I Se comunican entre si mediante paso de mensajes

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

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 } ;∗/

}

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}

}

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 ( ) {}

}

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 ( ) {}

}

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)

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)

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 ” ;

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 ” ;

Uso de objetos

I Una vez tenemos el objeto instanciado...

I ...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 ( )

Uso de objetos

I Una vez tenemos el objeto instanciado...

I ...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 ( )

Indice

Previo

Repaso y encapsulacion

Empaquetado

Relaciones entre clases

Herencia

Polimorfismo

Abstractas e Interfaz

Repaso de conceptos

I Clase

I Objeto

I Atributo

I Variable

I Metodo

I Instanciar

I Constructor

I finalize

I Paso de mensajes

I static

I Operador .

I Operador this

I Sobrecarga

I final

Algunas preguntas

I ¿Tienen valor los atributos de una clase?

I ¿Que ocurre si no hay constructor en una clase?

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

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

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

Encapsulacion

Puede (y suele) haber distintos niveles de visibilidad:

I public: se puede acceder desde cualquier lugar

I private: solo se puede acceder desde la propia clase

I 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

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 ( ) {}

}

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 ( ) {}

}

Uso de metodos get y set

GetDevuelve el valor de una variable

SetModifica el valor de una variable

I Se pueden llamar como se quiera

I 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.)

Indice

Previo

Repaso y encapsulacion

Empaquetado

Relaciones entre clases

Herencia

Polimorfismo

Abstractas e Interfaz

Organizacion de clases

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

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

I Lo habitual suele ser tener una clase por cada fichero fuente

Ficheros

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

I 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

Ficheros

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

I 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

Paquetes

I Las clases se agrupan en paquetes

I 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 . . . {

I Una clase solo puede pertenecer a un paquete

Paquetes

I Las clases se agrupan en paquetes

I 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 . . . {

I Una clase solo puede pertenecer a un paquete

Paquetes

I Las clases se agrupan en paquetes

I 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 . . . {

I Una clase solo puede pertenecer a un paquete

Paquetes

I Se pueden organizar los paquetes de forma jerarquica

Jerarquia

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

I Para usar una clase que esta en distinto paquete:I Se puede importar la clase enteraI Se pueden realizar llamadas utilizando:

nombrepaquete.loquesea

Importar clases

I Se puede importar un conjunto de clases

I O una clase concreta

import

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

Librerias externas

I Se pueden utilizar librerias (clases compiladas) externas anuestro codigo

I Por defecto, la libreria basica de JDK esta cargadaI Por eso podemos utilizar directamente cosas como Math.PI

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

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

.JAR

I Las librerias son ficheros .JAR (Java ARchive)

I Al compilar se guardan en la carpeta “dist”I Para usarlos, los anadimos a nuestro proyecto:

I Propiedades - Librerias - Anadir JAR

Indice

Previo

Repaso y encapsulacion

Empaquetado

Relaciones entre clases

Herencia

Polimorfismo

Abstractas e Interfaz

Introduccion a UML

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

I Posteriormente se implementan en el codigo dependiendo deltipo de relacion

Figura: Ejemplo de clase en UML

Asociacion

I Relacion entre clases que se mantiene en el tiempo

I Puede tener un nombre, una direccion y una cardinalidad

I Se refleja cuando se introducen referencias a objetos comoatributos

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

Agregacion

I Caso particular de asociacion con contenido semantico

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

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

I Ejemplo: PC y monitor

Composicion

I Caso particular de agregacion

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

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

I Ejemplo: Arbol y hojas

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

Dependencia

I Es muy habitual

I Es cuando una clase utiliza a otraI Se refleja en las clases cuando:

I Una clase hace una instanciacion de otro objetoI Cuando se pasa un objeto como parametro de un metodo de

otro objetoI Cuando se realiza un “return” de un objeto

Generalizacion

I Es una relacion de herencia

I Se puede sustituir por la frase “es un”

I Ejemplo: Medio de transporte y coche

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

Ejemplo de diagrama de clases

Figura: Ejemplo de diagrama de clases

Ejemplo de diagrama de clases II

Figura: Ejemplo de diagrama de clases con relaciones

Indice

Previo

Repaso y encapsulacion

Empaquetado

Relaciones entre clases

Herencia

Polimorfismo

Abstractas e Interfaz

Herencia

I Es un mecanismo que sirve para reutilizar clases

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

I Se extiende la funcionalidad de clases mas genericas

I Se introducen los conceptos de superclase y subclase

Superclase y Subclase

I Trabajador es la superclase

I Empleado y consultor son subclases

Superclase y subclase

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

I Y ademas, heredan los atributos y metodos de la superclase

Clase Object

I Realmente todas las clases que creemos son subclases...

I ...de la clase ObjectI Esta clase tiene metodos habituales que estan disponibles para

cualquier clase que creemos:I cloneI equalsI toStringI ...

Clase Object

I Realmente todas las clases que creemos son subclases...

I ...de la clase ObjectI Esta clase tiene metodos habituales que estan disponibles para

cualquier clase que creemos:I cloneI equalsI toStringI ...

Palabras reservadas

extendsSirve para indicar la superclase de la cual se hereda

super

Sirve para acceder a miembros de la superclase desde la subclase

I super() = Llamada al constructor

I super.metodoquesea = Llamada al metodoquesea

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

}. . .

}

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)

}. . .

}

Recordatorio

I Los miembros protected son accesibles desde los miembros desu subclase

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

I Java no permite herencia multiple

Redefinicion de metodos

I Se puede modificar localmente el comportamiento de losmetodos heredados

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

I Permite programar de manera mas general

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

Ejemplo

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

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

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

Ejemplo

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

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

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

Ejemplo

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

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

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

Apuntes

I No se debe confundir la redefinicion con la sobrecarga

I 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

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

Indice

Previo

Repaso y encapsulacion

Empaquetado

Relaciones entre clases

Herencia

Polimorfismo

Abstractas e Interfaz

Concepto

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

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

I Tiene sentido por la existencia de la herencia

I Sirve para generalizar, olvidandose de detalles y buscandopuntos comunes

Uso

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

I Escenario:I Necesitamos mantener un array de perros y gatos de una

clınica veterinariaI ¿Como definimos dicho array? ¿Usamos uno o dos?

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

Ejemplo

pub l i c void metodoquesea ( Mamifero m)

Indice

Previo

Repaso y encapsulacion

Empaquetado

Relaciones entre clases

Herencia

Polimorfismo

Abstractas e Interfaz

Clases Abstractas

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

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

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

I 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 ( ) ;

Clases Abstractas

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

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

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

I 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 ( ) ;

Ejemplo abstract

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

I No se puede calcular el area de una fıgura

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

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

Ejemplo abstract

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

I No se puede calcular el area de una fıgura

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

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

Ejemplo abstract

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

I No se puede calcular el area de una fıgura

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

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

Clases Interfaz

I Una interfaz es una clase completamente abstracta

I No contiene nada de implementacion ni encapsula datos

I Los atributos solo pueden ser constantes y deben inicializarse

I Siempre public, static y final

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

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

Interfaz

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

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

I Si no se hace correctamente se obtendran errores decompilacion

Herencia multiple

I Ya hemos dicho que no existe herencia multiple...

I ...pero se pueden usar interfaces para ello

I Una clase puede implementar mas de una interfaz

I Una interfaz puede heredar de otra interfaz

Herencia multiple

I Ya hemos dicho que no existe herencia multiple...

I ...pero se pueden usar interfaces para ello

I Una clase puede implementar mas de una interfaz

I Una interfaz puede heredar de otra interfaz

Herencia multiple

I A, B y C deben ser interfaces

I B y C son subclases de A

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