Вы находитесь на странице: 1из 10

Universidad Nacional del Altiplano Puno

Escuela Profesional de Ingeniera de Sistemas


CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES

GUA ACADMICA Nro. 07

TEMA: SUBCLASES E INTERFACES (I)

Apellidos y Nombres: Nro. Matrcula: .

OBJETIVOS:

Aprender a programar en el Lenguaje Java

REQUERIMIENTOS:

PC con Windows.
jdk-6u10-windows-i586-p.exe
netbeans-6.5-ml-windows.exe

PARTE 1: EJEMPLOS DE JAVA

1.1 CLASES Y MTODOS ABSTRACTOS, SUBCLASES Y HERENCIA

a. Cree un nuevo proyecto de tipo Java Application y en la opcin Project Name coloque
pCuenta, y en la opcin Create Main Class coloque: pcuenta. CCuentaMain, luego haga
click en Finish.

b. Ahora tenemos que crear la clase CFecha, para lo cual haga click derecho sobre el
package pcuenta ubicada en la parte izquierda superior del NetBeans, selecione la opcin
New, luego haga click en Java Class. El NetBeans le mostrar la Ventana New Java Class,
en la opcin Class Name coloque CFecha, fijese que el archivo que se va a crear pertenece
al proyecto pCuenta y al Package pcuenta, luego haga click en Finish.

c. Copie el siguiente cdigo (Archivo: CFecha.java):


package pcuenta;

import java.util.*;
public class CFecha
{
// Atributos
private int da, mes, ao;
private static CFecha fechaPorOmision;
static
{
// Iniciacin de los atributos static de la clase
fechaPorOmision = new CFecha(18, 5, 2009);
}

// Mtodos
static void asignarFechaPorOmision(int dd, int mm, int aaaa)
{
fechaPorOmision.asignarFecha(dd, mm, aaaa);
}
public CFecha(int... fecha)
{
asignarFecha(); // asignar fecha actual

if (0 < fecha.length) da = fecha[0];


if (1 < fecha.length) mes = fecha[1];
if (2 < fecha.length) ao = fecha[2];
if (!fechaCorrecta())
{
System.out.println("Fecha incorrecta. Se asigna la actual.");

Ing. Juan Antonio Flores Moroco 1


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
copiar(fechaPorOmision);
}
}
public CFecha(final CFecha obj) // constructor copia
{
da = obj.da;
mes = obj.mes;
ao = obj.ao;
}
protected void finalize() throws Throwable // destructor
{
System.out.println("Objeto destruido");
}
protected boolean bisiesto()
{
return ((ao % 4 == 0) && (ao % 100 != 0) || (ao % 400 == 0));
}
public void asignarFecha(int... fecha)
{
// Obtener la fecha actual
int[] fa = obtenerFechaActual();

// Asignar la fecha pasada


if (0 < fecha.length) da = fecha[0]; else da = fa[0];
if (1 < fecha.length) mes = fecha[1]; else mes = fa[1];
if (2 < fecha.length) ao = fecha[2]; else ao = fa[2];
}
public void obtenerFecha(int[] fecha)
{
fecha[0] = da;
fecha[1] = mes;
fecha[2] = ao;
}
public boolean fechaCorrecta()
{
boolean daCorrecto, mesCorrecto, aoCorrecto;

aoCorrecto = (ao >= 1582); // ao correcto?


mesCorrecto = (mes >= 1) && (mes <= 12); // mes correcto?
switch (mes) // da correcto?
{
case 2:
if (bisiesto())
daCorrecto = (da >= 1 && da <= 29);
else
daCorrecto = (da >= 1 && da <= 28);
break;
case 4: case 6: case 9: case 11:
daCorrecto = (da >= 1 && da <= 30);
break;
default:
daCorrecto = (da >= 1 && da <= 31);
}
return daCorrecto && mesCorrecto && aoCorrecto;
}
public CFecha copiar(final CFecha obj)
{
da = obj.da;
mes = obj.mes;
ao = obj.ao;
return this;
}
public static int[] obtenerFechaActual()
{
// Obtener la fecha actual
GregorianCalendar fechaActual = new GregorianCalendar();
int[] fecha = new int[] {
fechaActual.get(Calendar.DAY_OF_MONTH),

Ing. Juan Antonio Flores Moroco 2


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
fechaActual.get(Calendar.MONTH)+1,
fechaActual.get(Calendar.YEAR)
};
return fecha;
}
}

d. Ahora tenemos que crear la clase abstracta CCuenta, para lo cual haga click derecho
sobre el package pcuenta ubicada en la parte izquierda superior del NetBeans, selecione la
opcin New, luego haga click en Java Class. El NetBeans le mostrar la Ventana New Java
Class, en la opcin Class Name coloque CCuenta, fijese que el archivo que se va a crear
pertenece al proyecto pCuenta y al Package pcuenta, luego haga click en Finish.

