Metodos y Clasesxd

38
UNS Unidad II. PRINCIPIOS DE LA ORIENTACION A OBJETOS Paradigma de la orientación a objetos y como se emplea en Java. 2.1. DEFINICION DE OBJETO. 2.1.1. Un nuevo paradigma OO es un nuevo paradigma de diseño y programación OO se basa en modelar objetos del mundo real OO crea programas reusables Los objetos contienen en si mismo información y comportamiento. Que es un objeto? Definición filosófica: Es una entidad que se puede reconocer. Para la tecnología de objetos : Es una abstracción de un objeto del mundo real. En términos de negocios: Es una entidad relevante al dominio del negocio. En términos de software: Es una estructura que asocia datos y funciones. Algunos ejemplos de objetos en POO son: Cliente, Factura, Contrato, Película. Un Cliente tiene un nombre, dirección, crédito. Un Cliente podría alquilar una película, pagar una factura, devolver una película. Los objetos realizan operaciones. Un objeto es útil si tiene alguna función o comportamiento en el sistema. Cada comportamiento se denomina operación. Objeto: lapicero Operación: Escribir Objeto: cajero automático Operación: Entregar dinero. Los objetos tiene valores. Los objetos conocen cual es su estado actual. Cada conocimiento del objeto se denomina atributo. 1

description

xd

Transcript of Metodos y Clasesxd

Fundamentos de Java

UNS

Unidad II. PRINCIPIOS DE LA ORIENTACION A OBJETOS

Paradigma de la orientacin a objetos y como se emplea en Java.

2.1. DEFINICION DE OBJETO.

2.1.1. Un nuevo paradigma

OO es un nuevo paradigma de diseo y programacin

OO se basa en modelar objetos del mundo real

OO crea programas reusables

Los objetos contienen en si mismo informacin y comportamiento.

Que es un objeto?

Definicin filosfica: Es una entidad que se puede reconocer. Para la tecnologa de objetos : Es una abstraccin de un objeto del mundo real.

En trminos de negocios: Es una entidad relevante al dominio del negocio.

En trminos de software: Es una estructura que asocia datos y funciones.

Algunos ejemplos de objetos en POO son: Cliente, Factura, Contrato, Pelcula. Un Cliente tiene un nombre, direccin, crdito. Un Cliente podra alquilar una pelcula, pagar una factura, devolver una pelcula.

Los objetos realizan operaciones.

Un objeto es til si tiene alguna funcin o comportamiento en el sistema.

Cada comportamiento se denomina operacin.

Objeto: lapicero Operacin: EscribirObjeto: cajero automticoOperacin: Entregar dinero.

Los objetos tiene valores.

Los objetos conocen cual es su estado actual.

Cada conocimiento del objeto se denomina atributo.

Objeto: lapiceroAtributo: Cantidad de tintaObjeto: cajero automticoAtributo: Disponible en soles.

2.2.2 Los objetos son una abstraccin

Todo depende del contexto.

Cuando se modela un objeto, solo se requiere modelar las operaciones y atributos que son relevantes para el problema

Objeto: lapicero

Operacin: escribir en cuaderno.

Atributos: Longitud, Marca.

2.2. Encapsulamiento

El encapsulamiento oculta como las cosas funcionan dentro de un objeto

Solo nos comunicamos con el objeto a travs sus mtodos

Los mtodos son una interfaz que permite ignorar como estn implementados.

No es posible evadir el encapsulamiento en OO

El cajero automtico es un objeto que entrega dinero.

El cajero encapsula todas las operaciones a las tarjetas poseedores.

Evadir este encapsulamiento es un robo al cajero.

Ejercicio

Complete con operaciones y atributos lo siguiente:

ObjetoOperacionesAtributos

Cajero automtico

Universidad

Computadora

Auto de carreras

DVD

Satlite

2.3. Relaciones entre objetos

Mensajes entre objetos.

Los objetos se comunican unos con otros enviando mensajes.

El trasmisor del mensaje pide que el receptor realice una operacin.

El receptor ejecuta el mtodo correspondiente.

En programacin estructurada se invocan funciones o procedimientos.

En OO se enva un mensaje a un objeto antes que invocarse un procedimiento.

Los mtodos presentan polimorfismo.

Cliente

o

Transmisor

Mensaje

getEdad()PersonagetEdadgetNombregetDireccionsetEdadsetNombresetDireccionEdad

Nombre

Direccion

2.3.1 Asociacin entre objetos

Para que un objeto enve un mensaje a otro, el receptor debe ser visible para el transmisor.

Esta visibilidad se da a travs de enlaces.

Un objeto enva mensajes a otro invocando sus mtodos.

Radaren Tierra

Nueva posicin Cambio de orbitaMonitorearSatlite

Ejemplos:

El radar en tierra monitorea el satlite. El satlite es monitoreado por el radar en tierra.

Un cliente tiene una cuenta de ahorros. La cuenta de ahorros pertenece a un cliente.

2.3.2 Composicin de objetos.

Los objetos estn compuestos de otros objetos.

Los objetos son partes de otros objetos.

Esta relacin entre objetos se conoce como Agregacin

El Banco de la Nacin es un objetoEl cajero automtico es un objeto.El cajero es del Banco de la Nacin.

El cajero automtico esta compuesto por objetos como:El teclado

El dispensador de billetes

El lector de la tarjeta

2.4. Clases

Una clase es una molde para crear objetos.

Para definir una clase se tiene que indicar las operaciones y atributos

Los objetos son instancias de la clase.

