Está en la página 1de 14

EJERCICIO GUIADO. JAVA: POO.

HERENCIA
Concepto de Herencia
El concepto de Herencia consiste en crear una nueva Clase a partir de otra. La nueva Clase es una
mejora de la anterior. O dicho de otra manera, es una especializacin de la primera Clase.
Concretamente, la Herencia consiste en tomar una Clase inicial, y, a partir de ella, crear otra Clase
que posee las mismas propiedades y mtodos que la Clase inicial, adems de unas nuevas
propiedades y mtodos que la Clase inicial no posea. La nueva Clase creada puede incluso redefinir
mtodos de la Clase inicial.

CLASE BASE
Herencia

CLASE
DERIVADA
La Clase inicial se denomina Clase Base, la Clase creada a partir de la clase base se denomina Clase
Derivada. La Clase Derivada contiene propiedades y mtodos de la Clase Base ms unas
propiedades y mtodos aadidos.
La Herencia es una tcnica muy til que nos permite reutilizar cdigo, es decir, que nos permite usar
de nuevo lo que ya tenamos programado aadiendo simplemente algunos cambios adecuar el cdigo
al proyecto actual.
La Herencia se puede aplicar tanto a Clases Propias, como a Clases propias del lenguaje de
programacin Java.
En esta explicacin guiada, veremos un ejemplo de uso de la Herencia con clases propias del
lenguaje Java.

EJERCICIO GUIADO
Planteamiento Inicial
Botones Contadores
Supongamos que en los proyectos cotidianos se plantea la necesidad de usar botones que guarden el
nmero de veces que son pulsados. Estos botones funcionaran exactamente igual que los botones
normales (JButton) y tendran su mismo aspecto, pero sera interesante que adems tuvieran los
siguientes mtodos:
Mtodo setPulsaciones.
Permitir asignar un nmero de pulsaciones al botn.
btnContar.setPulsaciones(3);
//Se asignan 3 pulsaciones al botn btnContar
Mtodo getPulsaciones.
Permitir saber cuantas pulsaciones tiene un botn.
int p = btnContar.getPulsaciones(3);
//Se recoge el nmero de pulsaciones del botn btnContar
//en la variable p
Mtodo incrementa.
Permite incrementar en uno las pulsaciones que tiene un botn.
btnContar.incrementa();
//Incrementa en uno las pulsaciones del botn btnContar
Mtodo decrementa.
Permite decrementar en uno las pulsaciones que tiene un botn
btnContar.decrementa();
//Decrementa en uno las pulsaciones del botn btnContar
Mtodo reiniciar.
Permite colocar las pulsaciones de un botn a cero.
btnContar.reiniciar();
//Sita a cero las pulsaciones del botn btnContar
Mtodo aumentar.
Permite aumentar en una determinada cantidad las pulsaciones del botn.
btnContar.aumentar(4);
//Aumenta en cuatro las pulsaciones del botn btnContar
Mtodo disminuir.
Permite disminuir en una determinada cantidad las pulsaciones del botn.
btnContar.disminuir(6);
//Disminuye en 6 las pulsaciones del botn btnContar
Los botones de este tipo tendran una propiedad llamada pulsaciones de tipo entera que se
inicializara a cero en el momento de construir el botn.

Desgraciadamente no existe un botn de este tipo en Java, as que no podemos acudir a la


ventana de diseo y aadir un botn como este.
Una posibilidad sera la de programar la clase correspondiente a un botn de este tipo desde cero,
pero esto es un trabajo tremendamente complejo.
La solucin a este problema es la Herencia. Bsicamente, lo que necesitamos es mejorar la Clase
JButton, la cual define botones normales y corrientes, de forma que estos botones admitan tambin
los mtodos indicados antes.
La idea es crear una nueva clase a partir de la clase JButton. A esta nueva clase la llamaremos
BotonContador y haremos que herede de la clase JButton. Por tanto, la clase BotonContador tendr
todas las caractersticas de los JButton y adems le aadiremos los mtodos mencionados antes.

JButton
Herencia

BotonContador

Gracias a la herencia, nuestra clase BotonContador poseer todos los mtodos de los JButton
(setText, getText, setForeground, setToolTipText, etc.) sin que tengamos que programar estos
mtodos.
Por otro lado, aadiremos a la clase BotonContador nuestros propios mtodos (setPulsaciones,
getPulsaciones, etc) y propiedades para que la clase est preparada para nuestras necesidades.
Resumiendo: programaremos un botn propio, con caractersticas necesarias para nuestro trabajo,
aprovechando las caractersticas de un botn JButton.

Programacin de la Clase BotonContador


Creacin de la clase derivada
La programacin de la clase derivada BotonContador se har en un fichero aparte, al igual que la
programacin de las clases de creacin propia.
Se comenzar definiendo el comienzo de la clase y aadiendo las llaves que limitan su contenido:
public class BotonContador extends JButton {
}
Observa el cdigo aadido: extends JButton antes de la llave de apertura. Este es el cdigo que
le permite indicar a Java que nuestra clase BotonContador derivar de la clase JButton.

