You are on page 1of 5

Gua de ejercicios para la solemne nmero 3

1. Dada una jerarqua de clases que representa distintos tipos de publicaciones,


siendo la clase abstracta Publicacin la raz de la jerarqua, que contiene los
campos AUTOR, NOMBRE y NUMERO DE PAGINAS. Cree las subclases
Libros y Papers. En la clase Libros, se deber tener la variable COSTO, y no se
podrn crear subclases a partir de esta clase. En la clase Papers se deber tener la
variable congreso (STRING). Cree un constructor particular para la clase
PUBLICACION, la cual reciba los campos correspondientes a su clase y en las
otras dos clases cree el constructor correspondiente para que pueda llenar todas
las variables.
2. Implemente la clase abstracta denominada persona, la cual contenga las
variables miembros nombre, edad, sexo y contador. Luego implemente las
subclases Hijo y Padre, la cual deriven de persona. El constructor de la clase
persona, deber incrementar contador el cual contiene el nmero de personas
que se han creado. Los constructores de las clases Hijo y Padre debern llamar al
constructor de la clase padre para aumentar el contador, pero cada constructor
deber recibir los datos correspondientes para llenar las variables miembros de
cada clase. La clase HIJO tendr la variable miembro horasJuego mientras que
la clase padre tendr la variable miembro HorasTrabajo.
3. Disea una clase abstracta denominada Figura, cuyos miembros dato sean: base
y altura. Adems del constructor y los mtodos set (entregar los lados de la
figura) y get(mostrar los lados de la figura), la clase contar con un mtodo
abstracto que retorne el rea de una figura. Figura contiene dos subclases
denominadas Rectangulo y Triangulo. Defina estas dos subclases y declare dos
objetos de tipo Triangulo y Rectangulo y visualice en pantalla el rea de las
figuras.
4. Dado el siguiente cdigo, en el que se han eliminado los comentarios por
razones de espacio, y en el cual la expresin [...] simboliza cdigo que se ha
omitido:

class A {
protected int m_x;

public int VerX(){return m_x}


public void FijarX(int x) {
m_x = x;
}
public int f() {System.Out.println("A.f");}
public int k();
}
class B extends A {
public int f() {System.Out.println("B.f");}
public int g() {System.out.println("B.g");}
public int h() {System.out.println("B.h");}
}
class C extends B {
public int f() {System.Out.println("C.f");}
public int g() {System.out.println("C.g");}

public int k() {System.out.println("C.k");}


}
[...]
A v;
v = new A();

A.
B.
C.
D.
E.
F.
G.
H.
5.

Es legal la ltima instruccin? Por qu?


Cules de las clases anteriores son abstractas?
Es legal la sentencia v = new B()? Por qu?
Es legal la sentencia v = new C()? Por qu?
Dada la sentencia de la pregunta anterior, qu aparecer por pantalla si despus
se ejecuta v.f()?
Qu mtodos redefine B? Y qu mtodos redefine C?
Dada esa estructura de clases, hay alguna forma de conseguir que mediante una
llamada se imprima por pantalla A.f? Qu cdigo escribiras para ello?
Podra incluir en el cdigo de la clase B algo como m\_x = 5? Y en el de la
clase C?
Pretendemos disear una pequea aplicacin para administrar las cuentas de una
entidad bancaria. Sabiendo que las entidades financieras utilizan distintos tipos
de cuenta, la herencia puede ser una solucin para reutilizar cdigo. La idea es
disear una aplicacin para administrar las cuentas corrientes y de ahorro de los
clientes de una entidad financiera. Como ambas cuentas tienen bastantes cosas
en comn, hemos decidido agrupar stas en una clase CCuenta de la cual
derivaremos las cuentas especficas que vayan surgiendo. Sera absurdo crear
objetos de CCuenta; ms bien la intencin es que se agrupe el cdigo comn
que heredarn sus subclases, razn por la cual la declararemos abstracta.
Pensemos entonces inicialmente en el diseo de la clase CCuenta. Despus de
un anlisis de los factores que intervienen en una cuenta en general, llegamos a
la conclusin de que los atributos y mtodos comunes a cualquier tipo de cuenta
son los siguientes:

Atributo
nombreTitular
numCuenta
Saldo
TipoDeInters
Mtodo
CCuenta

setNombre
getNombre
setCuenta
getCuenta
getSaldo
comisiones

Significado
Dato de tipo String que almacena el nombre del titular de la
cuenta.
Dato de tipo String que almacena el nmero de cuenta.
Dato de tipo double que almacena el saldo de la cuenta.
Dato de tipo double que almacena el tipo de inters.
Significado
Es el constructor de la clase. Inicia los datos nombre, cuenta,
saldo y tipo de inters. Haciendo uso de los mtodos de
asignacin de atributos. Define tambin un constructor por
defecto sin cdigo.
Permite asignar el nombre.
Retorna el nombre.
Asigna el nmero de cuenta.
Retorna el nmero de cuenta.
Retorna el saldo de la cuenta.
Es un mtodo abstracto sin parmetros que ser redefinido en las
subclases.

ingreso
reintegro
setTipoInteres
getTipoInteres
intereses