e. Copie el siguiente cdigo (Archivo: CCuenta.java):


package pcuenta;

public abstract class CCuenta


{
// Atributos
private String nombre;
private String cuenta;
private double saldo;
private double tipoDeInters;

// Mtodos
public CCuenta() {};
public CCuenta(String nom, String cue, double sal, double tipo)
{
asignarNombre(nom);
asignarCuenta(cue);
ingreso(sal);
asignarTipoDeInters(tipo);
}
public CCuenta(final CCuenta c)
{
copiar(c);
}
public CCuenta copiar(final CCuenta c)
{
nombre = c.nombre;
cuenta = c.cuenta;
saldo = c.saldo;
tipoDeInters = c.tipoDeInters;
return this;
}
public boolean asignarNombre(String nom)
{
if (nom.length() == 0)
{
System.out.println("Error: cadena vaca");
return false;
}
nombre = nom;
return nom.length() != 0;
}
public String obtenerNombre()
{
return nombre;
}
public boolean asignarCuenta(String cue)
{
if (cue.length() == 0)
{
System.out.println("Error: cuenta no vlida");

Ing. Juan Antonio Flores Moroco 3


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
return false;
}
cuenta = cue;
return cue.length() != 0;
}
public String obtenerCuenta()
{
return cuenta;
}
public double estado()
{
return saldo;
}
public abstract void comisiones();
public abstract double intereses();
public boolean ingreso(double cantidad)
{
if (cantidad < 0)
{
System.out.println("Error: cantidad negativa");
return false;
}
saldo += cantidad;
return cantidad >= 0;
}
public void reintegro(double cantidad)
{
if (saldo - cantidad < 0)
{
System.out.println("Error: no dispone de saldo");
return;
}
saldo -= cantidad;
}
public boolean asignarTipoDeInters(double tipo)
{
if (tipo < 0)
{
System.out.println("Error: tipo no vlido");
return false;
}
tipoDeInters = tipo;
return tipo >= 0;
}
public double obtenerTipoDeInters()
{
return tipoDeInters;
}
}

f. Ahora tenemos que crear la subclase CCuentaAhorro que Hereda de la clase abstracta
CCuenta, para lo cual haga click derecho sobre el package pcuenta ubicada en la parte
izquierda superior del NetBeans, selecione la opcin New, luego haga click en Java Class.
El NetBeans le mostrar la Ventana New Java Class, en la opcin Class Name coloque
CCuentaAhorro, fijese que el archivo que se va a crear pertenece al proyecto pCuenta y al
Package pcuenta, luego haga click en Finish.

g. Copie el siguiente cdigo (Archivo: CCuentaAhorro.java):


package pcuenta;
import java.util.*;

public class CCuentaAhorro extends CCuenta


{
// Atributos

Ing. Juan Antonio Flores Moroco 4


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
private double cuotaMantenimiento;

// Mtodos
public CCuentaAhorro() {} // constructor sin parmetros
public CCuentaAhorro(String nom, String cue, double sal, double tipo, double mant)
{
super(nom, cue, sal, tipo); // invoca al constructor CCuenta
asignarCuotaManten(mant); // inicia cuotaMantenimiento
}
public CCuentaAhorro(final CCuentaAhorro ca)
{
copiar(ca);
}
public CCuentaAhorro copiar(final CCuentaAhorro ca)
{
super.copiar(ca);
cuotaMantenimiento = ca.cuotaMantenimiento;
return this;
}
public CCuentaAhorro clone()
{
return new CCuentaAhorro(this);
}
protected void finalize() throws Throwable // destructor
{
// Ninguna operacin
super.finalize(); // invocar al mtodo finalize de la superclase
}
public boolean asignarCuotaManten(double cantidad)
{
if (cantidad < 0)
{
System.out.println("Error: cantidad negativa");
return false;
}
cuotaMantenimiento = cantidad;
return cantidad >= 0;
}
public double obtenerCuotaManten()
{
return cuotaMantenimiento;
}
public void comisiones()
{
// Se aplican mensualmente por el mantenimiento de la cuenta
int[] fa = CFecha.obtenerFechaActual(); // da, mes y ao
if (fa[0] == 1)
reintegro(cuotaMantenimiento); // fa[0] => da
}
public double intereses()
{
int[] fa = CFecha.obtenerFechaActual(); // da, mes y ao

if (fa[0] != 1) return 0.0; // fa[0] => da


// Acumular los intereses por mes slo los das 1 de cada mes
double interesesProducidos = 0.0;
interesesProducidos = estado() * obtenerTipoDeInters() / 1200.0;
ingreso(interesesProducidos);

// Devolver el inters mensual por si fuera necesario


return interesesProducidos;
}
}

