0% encontró este documento útil (0 votos)
88 vistas5 páginas

Herencia

1. Se describe una jerarquía de clases para representar distintos tipos de publicaciones, con una clase abstracta Publicación como raíz y subclases Libros y Papers. Se especifican los campos y constructores de cada clase. 2. Se implementan las clases abstracta Persona y sus subclases Hijo y Padre, con variables miembro y constructores específicos para cada una. 3. Se diseña una clase abstracta Figura con campos base y altura, y sus subclases Rectángulo y Triángulo. Se crean objetos de
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
88 vistas5 páginas

Herencia

1. Se describe una jerarquía de clases para representar distintos tipos de publicaciones, con una clase abstracta Publicación como raíz y subclases Libros y Papers. Se especifican los campos y constructores de cada clase. 2. Se implementan las clases abstracta Persona y sus subclases Hijo y Padre, con variables miembro y constructores específicos para cada una. 3. Se diseña una clase abstracta Figura con campos base y altura, y sus subclases Rectángulo y Triángulo. Se crean objetos de
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOC, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 5

Guía de ejercicios para la solemne número 3

1. Dada una jerarquía de clases que representa distintos tipos de publicaciones,


siendo la clase abstracta Publicación la raíz de la jerarquía, 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
podrán 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 número de personas
que se han creado. Los constructores de las clases Hijo y Padre deberán 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. Diseña una clase abstracta denominada Figura, cuyos miembros dato sean: base
y altura. Además del constructor y los métodos set (entregar los lados de la
figura) y get(mostrar los lados de la figura), la clase contará con un método
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 código, en el que se han eliminado los comentarios por


razones de espacio, y en el cual la expresión [...] simboliza código 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. ¿Es legal la última instrucción? ¿Por qué?
B. ¿Cuáles de las clases anteriores son abstractas?
C. ¿Es legal la sentencia v = new B()? ¿Por qué?
D. ¿Es legal la sentencia v = new C()? ¿Por qué?
E. Dada la sentencia de la pregunta anterior, ¿qué aparecerá por pantalla si después
se ejecuta v.f()?
F. ¿Qué métodos redefine B? ¿Y qué métodos redefine C?
G. Dada esa estructura de clases, ¿hay alguna forma de conseguir que mediante una
llamada se imprima por pantalla A.f? ¿Qué código escribirías para ello?
H. ¿Podría incluir en el código de la clase B algo como m\_x = 5? ¿Y en el de la
clase C?
5. Pretendemos diseñar una pequeña aplicación para administrar las cuentas de una
entidad bancaria. Sabiendo que las entidades financieras utilizan distintos tipos
de cuenta, la herencia puede ser una solución para reutilizar código. La idea es
diseñar una aplicación para administrar las cuentas corrientes y de ahorro de los
clientes de una entidad financiera. Como ambas cuentas tienen bastantes cosas
en común, hemos decidido agrupar éstas en una clase CCuenta de la cual
derivaremos las cuentas específicas que vayan surgiendo. Sería absurdo crear
objetos de CCuenta; más bien la intención es que se agrupe el código común
que heredarán sus subclases, razón por la cual la declararemos abstracta.
Pensemos entonces inicialmente en el diseño de la clase CCuenta. Después de
un análisis de los factores que intervienen en una cuenta en general, llegamos a
la conclusión de que los atributos y métodos comunes a cualquier tipo de cuenta
son los siguientes:

Atributo Significado
nombreTitular Dato de tipo String que almacena el nombre del titular de la
cuenta.
numCuenta Dato de tipo String que almacena el número de cuenta.
Saldo Dato de tipo double que almacena el saldo de la cuenta.
TipoDeInterés Dato de tipo double que almacena el tipo de interés.

Método Significado
CCuenta Es el constructor de la clase. Inicia los datos nombre, cuenta,
saldo y tipo de interés. Haciendo uso de los métodos de
asignación de atributos. Define también un constructor por
defecto sin código.
setNombre Permite asignar el nombre.
getNombre Retorna el nombre.
setCuenta Asigna el número de cuenta.
getCuenta Retorna el número de cuenta.
getSaldo Retorna el saldo de la cuenta.
comisiones Es un método abstracto sin parámetros que será redefinido en las
subclases.
ingreso Es un método que tiene un parámetro cantidad de tipo double que
añade la cantidad especificada al saldo actual de la cuenta.
reintegro Es un método que tiene un parámetro cantidad de tipo double que
resta la cantidad especificada del saldo actual de la cuenta.
setTipoInteres Asigna el tipo de interés.
getTipoInteres Retorna el tipo de interés
intereses Método abstracto. Calcula los intereses producidos

