31_HERENCIA

download 31_HERENCIA

of 14

Transcript of 31_HERENCIA

  • 8/13/2019 31_HERENCIA

    1/14

    Curso de Java Avanzado

    http://procesinc.com/

    EJERCICIO GUIADO. JAVA AVANZADO: POO. HERENCIA

    Concepto de Herencia

    El concepto de Herencia consiste en crear una nueva Clase a partir de otra. La nueva Clase es una

    mejorade la anterior. O dicho de otra manera, es una especializacinde la primera Clase.

    Concretamente, la Herencia consiste en tomar una Clase inicial, y, a partir de ella, crear otra Claseque posee las mismas propiedades y mtodos que la Clase inicial, adems de unas nuevaspropiedades y mtodos que la Clase inicial no posea. La nueva Clase creada puede incluso redefinirmtodos de la Clase inicial.

    La Clase inicial se denomina Clase Base, la Clase creada a partir de la clase base se denomina ClaseDerivada. La Clase Derivadacontiene propiedades y mtodos de la Clase Basems unaspropiedades y mtodos aadidos.

    La Herencia es una tcnica muy til que nos permite reutilizar cdigo, es decir, que nos permite usarde 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 deprogramacin Java.

    En esta explicacin guiada, veremos un ejemplo de uso de la Herencia con clases propias dellenguaje Java.

    CLASE BASE

    CLASEDERIVADA

    Herencia

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    2/14

    Curso de Java Avanzado

    http://procesinc.com/

    EJERCICIO GUIADO

    Planteamiento Inicial

    Botones Contadores

    Supongamos que en los proyectos cotidianos se plantea la necesidad de usar botones que guarden elnmero de veces que son pulsados. Estos botones funcionaran exactamente igual que los botonesnormales (JButton) y tendran su mismo aspecto, pero sera interesante que adems tuvieran lossiguientes 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 llamadapulsacionesde tipo entera que seinicializara a cero en el momento de construir el botn.

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    3/14

  • 8/13/2019 31_HERENCIA

    4/14

    Curso de Java Avanzado

    http://procesinc.com/

    Creacin de las propiedades de la clase derivada

    La clase BotonContadores una clase derivada de la clase JButton, y tendr las mismas propiedadesque la clase JButton, pero a nosostros nos interesa aadir nuestras propias propiedades. En nuestrocaso, necesitaremos una variable que contenga el nmero de pulsaciones del botn en todomomento.

    public class BotonContador extends JButton {

    int pulsaciones;

    }

    Inicializacin de las propiedades de la clase derivada

    Nuestra propiedadpulsacionesdebe ser inicializada en el constructor de la clase. Para ello crea elconstructor 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 lossiguientes:

    setPulsaciones - asigna un nmero de pulsaciones al botn.getPulsaciones - devuelve el nmero de pulsaciones del botn.incrementa - suma uno a las pulsaciones del botndecrementa - resta uno a las pulsaciones del botnreiniciar - pone a cero las pulsaciones del botnaumentar - aumenta en una cantidad las pulsaciones del botn.disminuir - disminuye en una cantidad las pulsaciones del botn.

    Estos mtodos trabajan con la propiedadpulsaciones. Una vez programados estos mtodos, la clasequedar de la siguiente forma (observa la programacin de los distintos mtodos para entenderlos):

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    5/14

    Curso de Java Avanzado

    http://procesinc.com/

    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 creacinde una clase propia. La nica diferencia es que hacemos que dicha clase herede de otra clase yaexistente, dndole ms posibilidades sin necesidad de programar nada:

    public class BotonContador extends JButton {

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    6/14

    Curso de Java Avanzado

    http://procesinc.com/

    Uso de la clase BotonContador

    Usaremos la clase BotonContador en un simple proyecto de prueba para que puedas observar susposibilidades.

    Para ello, sigue los pasos que se indican a continuacin:

    1. Crea un proyecto llamado Contadores, que tenga un paquete principal llamadopaqueteprincipaly un JFrame llamado ventanaprincipal:

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

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

    Debes hacer doble clic sobre el fichero BotonContador.javae introducir en l la claseBotonContador que hemos diseado anteriormente usando herencia.

    El fichero BotonContador.javadebera quedar as:

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    7/14

    Curso de Java Avanzado

    http://procesinc.com/

    /*

    * 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 ceropublic 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;

    }}

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    8/14

    Curso de Java Avanzado

    http://procesinc.com/

    4. Ahora programaremos el diseo de la ventana. Lo haremos desde cdigo. Entra en el mduloventanaprincipal.javay pasa a la zona de cdigo:

    5. En la zona de cdigo programaremos el tpico mtodo CreacionVentana, llamado desde elconstructor, donde se programar el diseo de la ventana:

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

    7. En el mtodo CreacionVentanadefiniremos caractersticas de la ventana y construiremosestos botones y los situaremos en la ventana:

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    9/14

    Curso de Java Avanzado

    http://procesinc.com/

    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 botncontador tiene un mtodo setText, setBounds, etc

    9. Ejecuta el programa y observa el resultado. Vers que en la ventana aparecen los dosbotones 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 claseJButton.

    10. Ahora se aadir un actionPerformeda cada botn contador, para controlar sus pulsaciones.Aade al final de CreacionVentanael siguiente cdigo ya conocido, para la asignacin deeventos actionPerformeda los botones:

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    10/14

    Curso de Java Avanzado

    http://procesinc.com/

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

    12. Cada vez que se pulse el botn A, debera aumentar su contador interno de pulsaciones enuno. Lo mismo debera pasar con el botn B. Esto se hace fcilmente usando el mtodoincrementa, 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 seincremente su contador interno. Lo mismo sucede con el botn B.

    14. Ahora programaremos dos botones ms en la ventana, pero estos sern botones normales ylos crearemos desde la ventana de diseo, para facilitar la tarea. Estos botones se llamarnbtnVerPulsacionesy btnReiniciar.

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    11/14

    Curso de Java Avanzado

    http://procesinc.com/

    15. Cuando se pulse el botn Ver Pulsacionesdebera aparecer un JOptionPane indicando

    cuantas veces se ha pulsado el botn A y cuantas el B. Esto se har simplemente pidiendo acada botn su nmero de pulsaciones almacenadas.

    Accede al actionPerformeddel botn Ver Pulsacionesy programa lo siguiente:

    En este botn le pedimos al Botn A que nos diga cuantas pulsaciones tiene anotadas (atravs del mtodo getPulsaciones) y lo mismo hacemos con el Botn B. Esto es posible yaque 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 cadauno de los botones est guardando el nmero de pulsaciones en su propiedadpulsaciones)

    - Pulsa ahora el botn Ver Pulsacionesy comprobars como este botn te muestra las vecesque pulsaste cada botn.

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    12/14

    Curso de Java Avanzado

    http://procesinc.com/

    17. Ahora programaremos el botn Reiniciarde forma que los contadores internos de ambosbotones A y B se pongan a cero.

    18. Accede al actionPerformeddel botn Reiniciar y programa lo siguiente:

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

    botones.

    Pulsa los botones variasveces

    y luego pulsa el botnVer Pulsaciones.

    Aparecer un JOptionPaneinformando sobre laspulsaciones realizadas.

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    13/14

    Curso de Java Avanzado

    http://procesinc.com/

    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 pulsarseaumente su nmero de pulsaciones interno en 2 (usa el mtodo aumentarpropio de la claseBotonContador).

    - Cuando se pulse el botn Ver Pulsacionestambin debera verse el nmero de pulsacionesdel botn C.

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

    - Aade desde diseo un cuadro de texto y un botn normal (JButton) llamado Iniciar. En elcuadro 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:

    Despus de pulsar losbotones A y B

    si se pulsa el botnReiniciar

    al ver las pulsaciones,estas deben ser cero

    Se introduce un nmero

    Y al pulsar iniciar, loscontadores internos de losbotones se inicializan alvalor introducido

    http://procesinc.com/http://procesinc.com/http://procesinc.com/
  • 8/13/2019 31_HERENCIA

    14/14

    Curso de Java Avanzado

    http://procesinc.com/

    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 clasebase se llama clase Derivada:

    Se puede hacer que una clase de creacin propiaderiveo heredede otra ya existenteaadiendo:

    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.

    CLASE BASE

    CLASEDERIVADA

    Herencia

    http://procesinc.com/http://procesinc.com/http://procesinc.com/