Cuando se cree un cajero automtico no se requiere indicar sus operaciones y atributos.

Solo se requiere indicar a que clase pertenece.

Clase

Atributos

Mtodos

Clienteint edadString nombre

String direccincambiarDireccion()

PelculaString titulodouble precio

String categoriacambiarPrecio()

Identificacin de clases

Reconocer una estructura y comportamiento comunes entre varios objetos.

ObjetoOperacionesAtributos

Lapicero rojoEscribir

RecargarCantidad de tintaColor de tinta

Pluma y tintaEscribirRecargarCantidad de tintaColor de tinta

Ejercicio

A que clase pertenecen estos dos objetos?

Clases y Objetos.

Las clases son definiciones estticas que nos permite entender todos los objetos de esa clase.

Los objetos son entidades dinmicas que existen en el mundo real y en simulaciones del mundo real.

2.5. Herencia

Entre diferentes clases pueden haber similitudes

La herencia es una relacin entre clases donde una es padre de otra.

Las propiedades comunes definen la superclase. Clase padre.

Las subclases heredan estas propiedades. Clase hijo.

Un objeto hijo es un-tipo-de una superclase.

Un Helicptero es un tipo de Nave Area.

Nave Area

JumboHelicpteroGlobo

Dirigible

Ejercicio

Indique que propiedades tiene la clase Nave Area.

2.6. Polimorfismo

Significa que la misma operacin se realiza en las clases de diferente forma.

Estas operaciones tienen el mismo significado, comportamiento.

Internamente cada operacin se realiza de diferente forma.

Abordar pasajeros

BarcoTrenHelicptero

Ejemplos

Enviar calcularIntereses a objetos como: Cuenta de Ahorros, Cuenta CTS, Cuenta Corriente.

En java se representa como: cuenta.calcularIntereses();

Ejercicio

Determine las clases, mtodos, atributos y asociaciones del siguiente problema. Puede aplicar herencia o polimorfismo?

Tacora Films esta en el negocio de alquiler de pelculas a sus clientes. Y ahora esta automatizando el proceso de alquiler. El cliente escoge las pelculas en la tienda y las lleva a la caja para proceder con el alquiler. El empleado de la tienda solicita la TacoraCard al cliente para identificarlo y escanea el cdigo de barras de cada pelcula que esta alquilando.

Los clientes tienen que ser socios de Tacora Film Club para poder alquilar pelculas. Al suscribirse al club entregan datos como nombre, direccin, telfono. TacoraCard tiene un nico numero impreso que identifica al cliente.

Cada alquiler tiene un numero nico para identificarlo y en el acuerdo se indica la fecha de inicio del alquiler y la lista de pelculas que se estn alquilando. No se puede alquilar mas de 10 pelculas. No se sabe cuando exactamente el cliente devolver la pelcula.

El gerente de Tacora esta considerando emplear el mismo programa para alquilar otros artculos como libros, reproductores de VHS y de DVD, CDs de juegos.

Cada articulo tiene un precio de alquiler, numero de das que puede ser alquilado, el titulo de la pelcula, una descripcin breve, el tipo de pelcula (Familiar, Accin, Comedia...)

2.7. CLASES EN JAVA

Una clase es un molde para crear mltiples objetos que encapsula datos y comportamiento.

2.7.1. Paquetes

Un paquete es un contenedor (agrupador) de clases que estn relacionadas lgicamente.

Un paquete tiene sus clases en un mismo directorio

Varias clases pueden tener el mismo nombre pero en diferente paquete.

Para el problema de los alquileres se encuentran las clases: Clase Pelicula

Clase Contrato

Clase ClientePaquete: Alquiler Clases:

alquiler. Pelcula

alquiler. Contrato

alquiler. ClienteDirectorio: C:/alquiler

Archivos en C:/alquiler

Pelcula.java

Contrato.java

Cliente.java

2.7.2. Modificadores de acceso

Java controla el acceso a las variables y mtodos a travs de modificadores de acceso como: private, public y protected

Un elemento publico puede invocarse en cualquier clase.

Un elemento sin modificador solo se puede invocar desde la misma clase.

Un elemento protegido solo se invocar en clases heredadas

Un elemento privado no puede ser invocado por otra clase.

Paquete alquilerPaquete almacen

NOprivateNO

SOLOSI HEREDAprotectedSOLO SI HEREDA

SIpublicSI

SI

NO

2.7.3. Creacin de objetos.

1.Cada objeto es una instancia de alguna clase.

Pelicula

private String titulo;private String tipo;

public void mostrarDetalles()public void obtenerTitulo()

2.Los objetos se crean con el operador new.

Pelcula pelicula1 = new Pelcula();

Pelcula pelicula2 = new Pelcula();

3.El operador new realiza las siguientes acciones:

- Separa memoria para el nuevo objeto

- Invoca el mtodo de inicio de la clase llamado constructor.

- Retorna la referencia a un nuevo objeto.

Pelicula pelicula1 =

new Pelicula();

pelicula1

Las variables primitivas almacenan valores. Los objetos almacenan referencias

int i;i Pelicula pelicula1;

pelicula1

int j = 3;jPelicula pelicula2 = new Pelicula();pelicula2

2.7.4. La referencia null

- Los objetos inician en null

- Se puede comparar un objeto con null

- Se puede liberar la referencia con null.Pelicula pelicula1 = null;

if (pelicula1 == null) pelicula1 = new Pelicula();

pelicula1 = null;

2.7.5. Asignando referencias

Se puede asignar una variable referencia a otra resultado en dos referencias al mismo objeto.

