Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es › _media › docencia...
Transcript of Curso de Java POO: Programación orientada a objetoslaurel.datsi.fi.upm.es › _media › docencia...
Curso de JavaPOO: Programacion orientada a objetos
Luis Guerra Velasco
Curso INEM. Programacion en Java
Diciembre 2010
Indice
Introduccion
Comportamiento y estado
POO en Java
Relaciones
Herencia
Polimorfismo
Abstractas e Interfaz
Empaquetado
Indice
Introduccion
Comportamiento y estado
POO en Java
Relaciones
Herencia
Polimorfismo
Abstractas e Interfaz
Empaquetado
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
Indice
Introduccion
Comportamiento y estado
POO en Java
Relaciones
Herencia
Polimorfismo
Abstractas e Interfaz
Empaquetado
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
Indice
Introduccion
Comportamiento y estado
POO en Java
Relaciones
Herencia
Polimorfismo
Abstractas e Interfaz
Empaquetado
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 ( )
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 ( ) {}
}
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
Indice
Introduccion
Comportamiento y estado
POO en Java
Relaciones
Herencia
Polimorfismo
Abstractas e Interfaz
Empaquetado
Dependencia
I Es muy habitualI Se refleja cuando la implementacion de una clase depende de
otra:I Uso de un objeto como argumento de un metodoI En la implementacion de un metodo
Asociacion
I Relacion entre clases que se mantiene en el tiempo
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 No hay diferencia en la implementacion
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”
Indice
Introduccion
Comportamiento y estado
POO en Java
Relaciones
Herencia
Polimorfismo
Abstractas e Interfaz
Empaquetado
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 ...
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)
}. . .
}
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
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
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
Indice
Introduccion
Comportamiento y estado
POO en Java
Relaciones
Herencia
Polimorfismo
Abstractas e Interfaz
Empaquetado
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
Introduccion
Comportamiento y estado
POO en Java
Relaciones
Herencia
Polimorfismo
Abstractas e Interfaz
Empaquetado
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 finalize
I La ventaja es que indica el que pero no el como
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)
Indice
Introduccion
Comportamiento y estado
POO en Java
Relaciones
Herencia
Polimorfismo
Abstractas e Interfaz
Empaquetado
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 ;
Accesos directos
I No es recomendable usarlo
I Se utilizarıa si vamos a acceder a algo muy concreto de otropaquete
Acceso directo
e j e m p l o . Concreto ejem = new 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