Está en la página 1de 74

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Curso de Java POO: Programaci on orientada a objetos


Luis Guerra Velasco
Curso INEM 02830. Programaci on en Java

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

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Indice

Introducci on a la POO POO en Java Herencia y polimorsmo Empaquetado de proyectos

2 3

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Paradigma

Un paradigma es una forma de afrontar la construcci on de c odigo software


No hay paradigmas mejores ni peores Todos tienen sus ventajas e inconvenientes

Hay distintos paradigmas:


POO, Estructurado, Funcional, L ogico, etc

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Caracter sticas de la POO

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

Figura: Jerarqu a de diagramas UML 2.0

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Elementos de la POO

Los elementos principales son:


clases: Especicaci on de un conjunto de elementos objetos: Elemento aut onomo y con una funcionalidad concreta. Instancias concretas de una clase

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Elementos de la POO

Los elementos principales son:


clases: Especicaci on de un conjunto de elementos objetos: Elemento aut onomo y con una funcionalidad concreta. Instancias concretas de una clase

Tambi en se basa en otros conceptos: herencia, polimorsmo y encapsulamiento

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Perros. Objetos y Clases

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Perros. Objetos y Clases

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Perros. Objetos y Clases

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Perros. Objetos y Clases

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Resumen de objetos y clases


Objetos
Elementos con comportamiento y estado. M etodos y atributos concretos Instancias de clase Interactuan por medio de mensajes

Clases
Plantillas para denir elementos (objetos) Pueden estar directamente relacionadas unas con otras

Introducci on a la POO

Herencia y polimorsmo

Empaquetado de proyectos

Resumen de objetos y clases


Objetos
Elementos con comportamiento y estado. M etodos y atributos concretos Instancias de clase Interactuan por medio de mensajes

Clases
Plantillas para denir elementos (objetos) Pueden estar directamente relacionadas unas con otras

Introducci on a la POO POO en Java

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

Introducci on a la POO POO en Java

Herencia y polimorsmo

Empaquetado de proyectos

Ejemplo de clase Perro

Introducci on a la POO POO en Java

Herencia y polimorsmo

Empaquetado de proyectos

Ejemplo de clase Perro

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

Introducci on a la POO POO en Java

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

Introducci on a la POO POO en Java

Herencia y polimorsmo

Empaquetado de proyectos

Ejemplo de clase Perro con visibilidad

Introducci on a la POO POO en Java

Herencia y polimorsmo

Empaquetado de proyectos

Ejemplo de clase Perro con visibilidad

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

Introducci on a la POO POO en Java

Herencia y polimorsmo

Empaquetado de proyectos

Operadores

Operador . Acceso a miembros de una clase: p e r r o 1 . nombre = Pancho ; perro1 . ladrar () ;

Introducci on a la POO POO en Java

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

Introducci on a la POO POO en Java

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!

Introducci on a la POO POO en Java

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 ;

Introducci on a la POO POO en Java

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

Introducci on a la POO POO en Java

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

Introducci on a la POO POO en Java

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

Introducci on a la POO POO en Java

Herencia y polimorsmo

Empaquetado de proyectos

Ejemplos de m etodos t picos

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

Introducci on a la POO POO en Java

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

Introducci on a la POO POO en Java

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

Introducci on a la POO POO en Java

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 )

Introducci on a la POO POO en Java

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 )

P e r r o miPancho = new P e r r o ( Pancho , C o c k e r , 4 0 )

Introducci on a la POO POO en Java

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 )

Introducci on a la POO POO en Java

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 )

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

Introducci on a la POO POO en Java

Herencia y polimorsmo

Empaquetado de proyectos

Tipos de variables

De instancia: Denida para las instancias de una clase. Una copia por objeto

Introducci on a la POO POO en Java

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;

Introducci on a la POO POO en Java

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

Introducci on a la POO Herencia y polimorsmo Herencia Polimorsmo Empaquetado de proyectos

Introducci on a la POO Herencia

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

Introducci on a la POO Herencia

Herencia y polimorsmo

Empaquetado de proyectos

Superclase y Subclase

Trabajador es la superclase Empleado y consultor son subclases

Introducci on a la POO Herencia

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

Introducci on a la POO Herencia

Herencia y polimorsmo

Empaquetado de proyectos

Clase Object

Realmente todas las clases que creemos son subclases...

Introducci on a la POO Herencia

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

Introducci on a la POO Herencia

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

Introducci on a la POO Herencia

Herencia y polimorsmo

Empaquetado de proyectos

Ejemplo de subclase

p u b l i c c l a s s P e r r o e x t e n d s Mamifero { private String raza ; ... p u b l i c P e r r o ( S t r i n g nombre , S t r i n g o r i g e n ) { s u p e r ( nombre , o r i g e n , 4 ) } ... }

Introducci on a la POO Herencia

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

Introducci on a la POO Herencia

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

Introducci on a la POO Polimorsmo

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

Permite programar de manera m as general

Introducci on a la POO Polimorsmo

Herencia y polimorsmo

Empaquetado de proyectos

Ejemplo

Se mueve igual un pez, un p ajaro o una rana?

Introducci on a la POO Polimorsmo

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

Introducci on a la POO Polimorsmo

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

Introducci on a la POO Polimorsmo

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

Introducci on a la POO Polimorsmo

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

Introducci on a la POO Polimorsmo

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

Introducci on a la POO Polimorsmo

Herencia y polimorsmo

Empaquetado de proyectos

Ejemplo abstract

Una gura es una superclase t pica...Por qu e?

Introducci on a la POO Polimorsmo

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

Introducci on a la POO Polimorsmo

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

Introducci on a la POO Polimorsmo

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

Introducci on a la POO Polimorsmo

Herencia y polimorsmo

Empaquetado de proyectos

Palabras reservadas

interface public interface Figura implements p u b l i c c l a s s C i r c u l o implements F i g u r a

Introducci on a la POO Polimorsmo

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

Introducci on a la POO Polimorsmo

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

Introducci on a la POO Polimorsmo

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

Introducci on a la POO Polimorsmo

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

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