Pelicula pelicula1 = new Pelicula("Betty Blue");

Pelcula pelicula2 = pelicula1;

6. Las variables de instancia se declaran en la clase. Estos son atributos de la clase.

public class Pelicula {

public String titulo;

public String tipo;

}

7. Las variables publicas de instancia se acceden con el operador punto.

Pelicula pelicula1 = new Pelicula();

pelicula1.titulo = "Kramer vs Kramer";

if (pelicula1.titulo.equals("El planeta de los simios")

pelicula1.tipo = "Ciencia Ficcion";

2.9. Mtodos

Un mtodo es equivalente a una funcin o subrutina de otros lenguajes.

Los mtodos solo se definen dentro de una clase.

modificador tipoDeRetorno nombreMetodo (ListaDeArgumentos) {

// desarrollo del mtodo;

}

2.9.1. Argumentos

En la definicin del mtodo se indica el tipo y el nombre de los argumentos del mtodo.

public void setTipo (String nuevoTipo) {

tipo = nuevoTipo;

}

Si el mtodo tiene varios argumentos, estos se separan por comas.

public void setDatos (String nuevoTitulo, String nuevoTipo) {

tipo = nuevoTipo;

titulo = nuevoTitulo;

}

Si el mtodo no tiene argumentos, se deja solo los parntesis

public void mostrarDetalles() {

System.out.println("El titulo es "+titulo);

System.out.println("El tipo es "+tipo);

}

2.9.2. Valores de retorno.

Se usa la sentencia return para salir del mtodo retornando un valor.

No se requiere return si el tipo de retorno es void.

public class pelicula {

private String tipo;

//...

public String obtenerTipo () {

return tipo;

}

}2.9.3. Recursividad

Un mtodo recursivo es aquel que directa o indirectamente se llama a si mismo.

Como ejemplo til se puede presentar el clculo de factorial y sumatorias

Factorial de 0 = 1

Factorial de N = N * Factorial de N - 1

Sumatoria de 0 = 0

Sumatoria de N = N + Sumatoria de N - 1

Un mtodo recursivo debe tener al menos un caso no recursivo y otros casos recursivos que se aproximen al caso no recursivo para evitar la recursion infinita.

Recursion.java

public class Recursion {

public static void main (String[] args) {

System.out.println( factorial(5) );

System.out.println( sumatoria(5) );

}

public static int factorial (int numero) {

if (numero == 0)

return 1;

if (numero > 0 )

return ( numero * factorial (numero 1) );

}

public static int sumatoria (int numero) {

if (numero == 0)

return 0;

if (numero > 0 )

return ( numero + sumatoria (numero 1) );

}

}

2.9.4. Invocando mtodos

Se utiliza el operador punto para invocar el mtodo de una clase, si el mtodo es de la misma clase, no se requiere el calificador de la clase.

Laboratorio

Pelicula.java

public class Pelicula {

private String titulo,tipo;

//...

public String getTipo () {

return tipo;

}

public String setTipo (String nuevoTipo) {

tipo = nuevoTipo;

}

}PruebaPeliculas.java public class PruebaPeliculas {

public static void main (String[] args) {

Pelicula pelicula1 = new Pelicula();

pelicula1.setTipo("Comedia");

if (pelicula1.getTipo().equals("Drama")) {

System.out.println("La pelicula es un drama");

}

else {

System.out.println("La pelicula no es un drama");

}

}

}

2.10. Encapsulamiento

1. Las variables de instancia de una clase deberan ser declaradas como privadas

Solo un mtodo debera acceder a las variables privadas.

No se debe acceder a las variables de instancia directamente, sino a travs de un mtodo.

Pelicula pelicula1 = new Pelicula();

if (pelicula1.titulo.equals("Los doce del patibulo")) {

pelicula1.setTipo("Accion");

}

Cual de estas lneas no cumple con el encapsulamiento?

2. Cdigo de una clase.

Laboratorio

Pelicula.javapublic class Pelicula {

private String titulo;

private String tipo;

//metodos settitulo,settipo,gettipo y gettipo, tostring

public void setTitulo (String nuevoTitulo) {

titulo = nuevoTitulo;

}

public void setTipo (String nuevoTipo) {

tipo = nuevoTipo;

}

public String getTitulo () {

return titulo;

}

public String getTipo () {

return tipo;

}

public String toString () {

return "titulo "+titulo+" tipo "+tipo;

}

}

2.11. Paso de variables a mtodos.

1. Cuando el argumento es un primitvo, se genera una copia de la variable para el mtodo.

Laboratorio

TestPrimitivas.java

public class TestPrimitivas {

public static void main (String[] args)

{

int numero = 150;

unMetodo(numero);

System.out.println(numero);

}

private static void unMetodo(int argumento) {

if (argumento < 0 || argumento > 100) {

argumento = 0;

System.out.println(argumento);

}

}

}

Que valores muestra el programa anterior?

2. Cuando se pasa como argumento un objeto referencia, no se genera copia. El argumento referencia al objeto original.

Laboratorio

TestReferencias.java

public class TestReferencias {

public static void main (String[] args)

{

Pelicula pelicula1 = new Pelicula();

pelicula1.setTitulo("El Resplandor");

pelicula1.setTipo("Drama");

unMetodo(pelicula1);

System.out.println(pelicula1.getTipo());

}

public static void unMetodo(Pelicula referencia) {

referencia.setTipo("Terror");

}

}

Que muestra el programa?

Ejercicio

1. Cree la clase Cliente con los atributos cdigo, nombre, direccin, telfono encapsulados (mtodos set y get).

2. Agregue a la clase Cliente el mtodo toString que muestre en pantalla todos los datos de la clase Cliente.

3. Cree la clase Pelicula con los atributos cdigo, titulo, tipo, precio de alquiler. Incluya el mtodo toString.

4. Cree un programa como TacoraFilms.java y cree como objetos a dos clientes con datos de sus familiares. (cliente1 y cliente2)

5. Agregue al programa principal objetos de dos pelculas que haya visto recientemente. (pelicula1, pelicula2)

6. Al final del programa coloque lo siguiente:

System.out.println(cliente1);

System.out.println(cliente2);

System.out.println(pelicula1);

System.out.println(pelicula2);

Que muestra el programa?

Tema 3. TRABAJANDO CON CLASES

Resumen

Se realizara un estudio sobre caractersticas avanzadas en la definicin de clases.

3.1. DEFINICIONES INICIALES.

El encapsulamiento se basa en los mtodos de instancia.

La sobrecarga de mtodos nos brinda una interfase mas legible.

Los constructores aseguran una consistente creacin de objetos

El Garbage Collector libera espacio en memoria.

3.1.1. Sobrecarga de mtodos.

Algunos mtodos en una clase pueden tener el mismo nombre.

Estos mtodos deben contar con diferentes argumentos.

El compilador decide que mtodo invocar comparando los argumentos.

Se generara un error si los mtodos solo varian en el tipo de retorno.

public class Pelicula {

private float precio;

public void setPrecio() {

precio = 3.50;

}

public void setPrecio(float nuevoPrecio) {

precio = nuevoPrecio;

}

}

3.1.2. Iniciacin de variables de instancia

Las variables de instancia se pueden iniciar en la declaracin.

Esta iniciacin ocurre cuando se crea un objeto.

public class Pelicula {

private String titulo; // implicito

private String tipo = "Drama"; // explicito

private int numeroDeOscares; // implicito

}

Las primitivas se inician implcitamente como:

char

byte, short, int, long

boolean

float, double

Referencia a Objeto'0'

0

false

0.0

null

En forma explicita se puede indicar un valor inicial.

private String tipo = "Drama";

Un constructor provee una iniciacin de variables de instancia mas compleja.

3.1.3. Constructores

Para una adecuada iniciacin de variables de instancia, la clase debe tener un constructor.

Un constructor se invoca automticamente cuando se crea un objeto.

Se declaran de forma pblica.

Tiene el mismo nombre que la clase.

No retorna ningn valor.

Si no se codifica un constructor, el compilador crea uno por defecto sin argumentos que solo inicia las variables de instancia.

Laboratorio

Pelicula.java //crea la clase peliculapublic class Pelicula {

private String titulo;

private String tipo = "Drama";

public Pelicula() {

titulo = "Pelicula sin definir.";

}

public Pelicula(String nuevoTitulo) {

titulo = nuevoTitulo;

}

public Pelicula(String nuevoTitulo, String nuevoTipo) {

titulo = nuevoTitulo;

tipo = nuevoTipo;

}

public String getTitulo() {

return titulo;

}

public String getTipo() {

return tipo;

}

}