Creacin de las propiedades de la clase derivada


La clase BotonContador es una clase derivada de la clase JButton, y tendr las mismas propiedades
que la clase JButton, pero a nosostros nos interesa aadir nuestras propias propiedades. En nuestro
caso, necesitaremos una variable que contenga el nmero de pulsaciones del botn en todo
momento.
public class BotonContador extends JButton {
int pulsaciones;
}
Inicializacin de las propiedades de la clase derivada
Nuestra propiedad pulsaciones debe ser inicializada en el constructor de la clase. Para ello crea el
constructor de la clase:
public class BotonContador extends JButton {
int pulsaciones;
public BotonContador() {
pulsaciones=0;
}
}
Aadir mtodos propios a la clase derivada
Se aadirn los nuevos mtodos que queremos que la clase BotonContador posea. Estos son los
siguientes:
setPulsaciones
getPulsaciones
incrementa
decrementa
reiniciar
aumentar
disminuir

- asigna un nmero de pulsaciones al botn.


- devuelve el nmero de pulsaciones del botn.
- suma uno a las pulsaciones del botn
- resta uno a las pulsaciones del botn
- pone a cero las pulsaciones del botn
- aumenta en una cantidad las pulsaciones del botn.
- disminuye en una cantidad las pulsaciones del botn.

Estos mtodos trabajan con la propiedad pulsaciones. Una vez programados estos mtodos, la clase
quedar de la siguiente forma (observa la programacin de los distintos mtodos para entenderlos):

public class BotonContador extends JButton {


//propiedades
int pulsaciones;
//constructor
public BotonContador() {
pulsaciones=0;
}
//mtodos
//asigna una cantidad de pulsaciones
public void setPulsaciones(int p) {
pulsaciones=p;
}
//devuelve las pulsaciones del botn
public int getPulsaciones() {
return pulsaciones;
}
//incrementa en uno las pulsaciones
public void incrementa() {
pulsaciones++;
}
//decrementa en uno las pulsaciones
public void decrementa() {
pulsaciones--;
}
//pone las pulsaciones a cero
public void reiniciar() {
pulsaciones=0;
}
//aumenta las pulsaciones en una cantidad c
public void aumenta(int c) {
pulsaciones=pulsaciones+c;
}
//disminuye las pulsaciones en una cantidad c
public void disminuye(int c) {
pulsaciones=pulsaciones-c;
}
}

