Está en la página 1de 5

Prctica No.

9 Herencia y Polimorfismo
En esta prctica el proyecto estar organizado en clases relacionadas jerrquicamente y se complementar
con una interfaz para soportar el polimorfismo.
El modelo de clases se muestra en la figura 1:

Figura 1. Modelo de clases.

Metodologa.
1. Declarar la clase Figura, con los siguientes requisitos:
a) Es pblica y abstracta.
b) Con un atributo denominado nombre de tipo String.
c) El constructor recibe un String para asignarlo al atributo nombre.
d) Con los siguientes mtodos:
Signatura
acceso
tipo
Otras
Descripcin del contenido {}
caractersticas
area()
pblico
double
abstracto
permetro()
pblico
double
abstracto
menorQue(Figura figura) pblico
boolean final
Regresa el resultado de la
comparacin menor que (<)
del rea de la figura actual y el
rea de la figura que se recibe
en el argumento.
toString()
pblico
String
Final y
Devuelve una cadena con el
sobrecargado
texto: "Figura: " + nombre + "
Area=" + area()

2. Declarar la interfaz Dibujable, con las signaturas de los mtodos siguientes:


Nombre
acceso tipo
parmetros
setPosicin
pblico void
x, y de tipo double
dibujar
pblico void
dw de tipo Graphics

3. Declarar la subclase Rectngulo, que hereda de la clase Figura, con los siguientes elementos:

a) Variable privada, esttica, de tipo entero, denominada numRectngulos, inicializada en cero.


b) Atributos protegidos, de tipo double para las coordenadas correspondientes a las esquinas
opuestas que delimitan el rectngulo: x1, y1, x2, y2
c) Constructores:
El primero recibe cuatro parmetros para inicializar las coordenadas, primero invoca al
constructor de la clase base con super("Rectngulo"), luego inicializa las coordenadas y al
final incrementa la variable numRectngulos.
El segundo constructor no tiene parmetros (para hacer una construccin del objeto por
defecto) y hace una invocacin al constructor anterior con this(0, 0, 1.0, 1.0)
d) Mtodos:
Signatura
acceso
tipo
Otras
Descripcin del contenido {}
caractersticas
area()
pblico
double
Sobrecargado Devuelve el producto de la distancia entre los
puntos X y los puntos Y: (x1-x2)*(y1-y2)
Base * altura
permetro() pblico
double
sobrecargado
Devuelve dos veces la suma de la distancia
entre los puntos X y los puntos Y:
2.0 * ((x1-x2)+(y1-y2))
2 * base + altura
4. Declarar la subclase Crculo, que hereda de la clase Figura, con los siguientes elementos:
a) Variable esttica, de tipo entero, denominada numCrculos, inicializada en cero.
b) Constante esttica pblica de tipo double, denominada PI, con el valor 3.14159265
c) Atributos de tipo double x,y, radio.
d) Constructores:
El primero recibe tres parmetros para inicializar las coordenadas del centro del crculo y
el radio, primero invoca al constructor de la clase base con super("Crculo"), luego inicializa
las coordenadas y el radio, finalmente incrementa la variable numCrculos.
El segundo constructor recibe el radio como parmetro y hace una invocacin al
constructor anterior con el centro en el punto (0, 0) y el radio recibido en el parmetro.
El tercer constructor recibe un objeto denominado c de clase Crculo como parmetro y
hace una invocacin al constructor this con los mismos atributos del crculo c que se recibe
como parmetro.
El ltimo constructor no tiene parmetros (para hacer una construccin del objeto por
defecto) y hace una invocacin al constructor this(0, 0, 1.0)
e) Mtodos:
Signatura
acceso tipo
Otras
Descripcin del contenido {}
caractersticas
area()
pblico double Sobrecargado Calcula y devuelve el rea con la frmula
PI*radio*radio
permetro()
pblico double sobrecargado
Calcula y devuelve el permetro con la
frmula dimetro*PI, el dimetro es el doble
del radio.
elMayor(Crculo c) pblico Crculo
Devuelve la referencia del crculo con mayor
radio entre el crculo actual (this) y el que se
recibe como parmetro.
elMayor(Crculo c, pblico Crculo esttico
Devuelve la referencia del crculo con mayor
Crculo d)
radio de los parmetros recibidos, c y d.
5. Escribir clases similares a las anteriores para Cuadrado y Tringulo.
6. Escribir una aplicacin en la que se construyan diferentes figuras, calcular su rea, permetro,
comparar figuras y mostrar sus datos en una tabla.

7. Declarar la clase RectnguloGrfico como una extensin de la clase Rectngulo y con


implementacin de la interfaz Dibujable. Su contenido es el siguiente:
a) El atributo color de clase Color.
b) Un constructor con cinco parmetros para los cuatro valores de las coordenadas y el color. Primero se
invoca al constructor de la clase base con super (y las coordenadas: x1, y1, x2, y2), luego se asigna el
valor al atributo color.
c) Los mtodos declarados en la interfaz Dibujable (para implementarlos):
Signatura

acceso

tipo

setPosicin(double x, double y)

Otras
caractersticas
pblico void Sobrecargado

dibujar(Graphics dw)

pblico void sobrecargado

Descripcin del contenido {}


En esta clase, no tiene sentencias
{}
Asigna color al grfico dw con el
mtodo setColor(Color c) de la
clase Graphics.
Dibuja el rectngulo
correspondiente al objeto dw,
con el mtodo drawRect(int
x, int y, int width, int
height)

Con coercin (int) obtener los