TestConstructores.java // aqui llama llama a la clases peliculapublic class TestConstructores {

public static void main (String[] args) {

Pelicula pelicula1 = new Pelicula();

Pelicula pelicula2 = new Pelicula("La lista de Schindler.");

Pelicula pelicula3 = new Pelicula("El dormilon.","Comedia");

System.out.println(pelicula1.getTitulo()+pelicula1.getTipo());

System.out.println(pelicula2.getTitulo()+pelicula2.getTipo());

System.out.println(pelicula3.getTitulo()+pelicula3.getTipo());

}

}

Que muestra el programa?

3.1.4. La referencia this

Los mtodos de instancia reciben el argumento this implcitamente que se refiere al mismo objeto.

public class Pelicula {

private String titulo;

public void setTitulo(String titulo) {

this.titulo = titulo;

}

}

Se puede compartir cdigo entre constructores usando la referencia this. Un constructor invoca a otro pasandole los argumento que requiere.

Laboratorio

Pelicula.java

public class Pelicula {

private String titulo;

private String tipo;

public Pelicula()

{

this("Pelicula sin definir");

}

public Pelicula (String titulo) {

this.titulo = titulo;

}

public String getTitulo() {

return titulo;

}

}

TestThis.javapublic class TestThis {

public static void main (String[] args) {

Pelicula pelicula1 = new Pelicula();

Pelicula pelicula2 = new Pelicula("Todo sobre mi madre");

System.out.println(pelicula1.getTitulo());

System.out.println(pelicula2.getTitulo());

}

}

3.1.5. Variables de clase

Las variables de clase comparte un nico valor entre todos las instancias de la clase.

Se declaran con el calificador static.

public Class Pelicula {

// iniciacin por defecto

private static double precioMinimo;

private String titulo, tipo;

}

Las variables de clase se pueden iniciar en la declaracin.

La iniciacin ocurre cuando se carga la clase en memoria.

Para una iniciacin compleja se usara un bloque static

public Class Pelicula {

// iniciacin explicita

private static double precioMinimo = 3.29;

}

LaboratorioPelicula.java

import java.util.*;

public class Pelicula {

private static int numeroDias = 3;

// iniciacin compleja

private static double precioMinimo;

static {

Date hoy = new Date();

if (hoy.getDay() == 0) //si es Domingo

precioMinimo = 5.10;

else

precioMinimo = 3.29;

}

public int getNumeroDias() {

return numeroDias;

}

public double getPrecioMinimo() {

return precioMinimo;

}

}