Como has podido observar, la creacin de una clase heredada es exactamente igual que la creacin
de una clase propia. La nica diferencia es que hacemos que dicha clase herede de otra clase ya
existente, dndole ms posibilidades sin necesidad de programar nada:
public class BotonContador extends JButton {

Uso de la clase BotonContador


Usaremos la clase BotonContador en un simple proyecto de prueba para que puedas observar sus
posibilidades.
Para ello, sigue los pasos que se indican a continuacin:

1. Crea un proyecto llamado Contadores, que tenga un paquete principal llamado


paqueteprincipal y un JFrame llamado ventanaprincipal:

2. Aadiremos la Clase BotonContador. Para ello debes hacer clic con el botn derecho sobre el
paqueteprincipal y activar la opcin Nuevo Clase Java. El nombre de la clase es
BotonContador:

3. Antes de empezar con el diseo de la ventana principal programa la clase BotonContador.


Debes hacer doble clic sobre el fichero BotonContador.java e introducir en l la clase
BotonContador que hemos diseado anteriormente usando herencia.
El fichero BotonContador.java debera quedar as:

/*
* BotonContador.java
*
* Created on 6 de agosto de 2007, 10:59
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package paqueteprincipal;
import javax.swing.JButton;
/**
*
* @author didact
*/
public class BotonContador extends JButton {
//propiedades
int pulsaciones;
//constructor
public BotonContador() {
pulsaciones=0;
}
//asigna una cantidad de pulsaciones
public void setPulsaciones(int p) {
pulsaciones=p;
}
//devuelve las pulsaciones del botn
public int getPulsaciones() {
return pulsaciones;
}
//incrementa en uno las pulsaciones
public void incrementa() {
pulsaciones++;
}
//decrementa en uno las pulsaciones
public void decrementa() {
pulsaciones--;
}
//pone las pulsaciones a cero
public void reiniciar() {
pulsaciones=0;
}
//aumenta las pulsaciones en una cantidad c
public void aumenta(int c) {
pulsaciones=pulsaciones+c;
}

//disminuye las pulsaciones en una cantidad c


public void disminuye(int c) {
pulsaciones=pulsaciones-c;
}

4. Ahora programaremos el diseo de la ventana. Lo haremos desde cdigo. Entra en el mdulo


ventanaprincipal.java y pasa a la zona de cdigo:

5. En la zona de cdigo programaremos el tpico mtodo CreacionVentana, llamado desde el


constructor, donde se programar el diseo de la ventana:

6. Nuestro programa tendr dos botones del tipo BotonContador. Declara estos botones como
variables globales de la clase:

7. En el mtodo CreacionVentana definiremos caractersticas de la ventana y construiremos


estos botones y los situaremos en la ventana:

8. Como puedes ver, los botones contadores se construyen igual que los JButton, y, de hecho,
tienen los mismos mtodos que los JButton, ya que derivan de ellos. As pues, un botn
contador tiene un mtodo setText, setBounds, etc
9. Ejecuta el programa y observa el resultado. Vers que en la ventana aparecen los dos
botones contadores, sin embargo, observars que tienen el mismo aspecto que los JButton.
Se vuelve a insistir que esto es debido a que la clase BotonContador deriva de la clase
JButton.

10. Ahora se aadir un actionPerformed a cada botn contador, para controlar sus pulsaciones.
Aade al final de CreacionVentana el siguiente cdigo ya conocido, para la asignacin de
eventos actionPerformed a los botones:

11. Se tendrn que programar los procedimientos de respuesta a los eventos, que aqu se han
llamado PulsacionBotonA y PulsacionBotonB. Progrmalos (fuera de CreacionVentana, claro
est) de la siguiente forma:

12. Cada vez que se pulse el botn A, debera aumentar su contador interno de pulsaciones en
uno. Lo mismo debera pasar con el botn B. Esto se hace fcilmente usando el mtodo
incrementa, propio de los botones contadores:

13. Resumiendo, cada vez que se pulsa el botn A, se le da la orden al botn A de que se
incremente su contador interno. Lo mismo sucede con el botn B.
14. Ahora programaremos dos botones ms en la ventana, pero estos sern botones normales y
los crearemos desde la ventana de diseo, para facilitar la tarea. Estos botones se llamarn
btnVerPulsaciones y btnReiniciar.

15. Cuando se pulse el botn Ver Pulsaciones debera aparecer un JOptionPane indicando
cuantas veces se ha pulsado el botn A y cuantas el B. Esto se har simplemente pidiendo a
cada botn su nmero de pulsaciones almacenadas.
Accede al actionPerformed del botn Ver Pulsaciones y programa lo siguiente:

En este botn le pedimos al Botn A que nos diga cuantas pulsaciones tiene anotadas (a
travs del mtodo getPulsaciones) y lo mismo hacemos con el Botn B. Esto es posible ya
que ambos botones son del tipo BotonContador, la clase heredada que hemos programado.
16. Ejecuta el programa y prueba lo siguiente:
-

Pulsa varias veces el botn A y el B. Vers que no sucede nada (aunque internamente cada
uno de los botones est guardando el nmero de pulsaciones en su propiedad pulsaciones)

Pulsa ahora el botn Ver Pulsaciones y comprobars como este botn te muestra las veces
que pulsaste cada botn.

Pulsa los botones varias


veces

y luego pulsa el botn


Ver Pulsaciones.
Aparecer un JOptionPane
informando sobre las
pulsaciones realizadas.

17. Ahora programaremos el botn Reiniciar de forma que los contadores internos de ambos
botones A y B se pongan a cero.
18. Accede al actionPerformed del botn Reiniciar y programa lo siguiente:

19. Puedes comprobar el funcionamiento de este botn ejecutando el programa y pulsando varias
veces los botones A y B. Luego mira las pulsaciones almacenadas en ambos botones. Pulsa
el botn Reiniciar y comprueba las pulsaciones de nuevo. Deberan ser cero en ambos
botones.

Despus de pulsar los


botones A y B
si se pulsa el botn
Reiniciar
al ver las pulsaciones,
estas deben ser cero

EJERCICIO
Se propone al alumno que aada las siguientes modificaciones al programa:
-

Aade desde cdigo un nuevo botn Botn C (de tipo BotonContador) que al pulsarse
aumente su nmero de pulsaciones interno en 2 (usa el mtodo aumentar propio de la clase
BotonContador).

Cuando se pulse el botn Ver Pulsaciones tambin debera verse el nmero de pulsaciones
del botn C.

Cuando se pulse Reiniciar, el nmero de pulsaciones del Botn C debera situarse a cero
tambin.

Aade desde diseo un cuadro de texto y un botn normal (JButton) llamado Iniciar. En el
cuadro de texto se introducir un nmero, y al pulsar el botn Iniciar, los valores internos de
los tres botones A, B y C se inicializarn al nmero introducido:

Se introduce un nmero
Y al pulsar iniciar, los
contadores internos de los
botones se inicializan al
valor introducido

CONCLUSIN
La Herencia consiste en crear una clase que obtenga todas las caractersticas de otra.
Esta clase a su vez tendr tambin caractersticas propias.
La clase inicial se denomina clase Base y la clase nueva creada a partir de la clase
base se llama clase Derivada:

CLASE BASE
Herencia

CLASE
DERIVADA

Se puede hacer que una clase de creacin propia derive o herede de otra ya existente
aadiendo:
extends NombreClaseBase
en la lnea de creacin de la clase.
La clase creada as obtendr caractersticas de la clase de la que hereda.
Aparte, esta clase tendr mtodos propios aadidos por el programador.

También podría gustarte