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