TestStatic.javapublic class TestStatic {

public static void main (String[] args) {

Pelicula pelicula = new Pelicula();

System.out.println(pelicula.getNumeroDias());

System.out.println(pelicula.getPrecioMinimo());

}

}

3.1.6. Mtodos de clase.

Estos mtodos son compartidos por todas las instancias.

Se usan estos mtodos principalmente en manipular variables de instancia.

Se les declara con el calificador staticSe invoca a este mtodo de clase con el nombre de la clase o con el nombre de una instancia.

Laboratorio

Pelicula.java

public class Pelicula {

private static float precio = 3.50f;

private String titulo;

public Pelicula(String titulo) {

this.titulo = titulo;

}

public String getTitulo() {

return titulo;

}

public static void setPrecio(float nuevoPrecio) {

precio = nuevoPrecio;

}

public static float getPrecio() {

return precio;

}

}TestStatic2.javapublic class TestStatic2 {

public static void main (String[] args) {

Pelicula.setPrecio(3.98f);

Pelicula oscar = new Pelicula("Ben Hur");

System.out.println(oscar.getPrecio());

oscar.setPrecio(4.98f);

System.out.println(Pelicula.getPrecio());

}

}

Que resultados se obtienen?

3.2 EJERCICIOSEjercicio 1

Cree la clase Cliente que tendr los siguiente datos cdigo (int) nombre, direccin, telfono (String)

La clase debe contar con dos constructores.

Uno sin argumentos para autogenerar el cdigo (que inicia en 2000).

Otro que aceptara los datos nombre, direccin, telfono.

El cdigo del cliente debe ser automtico e incrementarse en uno cada vez que se cree una instancia. Los cdigos inician en 2001

Agregue los mtodos set y get para estos atributos.

Tambin agregue el mtodo toString() para mostrar los datos del cliente asi como el cdigo creado automticamente.

Cree la clase Pelicula con los siguientes datos: codigo (int) titulo, tipo (String) precio (float)

La clase debe contar con dos constructores.

Uno sin argumentos para autogenerar el cdigo (que inicia en 9000).

Otro que aceptara los datos titulo, tipo, precio .

El cdigo de la pelicula debe ser automtico e incrementarse en uno cada vez que se cree una instancia. Los codigos inician en 9001

Agregue los mtodos set y get para estos atributos.

Tambin agregue el mtodo toString() para mostrar los datos de la pelicula incluido el cdigo autogenerado.

Defina la clase BaseDeDatos donde creara 4 clientes (nombres familiares) y 6 pelculas (que haya visto en cine o televisin).

Finalmente cree el programa TestClases que muestre toda la base de datos (haciendo uso de la ventaja del mtodo toString() ). Tambin muestre el ultimo cdigo autogenerado tanto en clientes como en pelculas que deber obtener directamente de sus clases.

Cliente.java

public class Cliente {

private int id;

//...

private static int ultimoId = 2000;

//...

public Cliente() {

this.id = ...

ultimoId++;

}

public Cliente(String nombre...) {

this();

this.nombre = ...

}

}

Pelicula.java

public class Pelicula {

private int id;

//...

private static int ultimoId = 9000;

//...

public static int getUltimoId() {

return ultimoId;

}

}

BaseDeDatos.java

public class BaseDeDatos {

Cliente cliente1 = new Cliente("Daneel Olivaw","Solaria4","11-2542");

//...

Pelicula pelicula1 = new Cliente("El Padrino","Drama",5.30f);

//...

}

TestClases.javapublic class TestClases {

public static void main (String[] args) {

BaseDeDatos bd = new BaseDeDatos();

System.out.println(bd.cliente1);

System.out.println(bd.cliente2);

//...

System.out.println(bd.pelicula1);

System.out.println(bd.pelicula2);

//...

System.out.println(Cliente.getUltimoId());

System.out.println(Pelicula.getUltimoId());

}

}

Ejercicio 2

Cree la clase Vendedor con los siguientes atributos nombre, edad, ventas, sueldoFijo. La clase tambin contara con un atributo esttico para contar la cantidad de vendedores que se vayan creando. La clase cuenta con un constructor que recibe nombre, edad, ventas, sueldoFijo como argumentos. En este constructor se incrementara el contador de vendedores creados.

Contara con un mtodo esttico que retornara la cantidad actual de vendedores creados getCantidad(). Otro mtodo retornara el sueldo del vendedor getSueldo(). El sueldo es el 0.25% de las ventas mas el sueldo fijo.

Agregue otro constructor con dos argumentos como nombre y ventas nicamente.

En el programa AplicacionVendedor.java se encuentra lo siguiente:

...

Vendedor vendedorHari = new Vendedor("Hari Seldon",8000);

Vendedor vendedorSalvor= new Vendedor("Salvor Hardin",30,5000,1300);

System.out.println(Vendedor.getCantidad());

System.out.println(vendedorHari.getSueldo());

System.out.println(vendedorSalvor.getSueldo());

...

Tema 5. HERENCIA Y POLIMORFISMO

Resumen

Se estudiara el uso de la herencia y el polimorfismo en el reuso de clases.5.1. HERENCIA

5.1.1 Definicin

Permite a una clase compartir la misma estructura de datos y comportamiento de otra clase.

La herencia minimiza la necesidad de duplicar cdigo.

El Polimorfismo permite utilizar el mtodo de acuerdo al objeto heredado.

Superclase

Subclase

