Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Lab Sesion5 2 PDF
Lab Sesion5 2 PDF
SESIN 5 - 2:
POO AVANZADO EN JAVA
En esta sesin realizaremos programas orientados a objetos avanzados utilizando el lenguaje Java. Se
pretende ensear cmo aplicar tcnicas avanzadas de POO en aplicaciones Java.
- Clase InformaticoAbs:
package informaticos;
public abstract class InformaticoAbs {
//Atributos
private String empresa;
private double sueldo;
//Constructor
public InformaticoAbs(String empresa) {
this.empresa = empresa;
}
//Mtodos
public String getEmpresa() { return this.empresa; }
public void setEmpresa(String nueva) { this.empresa = nueva; }
public double getSueldo() { return this.sueldo; }
- Clase Analista:
package informaticos;
public class Analista extends InformaticoAbs {
String especialidad;
public Analista(String empresa, String especialidad) {
super(empresa);
this.especialidad = especialidad;
}
public double pagarSueldo(double horas) {
return horas*12;
}
}
- Clase Programador:
package informaticos;
public class Programador extends InformaticoAbs {
String lenguaje;
public Programador(String empresa, String lenguaje) {
super(empresa);
this.lenguaje = lenguaje;
}
public double pagarSueldo(double horas) {
return horas*6;
}
}
- Clase Main
package informaticos;
public class Main {
public static void main(String[] args) {
// TODO code application logic here
//Creamos informticos
InformaticoAbs inf1 = new Analista("IBM","BBDD");
InformaticoAbs inf2 = new Programador("Indra","Java");
//Pagamos los sueldos utilizando polimorfismo
inf1.setSueldo(inf1.pagarSueldo(160));
inf2.setSueldo(inf2.pagarSueldo(180));
System.out.println("Sueldo analista: "+inf1.getSueldo());
System.out.println("Sueldo programador: "+inf2.getSueldo());
}
}
2. Ejercicio Banco 3
Realizar una pequea aplicacin en Java utilizando polimorfismo, como en el ejemplo anterior, para la
gestin de los intereses de distintos tipos de cuentas de un banco. La aplicacin se compondr de una
clase padre abstracta CuentaAbs que contendr un mtodo abstracto calculaInteres(double cantidad)
que devolver un double con el clculo de los intereses aplicados a cierta cantidad de dinero. La clase
CuentaAbs debe contar como mnimo con los atributos: nmero de cuenta (String), titular (String),
saldo (double) y fecha de apertura (Calendar) y sus correspondientes mtodos get y set. De la clase
CuentaAbs heredarn dos clases llamadas CuentaAhorro y CuentaPlazo que implementarn el mtodo
abstracto dando un inters del 2 % la primera y un 5 % la segunda. La calse CuentaAhorro incorporar
un nuevo atributo llamado numTarjCredito de tipo String y CuentaPlazo el atributo numAos de tipo
int. Probar las clases con distintos objetos de los dos tipos de cuentas.
El cdigo de cada una de las clases y una aplicacin capaz de manejarlas es el siguiente:
- Clase Persona:
package censouni;
public class Persona {
private
private
private
private
private
String dni;
String nombre;
Fecha fechaNac;
String direccion;
int tfno;
//constructor
public Persona(String p_dni, String p_nombre, Fecha p_fecnac,
String p_direccion, int p_tfno) {
dni = p_dni;
nombre = p_nombre;
fechaNac = p_fecnac;
direccion = p_direccion;
tfno = p_tfno;
}
//mtodos
public String getDni() {
return this.dni;
}
public String getNombre() {
return this.nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public Fecha getFechaNac() {
return this.fechaNac;
}
public void setFechaNac(Fecha fechaNac) {
this.fechaNac = fechaNac;
}
public String getDireccion() {
return this.direccion;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public int getTfno() {
return this.tfno;
}
public void setTfno(int tfno) {
this.tfno = tfno;
}
public String toString() {
return dni + " " + nombre;
}
}
Esta clase hace uso (asociacin) de otra llamada Fecha, esta clase se encarga de manejar fechas. El
cdigo de la clase se muestra a continuacin:
- Clase Fecha:
//Clase para manejar fechas (DD/MM/AAAA)
package censouni;
import java.util.Calendar;
public class Fecha {
//atributos
private int ao;
private int mes;
private int dia;
//constructores
public Fecha(int dia, int mes, int ao) {
this.dia = dia;
this.mes = mes;
this.ao = ao;
}
public Fecha(String cadenaFecha) throws FechaMal {
String[] st = cadenaFecha.split("/");
if (st.length < 3) {
throw new FechaMal();
}
String dd = st[0];
String mm = st[1];
String aa = st[2];
this.dia = Integer.parseInt(dd);
this.mes = Integer.parseInt(mm);
this.ao = Integer.parseInt(aa);
}
public Fecha() {
Calendar hoy = Calendar.getInstance();
ao = hoy.get(Calendar.YEAR);
mes = hoy.get(Calendar.MONTH) + 1;
dia = hoy.get(Calendar.DAY_OF_MONTH);
}
//mtodos
public String toString() {
return dia + "/" + mes + "/" + ao;
}
public int getAo() {
return this.ao;
}
public void setAo(int ao) {
this.ao = ao;
}
public int getDia() {
return this.dia;
}
public void setDia(int dia) {
this.dia = dia;
}
public int getMes() {
return this.mes;
}
- Clase Alumno:
package censouni;
public class Alumno extends Persona {
private String titulacion;
private String asignaturas;
//constructor
public Alumno(String p_dni, String p_nombre, Fecha p_fecnac,
String p_direccion, int p_tfno, String titulacion, String asignaturas) {
super(p_dni, p_nombre, p_fecnac, p_direccion, p_tfno);
this.titulacion = titulacion;
this.asignaturas = asignaturas;
}
//mtodos
public String getTitulacion() {
return this.titulacion;
}
public void setTitulacion(String titulacion) {
this.titulacion = titulacion;
}
public String getAsignaturas() {
return this.asignaturas;
}
public void setAsignaturas(String asignaturas) {
this.asignaturas = asignaturas;
}
public String toString() {
return super.toString()+" # Alumno # - Titulacin: "+ this.titulacion;
}
}
- Clase Profesor:
package censouni;
public class Profesor
extends Persona {
//mtodos
public String getDepartamento() {
return this.departamento;
}
public void setDepartamento(String departamento) {
this.departamento = departamento;
}
public double getSueldo() {
return this.sueldo;
}
public void setSueldo(double sueldo) {
this.sueldo = sueldo;
}
public String toString() {
return super.toString()+" # Profesor # - Departamento: "
+ this.departamento;
}
}
- Clase Main:
Por ltimo se muestra una clase llamada Main encargada de realizar las operaciones bsicas para
gestionar un censo universitario. Estas operaciones son las de alta, bajas, modificaciones y consulta de
los datos de las personas censadas.
/* Aplicacin CensoUni: Permite introducir, borrar y buscar personas */
package censouni;
import
import
import
import
java.io.BufferedReader;
java.io.IOException;
java.io.InputStreamReader;
java.util.HashMap;
nombre,
direccion, titulacion,
asignaturas, departamento;
//Tabla hash
private static HashMap<String, Persona> personas = new HashMap<String, Persona>();
private static BufferedReader entrada =
new BufferedReader(new InputStreamReader(System.in));
private static int tfno, op;
private static double sueldo;
private static Fecha fecnac;
private static Persona objper;
private static Alumno alumno;
private static Profesor profe;
private static String clase;
public static void main(String[] args) {
// TODO code application logic here
while (true) {
try {
do {
System.out.println("\n\n--- Operaciones del Censo Universitario ---");
System.out.println(" 1 - Alta. ");
System.out.println(" 2 - Baja. ");
System.out.println(" 3 - Consulta. ");
System.out.println(" 4 - Modificacin. ");
}
}
}
}
// alta
if (res.equals("1")) {
alta();
} // baja
else if (res.equals("2")) {
baja();
} // consulta
else if (res.equals("3")) {
consulta();
} // modificacin
else if (res.equals("4")) {
modifica();
} //salir
else if (res.equals("5")) {
System.exit(0);
}
catch (NumberFormatException nfe) {
System.out.println("\nError de formato numrico: " + nfe.toString());
catch (FechaMal fm) {
System.out.println("\nError en formato de fecha.");
catch (IOException ioe) {
System.out.println("\nError de entrada/salida: " + ioe.toString());
catch (Exception e) {
// Captura cualquier otra excepcin
System.out.println(e.toString());
}
}
}
// alta
private static void alta() throws IOException, FechaMal {
System.out.println("\n -- Alta -- ");
System.out.println("Introduzca el DNI: ");
dni = entrada.readLine();
System.out.println("Introduzca nombre: ");
nombre = entrada.readLine();
System.out.println("Introduzca fecha de nacimiento (DD/MM/AAAA): ");
fecnac = new Fecha(entrada.readLine());
System.out.println("Introduzca direccin: ");
direccion = entrada.readLine();
System.out.println("Introduzca telfono: ");
tfno = Integer.parseInt(entrada.readLine());
do {
System.out.println("Introduzca categora (1-alumno, 2-profesor): ");
res = entrada.readLine();
} while (!res.equals("1") && !res.equals("2"));
if (res.equals("1")) {
System.out.println("Introduzca titulacin: ");
titulacion = entrada.readLine();
System.out.println("Introduzca asignaturas: ");
asignaturas = entrada.readLine();
//instanciamos un alumno
alumno = new Alumno(dni, nombre, fecnac, direccion, tfno,
titulacion, asignaturas);
//introducimos en la tabla hash.
personas.put(dni, alumno);
System.out.println("\nAlumno dado de alta: " + alumno.toString());
} else {
System.out.println("Introduzca departamento: ");
departamento = entrada.readLine();
System.out.println("Introduzca sueldo: ");
sueldo = Double.parseDouble(entrada.readLine());
//instanciamos un profesor
profe = new Profesor(dni, nombre, fecnac, direccion, tfno,
departamento, sueldo);
//introducimos en la tabla hash.
personas.put(dni, profe);
System.out.println("\nProfesor dado de alta: " + profe.toString());
}
}
// baja
private static void baja() throws IOException {
System.out.println("\n -- Baja -- ");
System.out.println("Introduzca el DNI de la persona a borrar: ");
dni = entrada.readLine();
//obtenemos la persona de la tabla hash.
objper = personas.get(dni);
if (objper != null) {
personas.remove(dni);
System.out.println("Persona borrada: " + objper.toString());
} else {
System.out.println(" Error: - Persona no encontrada - ");
}
}
// consulta
private static void consulta() throws IOException {
System.out.println("\n -- Consulta -- ");
System.out.println("Introduzca el DNI de la persona: ");
dni = entrada.readLine();
//obtenemos la persona de la tabla hash.
objper = personas.get(dni);
if (objper != null) {
System.out.println("- Nombre: " + objper.getNombre());
System.out.println("- Fecha de nacimiento: " + objper.getFechaNac().toString());
System.out.println("- Direccin: " + objper.getDireccion());
System.out.println("- Telfono: " + objper.getTfno());
//sacamos la categora de la persona
clase = objper.getClass().getName();
if (clase.equals("censouni.Alumno")) {
alumno = (censouni.Alumno) objper;
System.out.println("- Titulacin: " + alumno.getTitulacion());
System.out.println("- Asignaturas: " + alumno.getAsignaturas());
} else {
profe = (censouni.Profesor) objper;
System.out.println("- Departamento: " + profe.getDepartamento());
System.out.println("- Sueldo: " + profe.getSueldo());
}
} else {
System.out.println(" Error: - Persona no encontrada - ");
}
}
// modifica
private static void modifica() throws IOException, FechaMal {
System.out.println("\n -- Modificacin -- ");
System.out.println("Introduzca el DNI de la persona: ");
dni = entrada.readLine();
//obtenemos la persona de la tabla hash.
objper = personas.get(dni);
if (objper != null) {
System.out.println("Introduzca el dato a modificar (1-Nombre, 2-FecNac, 3-Dir,
4-Tfno, 5-Otro): ");
op = Integer.parseInt(entrada.readLine());
switch (op) {
case 1:
System.out.println("Introduzca nuevo nombre: ");
nombre = entrada.readLine();
objper.setNombre(nombre);
break;
case 2:
System.out.println("Introduzca nueva fecha de nacimiento: ");
fecnac = new Fecha(entrada.readLine());
objper.setFechaNac(fecnac);
break;
case 3:
10
11
5. Solucin Banco 3
Realizar una pequea aplicacin en Java utilizando polimorfismo, como en el ejemplo anterior, para la
gestin de los intereses de distintos tipos de cuentas de un banco. La aplicacin se compondr de una
clase padre abstracta CuentaAbs que contendr un mtodo abstracto calculaInteres(double cantidad)
que devolver un double con el clculo de los intereses aplicados a cierta cantidad de dinero. La clase
CuentaAbs debe contar como mnimo con los atributos: nmero de cuenta (String), titular (String),
saldo (double) y fecha de apertura (Calendar) y sus correspondientes mtodos get y set. De la clase
CuentaAbs heredarn dos clases llamadas CuentaAhorro y CuentaPlazo que implementarn el mtodo
abstracto dando un inters del 2 % la primera y un 5 % la segunda. La calse CuentaAhorro incorporar
un nuevo atributo llamado numTarjCredito de tipo String y CuentaPlazo el atributo numAos de tipo
int. Probar las clases con distintos objetos de los dos tipos de cuentas.
- Clase CuentaAbs:
package banco;
import java.util.Calendar;
public abstract class CuentaAbs {
/** Creates a new instance of CuentaAbs */
public CuentaAbs(String numero, String titular, double saldo) {
this.numero = numero;
this.titular = titular;
this.saldo = saldo;
this.fechaApertura = Calendar.getInstance();
}
private String numero;
private String titular;
private double saldo;
private Calendar fechaApertura;
public String getNumero() {
return numero;
}
public String getTitular() {
return titular;
}
public void setTitular(String titular) {
this.titular = titular;
}
public double getSaldo() {
return saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
public Calendar getFechaApertura() {
return fechaApertura;
}
public void setFechaApertura(Calendar fechaApertura) {
this.fechaApertura = fechaApertura;
}
public void ingresar(double cantidad) {
12
this.saldo += cantidad;
}
public void retirar(double cantidad) {
this.saldo -= cantidad;
}
public String toString() {
return "Cuenta: " + this.numero + " - " + this.titular + " - " + this.saldo;
}
public abstract double calculaInteres(double cantidad);
}
- Clase CuentaAhorro:
package banco;
public class CuentaAhorro extends CuentaAbs {
/** Creates a new instance of CuentaAhorro */
public
CuentaAhorro(String
numero,
String
numTarjetaCredito) {
super(numero, titular, saldo);
this.numTarjetaCredito = numTarjetaCredito;
}
titular,
double
saldo,
String
- Clase CuentaPlazo:
package banco;
public class CuentaPlazo extends CuentaAbs {
/** Creates a new instance of CuentaPlazo */
public CuentaPlazo(String numero, String titular, double saldo, int numAos) {
super(numero, titular, saldo);
this.numAos = numAos;
}
private int numAos;
public double calculaInteres(double cantidad){
return cantidad*0.05;
}
public String toString() {
return super.toString() + " - " + this.numAos;
}
}
13
- Clase CuentaPlazo:
package banco;
public class PruebaCuentas3 {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
CuentaAbs c1 = new CuentaAhorro("1","Pepe",100,"124236987364");
CuentaAbs c2 = new CuentaPlazo("2","Maria",200,4);
c1.ingresar(200);
c2.retirar(100);
System.out.println(c1.toString());
double c1i = c1.calculaInteres(c1.getSaldo()) + c1.getSaldo();
double c2i = c2.calculaInteres(c2.getSaldo()) + c2.getSaldo();
System.out.println("Tu saldo de la CuentaAhorro + los intereses queda en: "+ c1i);
System.out.println(c2.toString());
System.out.println("Tu saldo de la CuentaPlazo + los intereses queda en: "+ c2i);
}
}
14
String codigo;
String nombre;
double precio;
int cantidad;
15
- Clase Ordenador:
package tienda;
public class Ordenador extends Producto {
private String caracteristicas;
public Ordenador(String nombre, double precio, int cantidad, String caracteristicas) {
super(nombre, precio, cantidad);
this.caracteristicas = caracteristicas;
}
public String getCaracteristicas() {
return this.caracteristicas;
}
16
- Clase Movil:
package tienda;
public class Movil extends Producto {
private String operador;
public Movil(String nombre, double precio, int cantidad, String operador) {
super(nombre, precio, cantidad);
this.operador = operador;
}
public String getOperador() {
return this.operador;
}
public void setOperador(String operador) {
this.operador = operador;
}
public String toString() {
return super.toString()+"\n # Movil # - Operador: "+ operador;
}
}
- Clase Tienda:
package tienda;
import java.io.*;
import java.util.*;
public class Tienda {
private static HashMap<String, Producto> productos = new HashMap<String, Producto>();
private static BufferedReader entrada=
new BufferedReader(new InputStreamReader(System.in));
private static String codigo, nombre, caracteristicas, operador, res;
private static int cantidad;
private static double precio;
private static Ordenador ord;
private static Movil mov;
private static Producto pro;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
while (true) {
try {
do
{
17
18
if (res.equals("1")) {
System.out.println("Introduzca caractersticas ordenador: ");
caracteristicas=entrada.readLine();
ord = new Ordenador(nombre, precio, cantidad, caracteristicas);
codigo = ord.getCodigo();
productos.put(codigo,ord);
System.out.println("\nOrdenador dado de alta: "+ ord.toString());
} else {
System.out.println("Introduzca operador del mvil: ");
operador=entrada.readLine();
mov = new Movil(nombre, precio, cantidad, operador);
codigo = mov.getCodigo();
productos.put(codigo,mov);
System.out.println("\nMvil dado de alta: "+ mov.toString());
}
}
// baja
private static void baja() throws IOException {
System.out.println("\n -- Baja de producto -- ");
System.out.println("Introduzca el cdigo del producto: ");
codigo = entrada.readLine();
pro = productos.get(codigo);
if (pro != null) {
productos.remove(codigo);
System.out.println("\nProducto borrado.");
} else {
System.out.println(" Error: - Producto no encontrado - ");
}
}
// consulta
private static void consulta() throws IOException {
System.out.println("\n -- Consulta de producto -- ");
System.out.println("Introduzca el cdigo del producto: ");
codigo = entrada.readLine();
pro = productos.get(codigo);
if (pro != null) {
System.out.println("\nInformacin del Producto:\n"+pro.toString());
} else {
System.out.println(" Error: - Producto no encontrado - ");
}
}
// venta
private static void venta() throws IOException {
System.out.println("\n -- Venta de producto -- ");
System.out.println("Introduzca el cdigo del producto: ");
codigo = entrada.readLine();
System.out.println("Introduzca la cantidad: ");
cantidad=Integer.parseInt(entrada.readLine());
pro = productos.get(codigo);
if (pro != null) {
if (pro.restaCantidad(cantidad)) {
System.out.println("\nPrecio: "+ pro.getPrecio()*cantidad);
System.out.println("Producto comprado: "+ pro.toString());
} else System.out.println("No hay stock.");
} else {
System.out.println(" Error: - Producto no encontrado - ");
}
}
// reponer
private static void reponer() throws IOException {
System.out.println("\n -- Reponer producto -- ");
System.out.println("Introduzca el cdigo del producto: ");
codigo = entrada.readLine();
System.out.println("Introduzca la cantidad: ");
cantidad=Integer.parseInt(entrada.readLine());
pro = productos.get(codigo);
if (pro != null) {
pro.sumaCantidad(cantidad);
19
20