Además de los miembros heredados de la clase CCuenta, El diseño de la subclase


CCuentaAhorro es el siguiente:
Atributos Significado
cuotaMantenimiento Dato de tipo double que almacena la comisión que
cobrará la entidad bancaria por el mantenimiento de la
cuenta.

Método Significado
CCuentaAhorro Es el constructor de la clase. Inicia loa atributos de la
misma.
setCuotaManten Establece la cuota de mantenimiento de la cuenta
getCuotaManten Devuelve la cuota de mantenimiento.
comisiones Método que se ejecuta los días uno de cada mes para
cobrar el importe al mantenimiento de la cuenta.
intereses. Método que permite calcular el importe correspondiente a
los intereses mensuales producidos.

Acumulamos los intereses por mes sólo los días 1 de cada mes. Si el día no es primero
de mes retornamos 0.0. Una vez calculados los intereses, se ingresan en la cuenta.

Vamos a aumentar la jerarquía 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 añadiremos los siguientes:

Atributo Significado
transacciones Dato de tipo int que almacena el número de
transacciones efectuadas sobre esa cuenta.
importePorTrans Dato de tipo double que almacena el importe que la
entidad bancaria cobrará por cada transacción.
transExentas Dato de tipo int que almacena el número de
transacciones gratuitas.

Método Significado
CCuentaCorriente Constructor de la clase. Inicia sus datos miembro,
excepto transacciones que inicialmente vale 0.
decrementarTransacciones Decrementa en 1 el número de transacciones.
setImportePorTrans Establece el importe por transacción.
getImportePorTrans Devuelve el importe por transacción.
setTransExentas Establece el número de transacciones exentas.
getTransExentas Devuelve el número de transacciones exentas.
ingreso Añade la cantidad especificada al saldo actual de
la cuenta e incrementa el número de transacciones.
Dado que éste método se llama igual que otro
definido en la superclase CCuenta, para acceder al
método de la superclase y reutilizar su código
tendremos que utilizar la palabra reservada super.
Por ejemplo: super.ingreso(cantidad);
reintegro Resta la cantidad especificada del saldo actual de la
cuenta e incrementa el número de transacciones.
Actuaremos igual que en ingreso para reutilizar el
código de la superclase CCuenta.
comisiones Se ejecuta los días uno de cada mes para cobrar el
importe de las transacciones efectuadas que no
estén exentas y pone el número de transacciones a
cero.
intereses Se ejecuta los días uno de cada mes para calcular el
importe correspondiente a los intereses mensuales
producidos y añadirlos al saldo. Hasta 300.000
ptas. al 0.5%. El resto al interés establecido.
Retorna 0.0 para el resto de los días. Este ingreso
no debe incrementar las transacciones

Procediendo de forma similar a como lo hemos hecho para las clases CCuentaAhorro y
CCuentaCorriente, construimos a continuación 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
mínimo de 300.000 pesos. para que pueda acumular intereses. Según esto
CCuentaCorrienteIn, además de los miembros heredados, sólo precisa implementar sus
constructores y variar el método intereses:

Método Significado
CCuentaCorrienteConIn Constructor de la clase.
intereses Permite calcular el importe mensual correspondiente a los
intereses producidos. Precisa un saldo mínimo de 300.000
pesos.

Importante:
Una subclase que redefina un método heredado sólo tiene acceso a su propia versión y
a la publicada por su superclase directa. Por ejemplo, las clases CCuenta y
CCuentaCorriente incluyen cada una su versión del método ingreso; y la subclase
CCuentaCorrienteConIn hereda el método ingreso de CCuentaCorriente. Entonces,
CCuentaCorrientecConIn, además de su propia versión, sólo puede acceder a la versión de
su superclase directa por medio de la palabra super (en este caso ambas versiones son la
misma), pero no puede acceder a la versión de su superclase indirecta CCuenta (super.super
no es una expresión admitida por el compilador de Java).

También podría gustarte