Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Herencia y polimorsmo
Empaquetado de proyectos
Marzo 2010
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Indice
1 2 3
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Indice
2 3
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Paradigma
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Facilidad de dise no y relaci on con el mundo real (UML) Reusabilidad y facilidad de mantenimiento Sistemas m as complejos
Abstracci on Trabajo en equipo
Del lenguaje m aquina hacia el mundo real Resuelve problemas complicados. No est a pensado para tareas sencillas
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
UML
UML (Unied Modeling Language): Lenguaje unicado de modelos Mapa del c odigo. No sirve para desarrollar, sino para describir Se utilizan diferentes diagramas. 13 en UML 2.0
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Elementos de la POO
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Elementos de la POO
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Clases
Plantillas para denir elementos (objetos) Pueden estar directamente relacionadas unas con otras
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Clases
Plantillas para denir elementos (objetos) Pueden estar directamente relacionadas unas con otras
Herencia y polimorsmo
Empaquetado de proyectos
Ejemplo de plantilla
p u b l i c c l a s s NombreClase { / Atributos : t i p o nombreAtributo1 ; t i p o nombreAtributo2 ; / / Metodos : s a l i d a nombreMetodo1 ( p a r a m e t r o s ) { c o n t e n i d o d e l metodo } ; s a l i d a nombreMetodo2 ( p a r a m e t r o s ) { c o n t e n i d o d e l metodo } ; / }
Herencia y polimorsmo
Empaquetado de proyectos
Herencia y polimorsmo
Empaquetado de proyectos
public class Perro { S t r i n g nombre ; String raza ; float altura ; void void void void } p e r r o ( ) {} comer ( ) {} d o r m i r ( ) {} l a d r a r ( ) {}
Herencia y polimorsmo
Empaquetado de proyectos
Encapsulaci on
Puede (y suele) haber distintos niveles de visibilidad: public: se puede acceder desde cualquier lugar private: s olo se puede acceder desde la propia clase protected: s olo se puede acceder desde la propia clase o desde una clase que herede de ella De esta forma se controla qu e cosas son modicables y c omo se pueden modicar El estado suele ser privado, y se suele modicar a trav es del comportamiento
Herencia y polimorsmo
Empaquetado de proyectos
Herencia y polimorsmo
Empaquetado de proyectos
public class Perro { p r i v a t e S t r i n g nombre ; private String raza ; private float altura ; public public public public } void void void void p e r r o ( ) {} comer ( ) {} d o r m i r ( ) {} l a d r a r ( ) {}
Herencia y polimorsmo
Empaquetado de proyectos
Operadores
Herencia y polimorsmo
Empaquetado de proyectos
Operadores
Operador . Acceso a miembros de una clase: p e r r o 1 . nombre = Pancho ; perro1 . ladrar () ; Si soy la clase Due no...
Herencia y polimorsmo
Empaquetado de proyectos
Operadores
Operador . Acceso a miembros de una clase: p e r r o 1 . nombre = Pancho ; perro1 . ladrar () ; Si soy la clase Due no... Cuidado con la visibilidad!
Herencia y polimorsmo
Empaquetado de proyectos
Operadores
Operador . Acceso a miembros de una clase: p e r r o 1 . nombre = Pancho ; perro1 . ladrar () ; Si soy la clase Due no... Cuidado con la visibilidad! Operador this Acceso a atributos dentro de la propia clase: t h i s . nombre = Pancho ;
Herencia y polimorsmo
Empaquetado de proyectos
M etodos
Denen el comportamiento de los objetos de una clase La implementaci on se suele ocultar al exterior de la clase Estructura Cabecera: modicadores - tipoSalida - nombre - (par ametros) Cuerpo: Se dene la implementaci on
Herencia y polimorsmo
Empaquetado de proyectos
M etodos habituales
Constructor Sirve para inicializar un objeto al crearlo Existe sobrecarga (distintos par ametros) (para cualquier m etodo) Coincide con el nombre de la clase y no devuelve nada por denici on
Herencia y polimorsmo
Empaquetado de proyectos
M etodos habituales
Constructor Sirve para inicializar un objeto al crearlo Existe sobrecarga (distintos par ametros) (para cualquier m etodo) Coincide con el nombre de la clase y no devuelve nada por denici on Get & Set Sirven para obtener o para modicar los atributos de una clase
Herencia y polimorsmo
Empaquetado de proyectos
public class Perro { p r i v a t e S t r i n g nombre ; ... p u b l i c v o i d P e r r o ( S t r i n g nombre ) { t h i s . nombre = nombre ; } p u b l i c S t r i n g getNombre ( ) { r e t u r n t h i s . nombre ; } p u b l i c v o i d setNombre ( S t r i n g nombre ) { t h i s . nombre = nombre } }
Herencia y polimorsmo
Empaquetado de proyectos
M etodos t picos
Destructor No es tan t pico, no se suele usar (se hace de manera autom atica) Se tiene que sobreescribir No devuelve nada por denici on
Herencia y polimorsmo
Empaquetado de proyectos
M etodos t picos
Destructor No es tan t pico, no se suele usar (se hace de manera autom atica) Se tiene que sobreescribir No devuelve nada por denici on nalize protected void f i n a l i z e ( )
Herencia y polimorsmo
Empaquetado de proyectos
Instanciaci on de objetos
Antes de poder usar un objeto tenemos que crearlo: Nuevo operador Tipo identicador = new Tipo() Ejemplo con Perro P e r r o miPancho = new P e r r o ( Pancho )
Herencia y polimorsmo
Empaquetado de proyectos
Instanciaci on de objetos
Antes de poder usar un objeto tenemos que crearlo: Nuevo operador Tipo identicador = new Tipo() Ejemplo con Perro P e r r o miPancho = new P e r r o ( Pancho )
Herencia y polimorsmo
Empaquetado de proyectos
Uso de objetos
Una vez tenemos el objeto instanciado... ...podemos modicar su estado usando los m etodos
P e r r o miPancho = new P e r r o ( Pancho , C o c k e r , 4 0 )
Herencia y polimorsmo
Empaquetado de proyectos
Uso de objetos
Una vez tenemos el objeto instanciado... ...podemos modicar su estado usando los m etodos
P e r r o miPancho = new P e r r o ( Pancho , C o c k e r , 4 0 )
Herencia y polimorsmo
Empaquetado de proyectos
Tipos de variables
De instancia: Denida para las instancias de una clase. Una copia por objeto
Herencia y polimorsmo
Empaquetado de proyectos
Tipos de variables
De instancia: Denida para las instancias de una clase. Una copia por objeto De clase: Denida para la clase. Una copia por clase static private static int perros = 0;
Herencia y polimorsmo
Empaquetado de proyectos
Tipos de variables
De instancia: Denida para las instancias de una clase. Una copia por objeto De clase: Denida para la clase. Una copia por clase static private static int perros = 0; Local: Denida dentro del cuerpo de un m etodo, ambito restringido
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Indice
1 2
Herencia y polimorsmo
Empaquetado de proyectos
Herencia
Es un mecanismo que sirve para reutilizar clases Se utiliza cuando existen clases que comparten muchas de sus caracter sticas Se extiende la funcionalidad de clases m as gen ericas Se introducen los conceptos de superclase y subclase
Herencia y polimorsmo
Empaquetado de proyectos
Superclase y Subclase
Herencia y polimorsmo
Empaquetado de proyectos
Superclase y subclase
Los objetos de las subclases pueden poseer atributos y m etodos propios (no existentes en la superclase) Y adem as, heredan los atributos y m etodos de la superclase
Herencia y polimorsmo
Empaquetado de proyectos
Clase Object
Herencia y polimorsmo
Empaquetado de proyectos
Clase Object
Realmente todas las clases que creemos son subclases... ...de la clase Object Esta clase tiene m etodos habituales que est an disponibles para cualquier clase que creemos:
clone equals toString ...
Herencia y polimorsmo
Empaquetado de proyectos
Ejemplo de superclase
p u b l i c c l a s s Mamifero { private String origen ; private int patas ; p r i v a t e S t r i n g nombre ; ... p u b l i c Mamifero ( S t r i n g nombre , S t r i n g o r i g e n , i n t patas ){ t h i s . nombre = nombre ; this . origen = origen ; this . patas = patas } ... }
Herencia y polimorsmo
Empaquetado de proyectos
Ejemplo de subclase
Herencia y polimorsmo
Empaquetado de proyectos
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 m etodoquesea
Herencia y polimorsmo
Empaquetado de proyectos
Recordatorio
Los miembros protected son accesibles desde los miembros de su subclase Un objeto de una subclase, tambi en es objeto de la superclase. Al rev es no Java no permite herencia m ultiple
Herencia y polimorsmo
Empaquetado de proyectos
Redenici on de m etodos
Se puede modicar localmente el comportamiento de los m etodos heredados De esta manera, objetos de diferentes tipos pueden responder de forma diferente a la misma llamada
Este es el concepto clave del polimorsmo
Herencia y polimorsmo
Empaquetado de proyectos
Ejemplo
Herencia y polimorsmo
Empaquetado de proyectos
Ejemplo
Se mueve igual un pez, un p ajaro o una rana? En cambio, todos son animales y por tanto podr an heredar el m etodo mover de dicha clase
Herencia y polimorsmo
Empaquetado de proyectos
Ejemplo
Se mueve igual un pez, un p ajaro o una rana? En cambio, todos son animales y por tanto podr an heredar el m etodo mover de dicha clase Gracias al polimorsmo, cada objeto concreto realizar a la operaci on mover como corresponda
Herencia y polimorsmo
Empaquetado de proyectos
Apuntes
No se debe confundir el polimorsmo con la sobrecarga En caso de querer no permitir la redenici on de m etodos o incluso la creaci on de subclases: nal p u b l i c f i n a l v o i d mover ( ) p u b l i c f i n a l c l a s s P e r r o extends Mamifero
Herencia y polimorsmo
Empaquetado de proyectos
Clases Abstractas
Es una clase para la cual nunca se crear a una instancia de objetos Sirve s olo como superclase, y por tanto, para denir subclases
Herencia y polimorsmo
Empaquetado de proyectos
Clases Abstractas
Es una clase para la cual nunca se crear a una instancia de objetos Sirve s olo como superclase, y por tanto, para denir subclases Cuando uno de los m etodos no tiene implementaci on, estamos ante una clase abstracta abstract public abstract class Figura p u b l i c a b s t r a c t double a r e a ( ) ;
Herencia y polimorsmo
Empaquetado de proyectos
Ejemplo abstract
Herencia y polimorsmo
Empaquetado de proyectos
Ejemplo abstract
Una gura es una superclase t pica...Por qu e? No se puede calcular el area de una f gura
Herencia y polimorsmo
Empaquetado de proyectos
Ejemplo abstract
Una gura es una superclase t pica...Por qu e? No se puede calcular el area de una f gura Es necesario saber qu e gura es la subclase (c rculo, cuadrado...) Y redenir el m etodo para calcular el area dependiendo de la gura concreta
Herencia y polimorsmo
Empaquetado de proyectos
Clases Interfaz
Una interfaz es una clase completamente abstracta No contiene nada de implementaci on ni encapsula datos Los atributos s olo pueden ser constantes y deben inicializarse Siempre public, static y nalize La ventaja es que indica el qu e pero no el c omo
Herencia y polimorsmo
Empaquetado de proyectos
Palabras reservadas
Herencia y polimorsmo
Empaquetado de proyectos
Interfaz
Toda clase que implemente una interfaz debe proporcionar una denici on a sus m etodos Si alguno de los m etodos no obtiene una conducta, estaremos creando una clase abstracta Si no se hace correctamente se obtendr an errores de compilaci on
Herencia y polimorsmo
Empaquetado de proyectos
Herencia m ultiple
Ya hemos dicho que no existe herencia m ultiple... ...pero se pueden usar interfaces para ello
Herencia y polimorsmo
Empaquetado de proyectos
Herencia m ultiple
Ya hemos dicho que no existe herencia m ultiple... ...pero se pueden usar interfaces para ello
Herencia y polimorsmo
Empaquetado de proyectos
Herencia m ultiple
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)
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Indice
1 2 3
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Ficheros
El c odigo de una clase p ublica se encontrar a en un chero .java El nombre del chero coincidir a con el nombre de la clase
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Ficheros
El c odigo de una clase p ublica se encontrar a en un chero .java El nombre del chero coincidir a con el nombre de la clase Excepci on En un chero podr a haber varias clases, si s olo una de ellas es public y el resto clases auxiliares
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Paquetes
Las clases se agrupan en paquetes El paquete al que pertenece una clase se indica al comienzo del chero:
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Paquetes
Las clases se agrupan en paquetes El paquete al que pertenece una clase se indica al comienzo del chero: Package package e j e m p l o ; public class . . . {
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Paquetes
Las clases se agrupan en paquetes El paquete al que pertenece una clase se indica al comienzo del chero: Package package e j e m p l o ; public class . . . { Una clase s olo puede pertenecer a un paquete
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Paquetes
Se pueden organizar los paquetes de forma jer arquica Jerarquia package e j e m p l o . o b j e t o s ; Para usar una clase que est a en distinto paquete:
Se puede importar la clase entera Se pueden realizar llamadas utilizando: nombrepaquete.loquesea
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
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 . C o n c r e t o ;
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Accesos directos
No es recomendable usarlo Se utilizar a si vamos a acceder a algo muy concreto de otro paquete Acceso directo e j e m p l o . C o n c r e t o ejem = new e j e m p l o . Concreto () ;
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
Librerias externas
Se pueden utilizar librerias (clases compiladas) externas a nuestro c odigo Por defecto, la libreria b asica de JDK est a 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
Introducci on a la POO
Herencia y polimorsmo
Empaquetado de proyectos
.JAR
Las librerias son cheros .JAR (Java ARchive) Al compilar se guardan en la carpeta dist Para usarlos, los a nadimos a nuestro proyecto:
Propiedades - Librerias - A nadir JAR