Ing. Juan Antonio Flores Moroco 5


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES

h. Copie y ejecute el siguiente cdigo (Archivo: CCuentaMain.java):


package pcuenta;

public class CCuentaMain


{
public static void main(String[] args)
{
CCuentaAhorro cliente01 = new CCuentaAhorro();

//Invocar al Constructor de la subclase


CCuentaAhorro cliente02 = new CCuentaAhorro("Un nombre", "Una cuenta",
1000000, 3.5, 300);

cliente01.asignarNombre("Un nombre");
cliente01.asignarCuenta("Una cuenta");
cliente01.asignarTipoDeInters(2.5);
cliente01.asignarCuotaManten(300);

cliente01.ingreso(1000000);
cliente01.reintegro(500000);
cliente01.comisiones();

System.out.println(cliente01.obtenerNombre());
System.out.println(cliente01.obtenerCuenta());
System.out.println(cliente01.estado());
System.out.println(cliente01.obtenerTipoDeInters());
}
}
Resultados:

1.2 JERARQUIA DE CLASES

a. Ahora tenemos que crear la subclase CCuentaCorriente que Hereda de la clase


abstracta CCuenta, para lo cual haga click derecho sobre el package pcuenta ubicada en la
parte izquierda superior del NetBeans, selecione la opcin New, luego haga click en Java
Class. El NetBeans le mostrar la Ventana New Java Class, en la opcin Class Name
coloque CCuentaCorriente, fijese que el archivo que se va a crear pertenece al proyecto
pCuenta y al Package pcuenta, luego haga click en Finish.

b. Copie el siguiente cdigo (Archivo: CCuentaCorriente.java):


package pcuenta;

// Clase CCuentaCorriente: clase derivada de CCuenta


public class CCuentaCorriente extends CCuenta
{
// Atributos
private int transacciones;
private double importePorTrans;
private int transExentas;

// Mtodos
public CCuentaCorriente() {} // constructor sin parmetros

public CCuentaCorriente(String nom, String cue, double sal,


double tipo, double imptrans, int transex)
{
super(nom, cue, sal, tipo); // invoca al constructor CCuenta
transacciones = 0; // inicia transacciones
asignarImportePorTrans(imptrans); // inicia importePorTrans
asignarTransExentas(transex); // inicia transExentas
}

Ing. Juan Antonio Flores Moroco 6


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
public CCuentaCorriente(final CCuentaCorriente cc)
{
super(cc);
}
public CCuentaCorriente copiar(final CCuentaCorriente cc)
{
super.copiar(cc);
return this;
}
public CCuentaCorriente clone()
{
return new CCuentaCorriente(this);
}
public void decrementarTransacciones()
{
transacciones--;
}
public boolean asignarImportePorTrans(double imptrans)
{
if (imptrans < 0)
{
System.out.println("Error: cantidad negativa");
return false;
}
importePorTrans = imptrans;
return imptrans >= 0;
}
public double obtenerImportePorTrans()
{
return importePorTrans;
}
public boolean asignarTransExentas(int transex)
{
if (transex < 0)
{
System.out.println("Error: cantidad negativa");
return false;
}
transExentas = transex;
return transex >= 0;
}
public int obtenerTransExentas()
{
return transExentas;
}
public boolean ingreso(double cantidad)
{
if (super.ingreso(cantidad))
{
transacciones++;
return true;
}
else
return false;
}
public void reintegro(double cantidad)
{
super.reintegro(cantidad);
transacciones++;
}
public void comisiones()
{
// Se aplican mensualmente por el mantenimiento de la cuenta
int[] fa = CFecha.obtenerFechaActual(); // da, mes y ao
if (fa[0] == 1)
{
int n = transacciones - transExentas;
if (n > 0) reintegro(n * importePorTrans);

Ing. Juan Antonio Flores Moroco 7


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
transacciones = 0;
}
}
public double intereses()
{
int[] fa = CFecha.obtenerFechaActual(); // da, mes y ao
if (fa[0] != 1) return 0.0;

// Acumular los intereses por mes slo los das 1 de cada mes
double interesesProducidos = 0.0;
// Hasta 3000 soles al 0.5%. El resto al inters establecido.
if (estado() <= 3000)
interesesProducidos = estado() * 0.5 / 1200.0;
else
{
interesesProducidos = 3000 * 0.5 / 1200.0 +
(estado() - 3000) * obtenerTipoDeInters() / 1200.0;
}
ingreso(interesesProducidos);
// Este ingreso no debe incrementar las transacciones
decrementarTransacciones();

// Devolver el inters mensual por si fuera necesario


return interesesProducidos;
}
}