enteros del punto inicial x1, y1 al
igual que la anchura= x2-x1 y la
altura=y2-y1
8. Declarar la clase CrculoGrfico como una extensin de la clase Crculo y con implementacin de la
interfaz Dibujable. Su contenido es el siguiente:
a) El atributo color de clase Color.
b) Un constructor con cuatro parmetros, dos para la coordenada del punto central (x, y), el radio y el
color. Primero se invoca al constructor de la clase base con super ( x, y, radio), luego se asigna el valor
al atributo color.
c) Los mtodos declarados en la interfaz Dibujable (para implementarlos):
Signatura

acceso

tipo

setPosicin(double x, double y)

Otras
caractersticas
pblico void Sobrecargado

dibujar(Graphics dw)

pblico void sobrecargado

Descripcin del contenido {}


En esta clase, no tiene sentencias
{}
Asigna color al grfico dw con el
mtodo setColor(Color c) de la
clase Graphics.
Dibuja el rectngulo
correspondiente al objeto dw,
con el mtodo drawOval(int
x, int y, int width, int
height)

Con coercin (int) obtener los


enteros del punto inicial x-radio,
y-radio, al igual que la anchura y
la altura que son el doble del
radio.

9. La siguiente clase que se construir es la clase PanelDibujo para que las figuras aparezcan dibujadas en
la pantalla. Esta clase es pblica y deriva de la clase Panel, que deriva de Container, que deriva de
Component, que deriva de Object.
Object: es la clase ms general de Java.
Component: comprende todos los objetos de Java que tienen representacin grfica tales como botones y
barras de desplazamiento.
Container: representa los objetos grficos del AWT (Abstract Windows Toolkit).
Panel: define los Container ms sencillos, capaces de contener otros elementos grficos y sobre la que se
puede dibujar.
AWT: Librera de clases de Java que permite crear interfaces grficas de usuario.
Sus elementos son los siguientes:
a) Atributo privado denominado v, para la lista de figuras dibujables. Este atributo ser un ArrayList.
La declaracin de un ArrayList tiene la siguiente sintaxis:
ArrayList <tipoDeElementos> variable ;
b) El constructor del panel, con el parmetro va de tipo ArrayList. El constructor invoca al constructor
de su clase base con super( new FlowLayout() ); luego, asigna el valor del argumento al atributo v.
c) Se sobrecarga el mtodo paint(). Este es un mtodo pblico que no devuelve datos, recibe como
parmetro la referencia a un objeto g de tipo Graphics.
Mediante un ciclo for each el mtodo dibuja cada figura guardada en el vector.
El ciclo for each, tiene la siguiente sintaxis:
for ( tipoDeElementosDelVector variable : vector) {
//sentencias que se repiten
// aqu se utiliza la variable que en cada iteracin
// hace referencia a cada elemento del vector
}
10. Agregar al proyecto la clase Ventana. Esta clase es pblica, implementa la interfaz WindowListener y
se deriva de Frame.
Contiene nicamente dos constructores:
a) El primero invoca al constructor de su clase Base, con super sin parmetros.
b) El segundo, recibe el ttulo de la ventana en parmetro de tipo String. El constructor invoca
inicialmente al constructor de la clase base, enviando el ttulo como argumento. Luego, establece
el tamao de la ventana de 500 x 500 pixeles, con el mtodo setSize(int weigth, int heigth).
Finalmente, se agrega el objeto actual (this) al conjunto de ventanas con
el mtodo
addWindowListener(this).

11. Escribir la aplicacin, en una clase denominada Ejemplo, y en el mtodo main().


Dentro del mtodo main() construye objetos con las diferentes clases que tenemos en la aplicacin. A
continuacin se proponen distintos ejemplos:
a) Declarar y construir figuras, fijando sus atributos:
Crculo c = new Crculo(2.0, 2.0, 4.0);
Crculo c1 = new Crculo(1.0, 1.0, 2.0);
Crculo c2 = new Crculo(0.0, 0.0, 3.0);

b) Puedes mostrar sus datos:


JOptionPane.showMessageDialog(null, "Radio= "+ c.radio+" unidades");
JOptionPane.showMessageDialog(null, "Centro= ("+c.x+ "," + c.y + ") unidades");
c) Asignar a una variable la referencia a una figura devuelta por un mtodo, dinmico:
c=c1.elMayor(c2);
y mostrar el resultado del mtodo:
JOptionPane.showMessageDialog(null, "El mayor radio es "+ c.radio);
d) Hacer lo anterior, usando el mtodo esttico:
c=Crculo.elMayor(c1, c2);
y mostrar el resultado:
JOptionPane.showMessageDialog(null, "El mayor radio es "+ c.radio);
e) Construir la ventana de trabajo:
Ventana ventana = new Ventana ("Ventana abierta...");
f)

En un vector guardar distintas figuras (crculos, rectngulos, )

Declarar y construir el vector:


ArrayList v = new ArrayList();
Construir las figuras grficas:
CrculoGrfico cg1=new CrculoGrfico(200, 200, 100, Color.red);
CrculoGrfico cg2=new CrculoGrfico(300, 200, 100, Color.blue);
RectnguloGrfico rg = new RectnguloGrfico(50, 50, 450, 350, Color.green);
Agregar las figuras construidas al vector:
v.add(cg1);
v.add(cg2);
v.add(rg);
Crear el panel con la ventana para dibujar las figuras:
PanelDibujo miPanel = new PanelDibujo(v);
ventana.add(miPanel);
ventana.setSize(500, 400);
ventana.setVisible(true);
g) Utiliza las clases de este proyecto para dibujar una serie de crculos concntricos.
h) Agrega clases nuevas para manejar otras figuras: cuadrados, tringulos, valos.
i) Utiliza las clases nuevas y las anteriores para hacer nuevos dibujos.

También podría gustarte