Que atributos tienen en comn las subclases?

Que atributos no tienen en comn las subclases?

Que mtodo no tienen en comn las subclases?

5.1.2. La herencia en Java

Una subclase se define indicando a que superclase extiende.

public class Item {

// Definicin de la superclase Item.

}

public class Pelicula extends Item {

// Atributos y mtodos adicionales para distinguir una

// pelicula de otros tipos de item

}

Una subclase hereda todas las variables instancia de la superclase.

Las variables de instancia deben ser private para que instancias de la subclase hereden sus valores.

public class Item {

protected float precio = 0;

protected String estado = "Excelente";

}

public class Pelicula extends Item {

private String titulo = "";

private int duracion = 0;

}

Una subclase no hereda ningn constructor de la superclase, debe declararse explcitamente.

Solo en caso no se declare explcitamente, se ejecutaran los constructores por defecto de las superclases y finalmente de la subclase.

Pelicula pelicula = new Pelicula ();

// Inicia variables de la clase Item. Constructor por defecto.

// Inicia variables de la clase Pelicula. Constructor por defecto.

Defina las subclases Libro y Equipo.

Como declarara las clases:

Hombre > Homnido > Primate > Placentario

Perro > Canino > Carnivoro > Placentario

Placentario > Mamfero > Vertebrado > Animal > Ser Vivo.

5.1.3. La referencia super

Se refiere a la clase padre

Se usa para invocar constructores de la clase padre

Debe ser la primera sentencia del constructor de la clase hijo

Esta referencia tambin se usa para invocar cualquier mtodo del padre.

public class Item {

protected float precio = 0;

Item (float precio) {

this.precio = precio;

}

}

public class Pelicula extends Item {

private String titulo = "";

Pelicula (float precio, String titulo) {

super(precio);

this.titulo = titulo;

}

}

5.1.4. Mtodos

La superclase define los mtodos para todas las subclases.

La subclase puede especificar mtodos propios.

Item0.java

public class Item0 {

protected float precio = 0;

Item0 (float precio) {

this.precio = precio;

}

public float getPrecio() {

return precio;

}

}

Pelicula0.java

public class Pelicula0 extends Item0

{

private String titulo = "";

Pelicula0 (float precio, String titulo) {

super(precio);

this.titulo = titulo;

}

public String getTitulo()

{

return titulo;

}

}

TestSuper.java

public class TestSuper {

public static void main (String[] args) {

Item0 item = new Item0(1.1f);

System.out.println( item.getPrecio() );

Pelicula0 pelicula = new Pelicula0(2.2f,"Zelig");

System.out.println( pelicula.getPrecio() );

System.out.println( pelicula.getTitulo() );

}

}

Que diferencia existe entre this y super?

Se puede reemplazar super(precio); por this.precio = precio; ?

Que mtodos puede invocar una subclase?

La subclase hereda todos los mtodos del padre.

La subclase puede re-escribir un mtodo del padre.

Item1.java

public class Item1 {

public float calcularImporte(int cliente) {

return 50;

}

}

Pelicula1.java

public class Pelicula1 extends Item1 {

public float calcularImporte(int cliente) {

if (cliente < 500)

return 10;

else

return 30;

}

}

TestSobrescribir.java

public class TestSobrescribir {

public static void main (String[] args) {

Item1 item1 = new Item1();

System.out.println( item1.calcularImporte(599) );

Pelicula1 pelicula1 = new Pelicula1();

System.out.println( pelicula1.calcularImporte(399) );

System.out.println( pelicula1.calcularImporte(599) );

}

}

Cual es la diferencia entre sobre-carga de mtodos y sobre-escritura de mtodos?

5.1.5. La referencia super

Si una subclase sobrescribe un mtodo de la superclase; el mtodo de la superclase se puede invocar con la referencia super.

Item2.java

public class Item2 {

public float calcularImporte(int cliente) {

return 50;

}

}

Equipo2.java

public class Equipo2 extends Item2 {

public float calcularImporte(int cliente) {

float seguroEquipo = 25;

float alquiler = super.calcularImporte(cliente);

return seguroEquipo + alquiler;

}

}

TestSuper2.java

public class TestSuper2 {

public static void main (String[] args) {

Item2 articulo = new Item2();

System.out.println( articulo.calcularImporte(599) );

Equipo2 vhs = new Equipo2();

System.out.println( vhs.calcularImporte(599) );

}

}

5.2. Polimorfismo

Permite efectuar una misma operacin dependiendo del tipo de objeto.

Ejemplo

TacoraFilms inicia sus operaciones alquilando nicamente pelculas.

Tres meses despus amplia el alquiler a equipos, juegos y libros.

El alquiler de una pelicula es 2 soles por da de alquiler.

El alquiler de un equipo consta de un seguro de 50 soles adems de 5 soles por da.

El alquiler de juegos depende del fabricante. PlayStation 2soles/da Nintendo 1sol/da

Los libros no se alquilan, se prestan uno a la vez, mientras sean clientes de la tienda.

Explique por que se obtienen los resultados

Alquiler3.java

public class Alquiler3 {

private int dias;

public Alquiler3(int dias) {

this.dias = dias;

}

public int getDias () {

return dias;

}

}

Item3.java

public class Item3 {

protected float calcularImporte(Alquiler3 contrato) {

return 0;

}

}

Pelicula3.java

public class Pelicula3 extends Item3 {

protected float calcularImporte(Alquiler3 contrato) {

int importe = 2*contrato.getDias();

return importe;

}

}

Equipo3.java