c. Ahora tenemos que crear la subclase CCuentaCorrienteConIn (Cuenta Corriente con


Intereses) que Hereda de la clase CCuentaCorriente, para lo cual haga click derecho sobre
el package pcuenta ubicada en la parte izquierda superior del NetBeans, selecione la opcin
New, luego haga click en Java Class. El NetBeans le mostrar la Ventana New Java Class,
en la opcin Class Name coloque CCuentaCorrienteConIn, fijese que el archivo que se va
a crear pertenece al proyecto pCuenta y al Package pcuenta, luego haga click en Finish.

d. Copie el siguiente cdigo (Archivo: CCuentaCorrienteConIn.java):


package pcuenta;

// Clase CCuentaCorrienteConIn: clase derivada de CCuentaCorriente


public class CCuentaCorrienteConIn extends CCuentaCorriente
{
// Mtodos
public CCuentaCorrienteConIn() {} // constructor sin parmetros
public CCuentaCorrienteConIn(String nom, String cue, double sal,
double tipo, double imptrans, int transex)
{
// Invocar al constructor de la superclase
super(nom, cue, sal, tipo, imptrans, transex);
}
public CCuentaCorrienteConIn(final CCuentaCorrienteConIn cci)
{
super(cci);
}
public CCuentaCorrienteConIn copiar(final CCuentaCorrienteConIn cci)
{
super.copiar(cci);
return this;
}
public CCuentaCorrienteConIn clone()
{
return new CCuentaCorrienteConIn(this);
}
public double intereses()
{
int[] fa = CFecha.obtenerFechaActual(); // da, mes y ao

Ing. Juan Antonio Flores Moroco 8


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
if (fa[0] != 1 || estado() < 3000)
return 0.0;

// Acumular inters mensual slo los das 1 de cada mes


double interesesProducidos = 0.0;
interesesProducidos = estado() * obtenerTipoDeInters() / 1200.0;
ingreso(interesesProducidos);
// Este ingreso no debe incrementar las transacciones
decrementarTransacciones();
// Devolver el inters mensual por si fuera necesario
return interesesProducidos;
}
}

e. Modifique, agregue y ejecute el siguiente cdigo (Archivo: CCuentaMain.java):


package pcuenta;

public class CCuentaMain


{
public static void main(String[] args)
{
CCuentaAhorro cliente01 = new CCuentaAhorro("Cliente 01","1111111111",10000, 3.5, 1);

System.out.println(cliente01.obtenerNombre());
System.out.println(cliente01.obtenerCuenta());
System.out.println(cliente01.estado());
System.out.println(cliente01.obtenerTipoDeInters());
System.out.println(cliente01.intereses());

CCuentaCorrienteConIn cliente02 = new CCuentaCorrienteConIn();


cliente02.asignarNombre("cliente 02");
cliente02.asignarCuenta("1234567890");
cliente02.asignarTipoDeInters(3.0);
cliente02.asignarTransExentas(0);
cliente02.asignarImportePorTrans(1.0);

cliente02.ingreso(20000);
cliente02.reintegro(10000);
cliente02.intereses();
cliente02.comisiones();
System.out.println(cliente02.obtenerNombre());
System.out.println(cliente02.obtenerCuenta());
System.out.println(cliente02.estado()); }
}
Resultados:

f. Modifique y/o agregue y ejecute el siguiente cdigo (Archivo: CCuentaMain.java):


package pcuenta;

public class CCuentaMain


{
public static void main(String[] args)
{
ArrayList<CCuenta> cuenta = new ArrayList<CCuenta>();
//Crear Objetos y guardar sus referencias en la Matriz
cuenta.add(new CCuentaAhorro("Cliente00", "3467124589", 10000, 2.5, 0.90));
cuenta.add(new CCuentaCorriente("Cliente01", "2367124589", 10000, 1.5, 1.0, 6));
cuenta.add(new CCuentaCorrienteConIn("Cliente02", "3671462683", 10000, 3.5, 1.0, 6));

for(int i = 0; i < cuenta.size(); i++)


{
System.out.println(cuenta.get(i).obtenerNombre() + ": ");

Ing. Juan Antonio Flores Moroco 9


Universidad Nacional del Altiplano Puno
Escuela Profesional de Ingeniera de Sistemas
CURSO: TECNOLOGA DE DESARROLLO DE APLICACIONES
System.out.println(cuenta.get(i).intereses());
}
}
Resultados:

Ing. Juan Antonio Flores Moroco 10

Вам также может понравиться