Es un mtodo que tiene un parmetro cantidad de tipo double que


aade la cantidad especificada al saldo actual de la cuenta.
Es un mtodo que tiene un parmetro cantidad de tipo double que
resta la cantidad especificada del saldo actual de la cuenta.
Asigna el tipo de inters.
Retorna el tipo de inters
Mtodo abstracto. Calcula los intereses producidos

Adems de los miembros heredados de la clase CCuenta, El diseo de la subclase


CCuentaAhorro es el siguiente:
Atributos
Significado
cuotaMantenimiento
Dato de tipo double que almacena la comisin que
cobrar la entidad bancaria por el mantenimiento de la
cuenta.
Mtodo
CCuentaAhorro
setCuotaManten
getCuotaManten
comisiones
intereses.

Significado
Es el constructor de la clase. Inicia loa atributos de la
misma.
Establece la cuota de mantenimiento de la cuenta
Devuelve la cuota de mantenimiento.
Mtodo que se ejecuta los das uno de cada mes para
cobrar el importe al mantenimiento de la cuenta.
Mtodo que permite calcular el importe correspondiente a
los intereses mensuales producidos.

Acumulamos los intereses por mes slo los das 1 de cada mes. Si el da no es primero
de mes retornamos 0.0. Una vez calculados los intereses, se ingresan en la cuenta.
Vamos a aumentar la jerarqua de clases de la clase CCuenta, derivando una subclase
denominada CCcuentaCorriente de la clase abstracta CCuenta.
La clase CCuentaCorriente es una nueva clase que hereda de la clase CCuenta. Por lo
tanto, tendr todos los miembros de su superclase, a los que aadiremos los siguientes:
Atributo
transacciones
importePorTrans
transExentas

Significado
Dato de tipo int que almacena el nmero de
transacciones efectuadas sobre esa cuenta.
Dato de tipo double que almacena el importe que la
entidad bancaria cobrar por cada transaccin.
Dato de tipo int que almacena el nmero de
transacciones gratuitas.

Mtodo

Significado

CCuentaCorriente

Constructor de la clase. Inicia sus datos miembro,


excepto transacciones que inicialmente vale 0.
Decrementa en 1 el nmero de transacciones.
Establece el importe por transaccin.
Devuelve el importe por transaccin.

decrementarTransacciones
setImportePorTrans
getImportePorTrans

setTransExentas
getTransExentas
ingreso

reintegro

comisiones

intereses

Establece el nmero de transacciones exentas.


Devuelve el nmero de transacciones exentas.
Aade la cantidad especificada al saldo actual de
la cuenta e incrementa el nmero de transacciones.
Dado que ste mtodo se llama igual que otro
definido en la superclase CCuenta, para acceder al
mtodo de la superclase y reutilizar su cdigo
tendremos que utilizar la palabra reservada super.
Por ejemplo: super.ingreso(cantidad);
Resta la cantidad especificada del saldo actual de la
cuenta e incrementa el nmero de transacciones.
Actuaremos igual que en ingreso para reutilizar el
cdigo de la superclase CCuenta.
Se ejecuta los das uno de cada mes para cobrar el
importe de las transacciones efectuadas que no
estn exentas y pone el nmero de transacciones a
cero.
Se ejecuta los das uno de cada mes para calcular el
importe correspondiente a los intereses mensuales
producidos y aadirlos al saldo. Hasta 300.000
ptas. al 0.5%. El resto al inters establecido.
Retorna 0.0 para el resto de los das. Este ingreso
no debe incrementar las transacciones

Procediendo de forma similar a como lo hemos hecho para las clases CCuentaAhorro y
CCuentaCorriente, construimos a continuacin la clase CCuentaCorrienteConIn
(cuenta corriente con intereses) derivada de CCuentaCorriente.
Supongamos que este tipo de cuenta se ha pensado para que acumule intereses de forma
distinta a los otros tipos de cuenta, pero para obtener una rentabilidad mayor respecto a
CCuentaCorriente.
Digamos que se trata de una cuenta de tipo CCuentaCorriente que precisa un saldo
mnimo de 300.000 pesos. para que pueda acumular intereses. Segn esto
CCuentaCorrienteIn, adems de los miembros heredados, slo precisa implementar sus
constructores y variar el mtodo intereses:
Mtodo
CCuentaCorrienteConIn
intereses

Significado
Constructor de la clase.
Permite calcular el importe mensual correspondiente a los
intereses producidos. Precisa un saldo mnimo de 300.000
pesos.

Importante:
Una subclase que redefina un mtodo heredado slo tiene acceso a su propia versin y
a la publicada por su superclase directa. Por ejemplo, las clases CCuenta y
CCuentaCorriente incluyen cada una su versin del mtodo ingreso; y la subclase
CCuentaCorrienteConIn hereda el mtodo ingreso de CCuentaCorriente. Entonces,
CCuentaCorrientecConIn, adems de su propia versin, slo puede acceder a la versin de

su superclase directa por medio de la palabra super (en este caso ambas versiones son la
misma), pero no puede acceder a la versin de su superclase indirecta CCuenta (super.super
no es una expresin admitida por el compilador de Java).