public class Equipo3 extends Item3 {

protected float calcularImporte(Alquiler3 contrato) {

int seguroEquipo = 50;

int importe = seguroEquipo + 5*contrato.getDias();

return seguroEquipo + importe;

}

}

Juego3.java

public class Juego3 extends Item3 {

String fabricante;

public Juego3(String fabricante) {

this.fabricante = fabricante;

}

public String getFabricante() {

return fabricante;

}

protected float calcularImporte(Alquiler3 contrato) {

String fabricante = this.fabricante;

int tasa = 0;

if (fabricante.equals("PlayStation")) tasa = 2;

if (fabricante.equals("Nintendo")) tasa = 1;

int importe = tasa*contrato.getDias();

return importe;

}

}

Libro3.java

public class Libro3 extends Item3 {

protected float calcularImporte(Alquiler3 contrato) {

return 0;

}

}

TestPolimorfismo.java

public class TestPolimorfismo {

public static void main (String[] args) {

Alquiler3 contrato = new Alquiler3(10);

Pelicula3 oscar = new Pelicula3();

System.out.println( oscar.calcularImporte(contrato) );

Equipo3 vhs = new Equipo3();

System.out.println( vhs.calcularImporte(contrato) );

Juego3 mu = new Juego3("Nintendo");

System.out.println( mu.calcularImporte(contrato) );

Libro3 agua = new Libro3();

System.out.println( agua.calcularImporte(contrato) );

}

}

5.3. El operador instanceof y cast

El operador instanceof permite determinar la clase de un objeto en tiempo de ejecucin.

La operacin cast permite modificar la clase de un objeto.

public class TestOperador {

public static void main (String[] args) {

Pelicula3 oscar = new Pelicula3();

Equipo3 vhs = new Equipo3();

Juego3 mu = new Juego3("Nintendo");

Libro3 agua = new Libro3();

testOperador(oscar);

testOperador(vhs);

testOperador(mu);

testOperador(agua);

}

public static void testOperador (Item3 articulo) {

if (articulo instanceof Juego3) {

Juego3 juego = (Juego3) articulo;

System.out.println(juego.getFabricante());

}

else {

System.out.println("No tiene Fabricante");

}

}

}

5.4. Atributos, mtodos y clases final

5.4.1. Variables finalUna variable final es una constante

Una variable final no puede ser modificada

Una variable final debe ser iniciada

Una variable final por lo general es publica para que pueda ser accesada externamente.

public final static String NEGRO = "FFFFFF";

public final static float PI = 3.141592f;

public final static int MAXIMO_ITEMS = 10;

5.4.2. Mtodos final

Un mtodo puede ser definida como final para evitar la sobre-escritura en una subclase.

Un mtodo final no se puede redefinir en una clase hijo.

public final static String getBlanco() {

return "000000";

}

public final boolean verificarPassword(String password) {

if (password.equals(...

}

5.4.3. Clases final

Una clase final no puede ser padre de otra clase.

Una clase puede ser definida como final para evitar la herencia.

El compilador es mas eficiente con definiciones final por que no buscara estas clases o mtodos al tratar clases heredadas.

public final class Color {

public final static String NEGRO = "FFFFFF";

public final static String getBlanco() {

return "000000";

}

}Ejercicio: Realizar lo siguiente.

Librera.java

public final class Libreria {

public final static String BLANCO = "000000";

public final static float PI = 3.141592f;

public final static int getModulo10(int numero)

{

// Obtiene el modulo 10 de la suma de digitos

if (numero < 0) numero = -numero;

String cadena = String.valueOf(numero);

int suma = 0;

for (int i=1; i < cadena.length(); i++) {

String caracter = cadena.substring(i-1,i);

int digito = Integer.parseInt(caracter);

suma += digito;

}

int residuo = suma%10;

return residuo;

}

}

TestLibreria.java

public class TestLibreria {

public static void main (String[] args) {

System.out.println(Libreria.BLANCO);

System.out.println(Libreria.PI);

System.out.println(Libreria.getModulo10(11));

System.out.println(Libreria.getModulo10(880385));

}

}5.6. Ejercicio

Encuentre los errores en el siguiente cdigo.

Item.java

1. package alquiler;

2. public class Item {

3. public final int MAXIMO = 5;

4. public String getNombre() return "";

5. private String getColor() return "";

6. protected String getImporte() return "";

7. String getAlias() return "";

8. public final String getFabricante() return "";

9. }

Pelicula.java

1. package alquiler;

2. public class Pelicula extends Item {

3. public final int MAXIMO = 5;

4. public String getNombre() return super.getNombre();

5. private String getColor() return super.getColor();

6. protected String getImporte() return super.getImporte();

7. String getAlias() return super.getAlias();

8. public final String getFabricante()

9. return super.getFabricante();

10. }

Juguete.java

1. package almacen;

2. public final class Juguete {

3. Item item = new Item("");

4. public String getNombre() return item.getNombre();

5. public String getColor() return item.getColor();

6. protected String getImporte() return item.getImporte();

7. String getAlias() return item.getAlias();

8. }

Pelota.java

1. package almacen;

2. public final class Pelota extends Juguete {

3. public String getNombre() return super.getNombre();

4. public String getColor() return super.getColor();

5. protected String getImporte() return super.getImporte();

6. String getAlias() return super.getAlias();

7. }

5.7. Laboratorio.

Cree una clase Item.java con los siguientes atributos: id (int); titulo, descripcin, ranking, categora (String) , precio de alquiler por dia (double). Todos estos atributos seran protected.

Agregue un atributo entero privado esttico que inicia en 1000 para autogenerar el Id del item.

Agregue un constructor sin parmetros que autogenere un id para el item en base al atributo esttico.

Agregue un segundo constructor con argumentos titulo, descripcin, precio, ranking y categora. Este constructor invocara al primer constructor para asignar el id. Ademas asignara los argumentos a los atributos.

Agregue todos los mtodos set y get para cada atributo.

Item.java

public class Item {

private static int siguienteId = 1000;

protected int id;

...

public Item() {

this.id = ++siguienteId;

}

public Item(String titulo... ) {

this();

this.titulo = titulo...

}

public int getId()...

...

public void setTitulo(String titulo)...

public String getTitulo()...

...

public static int getSiguienteId()...

}La clase Cliente contara con 2 atributos, su id y su nombre. El id se generara automticamente.

Cliente.java

public class Cliente {

private static int siguienteId = 2000;

protected int id;

...

public Cliente() {

this.id = ++siguienteId;

}

public Cliente(String nombre) {

this();

this.nombre...

}

public int getId()...

public String getNombre()...

}Cree una clase Pelicula.java que herede de Item.java con los siguientes atributos: duracion (int) y director (String). Estos atributos seran privados.

Agregue un constructor con argumentos titulo, descripcin, precio, ranking, numero de dias, categora, duracin y director. Este constructor invocara al constructor de la superclase y luego asignara los dos ultimos argumentos a sus atributos privados.

Agregue todos los mtodos set y get para sus dos atributos privados.

Agregue el mtodo toString() que devuelva todos los atributos privados y heredados

Pelicula.java

public class Pelicula extends Item {

private String director;

private int duracion;

public Pelicula(String titulo ... int duracion) {

super(...);

this.director = director;

this.duracion = duracion;

}

public void setDirector...

public String getDirector...

public void setDuracion...

public String getDuracion...

public String toString...

}Cree una clase Juego.java que herede de Item.java con los siguientes atributos: memoria (int) y tipo (String). Estos atributos seran privados.

Agregue un constructor con argumentos titulo, descripcin, precio, ranking, numero de dias, categora, memoria y tipo. Este constructor invocara al constructor de la superclase y luego asignara los dos ltimos argumentos a sus atributos privados.

Agregue todos los mtodos set y get para sus dos atributos privados.

Agregue el mtodo toString() que devuelva todos los atributos privados y heredados

Juego.java

public class Juego extends Item {

private int memoria;

private String tipo;

public Juego(String titulo ... String tipo) {

super(...);

this.memoria=...;

this.tipo=...;

}

...setMemoria...

...getMemoria...

...setTipo...

...getTipo...

public String toString...

}En la base de datos se encontraran la lista de pelculas y los juegos.

BaseDeDatos.java

public class BaseDeDatos {

private static Cliente[] cliente = new Cliente [4];

private static Items[] item = new Item [4];

public BaseDeDatos() {

cliente[0] = new Cliente("Daneel Olivaw");

//...

item[0] = new Pelicula("La caravana del valor",...);

item[1] = new Pelicula("En las lunas de Endor",...);

item[2] = new Juego("Mu Online",...);

item[3] = new Juego("War Craft",...);

//...

}

public static Cliente getCliente(int id) {

for (...) {

break;

}

return cliente[];

}

public static Item getItem(int id) ... }

La clase Alquiler.java contara con los siguientes atributos: un arreglo de tems que se alquilaran (Item) el cliente que alquila (Cliente) un numero de alquiler id (int), la cantidad de tems alquilados (int) y la cantidad de dias de alquiler (int).

Un atributo de clase privado esttico entero ser el contador de id que iniciara en 500.

Una constante ser el mximo numero de tems a alquilar que es 10.

Una constante ser el impuesto del alquiler de 19%.

Un constructor asignara el cliente por argumento y el numero de dias de alquiler. Tambin creara el arreglo de tems, y su numero de alquiler.

Un mtodo para agregar tems al arreglo de tems del alquiler.

Un mtodo imprimira todo el detalle del alquiler en pantalla.

Alquiler.java

public class Alquiler {

private static int siguienteAlquilerId = 500;

private int alquilerId;

private int numeroDias;

private int clienteId;

private int cantidadItems;

private int[] itemId;

private final static int MAXITEMS = 10;

private final static double IMPUESTO = 0.19;

...

public Alquiler(int clienteId, int numeroDias) {

this.alquilerId = ...

this.clienteId = ...

...

itemId = new int[MAXITEMS];

}

public void agregarItem(int item) {

if (...) {

itemId[...] = item;

cantidadItems++;

}

else System.out.println("Demasiados tems!");

}

public void imprimirReporte() {

/*

Cliente Id: 2000 Nombre: Salvor Hardin

Dias alquiler: 5

Detalle

1. El Padrino Precio = 1.10

2. Odisea 2001 Precio = 2.20

3. Aeropuerto 77 Precio = 3.30

Importe venta = 33.00

Importe total = 39.27

*/

}

}

El programa TacoraFilms realizara el alquiler

public class TacoraFilms {

public static void main(String[] args) {

Alquiler alquiler = new Alquiler(2001,5);

alquiler.agregarItem(1001);

alquiler.agregarItem(1002);

alquiler.agregarItem(1003);

alquiler.imprimerReporte();

}

}El Padrino

Drama

Odisea 2001

Ciencia Ficcion

La Strada

Drama

0

null

3

Dias de Radio

Item

Pelicula

Libro

Equipo (DVD, VHS)

0PAGE 1