miércoles, 15 de junio de 2016

032.- POO - Herencia de Clases - Java y NetBeans

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 especialización 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 métodos que la Clase inicial, además de unas nuevas propiedades y métodos que la Clase inicial no poseía. La nueva Clase creada puede incluso redefinir métodos de la Clase inicial.




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 métodos de la Clase Base más unas propiedades y métodos añadidos.


La Herencia es una técnica muy útil que nos permite reutilizar código, es decir, que nos permite usar de nuevo lo que ya teníamos programado añadiendo simplemente algunos cambios y adecuar el código al proyecto actual.

La Herencia se puede aplicar tanto a Clases Propias, como a Clases propias del lenguaje de programación Java.


En esta explicación guiada, veremos un ejemplo de uso de la Herencia con clases propias del lenguaje Java.



Planteamiento Inicial


“Botones Contadores”

Supongamos que en los proyectos cotidianos se plantea la necesidad de usar botones que guarden el número de veces que son pulsados. Estos botones funcionarían exactamente igual que los botones normales (JButton) y tendrían su mismo aspecto, pero sería interesante que además tuvieran los siguientes métodos:


Método setPulsaciones:
Permitirá asignar un número de pulsaciones al botón.

btnContador.setPulsaciones(3);
//Se asignan 3 pulsaciones al botón btnContador



Método getPulsaciones:
Permitirá saber cuántas pulsaciones tiene un botón.

int p = btnContador.getPulsaciones();
//Se recoge el número de pulsaciones del botón btnContador
//en la variable p



Método incrementarUno:
Permite incrementar en uno las pulsaciones que tiene un botón.

btnContador.incrementarUno();
//Incrementa en uno las pulsaciones del botón btnContador



Método decrementarUno:
Permite decrementar en uno las pulsaciones que tiene un botón.

btnContador.decrementarUno();
//Decrementa en uno las pulsaciones del botón btnContador



Método reiniciar:
Permite colocar las pulsaciones de un botón a cero.

btnContador.reiniciar();
//Sitúa a cero las pulsaciones del botón btnContador



Método incrementarVarios:
Permite aumentar en una determinada cantidad las pulsaciones del botón.

btnContador.incrementarVarios(4);
//Aumenta en cuatro las pulsaciones del botón btnContador



Método decrementarVarios:
Permite disminuir en una determinada cantidad las pulsaciones del botón.

btnContador.decrementarVarios(6);
//Disminuye en 6 las pulsaciones del botón btnContador




Los botones de este tipo tendrían una propiedad llamada pulsaciones de tipo entera que se inicializaría a cero en el momento de construir el botón.

Desgraciadamente no existe un botón de este tipo en Java, así que no podemos acudir a la ventana de diseño y añadir un botón como este.

Una posibilidad sería la de programar la clase correspondiente a un botón de este tipo desde cero, pero esto es un trabajo tremendamente complejo.

La solución a este problema es la Herencia. Básicamente, lo que necesitamos es mejorar la Clase JButton, la cual define botones normales y corrientes, de forma que estos botones admitan también los métodos 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 características de los JButton y además le añadiremos los métodos mencionados antes.




Gracias a la herencia, nuestra clase BotonContador poseerá todos los métodos de los JButton (setText, getText, setForeground, setToolTipText, etc.) sin que tengamos que programar estos métodos.

Por otro lado, añadiremos a la clase BotonContador nuestros propios métodos (setPulsaciones, getPulsaciones, etc) y propiedades para que la clase esté preparada para nuestras necesidades.

Resumiendo: programaremos un botón propio, con características necesarias para nuestro trabajo, aprovechando las características de un botón JButton.




Programación de la Clase BotonContador:


Creación de la clase derivada:
La programación de la clase derivada BotonContador se hará en un fichero aparte, al igual que la programación de las clases de creación propia.

Se comenzará definiendo el comienzo de la clase y añadiendo las llaves que limitan su contenido:


public class BotonContador extends JButton {


}



Observa el código añadido: extends JButton antes de la llave de apertura. Este es el código que le permite indicar a Java que nuestra clase BotonContador derivará de la clase JButton.





Creación 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 nosotros nos interesa añadir nuestras propias propiedades. En nuestro caso, necesitaremos una variable que contenga el número de pulsaciones del botón en todo momento.


public class BotonContador extends JButton {

     int pulsaciones;


}




Inicialización 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;
     }

}




Añadir métodos propios a la clase derivada:
Se añadirán los nuevos métodos que queremos que la clase BotonContador posea. Estos son los siguientes:

setPulsaciones               - asigna un número de pulsaciones al botón.
getPulsaciones               - devuelve el número de pulsaciones del botón.
incrementarUno             - suma uno a las pulsaciones del botón
decrementarUno            - resta uno a las pulsaciones del botón
reiniciar                      - pone a cero las pulsaciones del botón
incrementarVarios - suma una cantidad las pulsaciones del botón.
decrementarVarios         - resta una cantidad las pulsaciones del botón.


Estos métodos trabajan con la propiedad pulsaciones. Una vez programados estos métodos, la clase quedará de la siguiente forma (observa la programación de los distintos métodos para entenderlos):


public class BotonContador extends JButton {

//propiedades
     int pulsaciones;

          //constructor
     public BotonContador() {
          pulsaciones = 0;
     }

          //métodos

          //asigna una cantidad de pulsaciones
     public void setPulsaciones(int p) {
          pulsaciones = p;
     }

          //devuelve las pulsaciones del botón
     public int getPulsaciones() {
          return pulsaciones;
     }

          //incrementa en uno las pulsaciones
     public void incrementarUno() {
          pulsaciones++;
     }

          //decrementa en uno las pulsaciones
     public void decrementarUno() {
          pulsaciones--;
     }

          //pone las pulsaciones a cero
     public void reiniciar() {
          pulsaciones = 0;
     }

          //aumenta las pulsaciones en una cantidad c
     public void incrementarVarios(int c) {
          pulsaciones = pulsaciones + c;
     }

     //disminuye las pulsaciones en una cantidad c
     public void decrementarVarios(int c) {
          pulsaciones = pulsaciones - c;
     }

}



Como has podido observar, la creación de una clase heredada es exactamente igual que la creación de una clase propia. La única diferencia es que hacemos que dicha clase herede de otra clase ya existente, dándole más 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 continuación:



  1. Crea un proyecto llamado Botones Contadores, que tenga un paquete principal llamado paquetePrincipal y un JFrame llamado VentanaPrincipal:

 



  1. Añadiremos la Clase BotonContador. Para ello debes hacer clic derecho sobre el paquetePrincipal y activar la opción Nuevo à Clase Java. El nombre de la clase es BotonContador:

 



  1. Antes de empezar con el diseño 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 diseñado anteriormente usando herencia.

El fichero BotonContador.java debería quedar así:


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package paquetePrincipal;

import javax.swing.JButton;

/**
 *
 * @author Edwin Amado
 */
public class BotonContador extends JButton {

    //propiedades
    int pulsaciones;

    //constructor
    public BotonContador() {
        pulsaciones = 0;
    }

    //métodos
    //asigna una cantidad de pulsaciones
    public void setPulsaciones(int p) {
        pulsaciones = p;
    }

    //devuelve las pulsaciones del botón
    public int getPulsaciones() {
        return pulsaciones;
    }

    //incrementa en uno las pulsaciones
    public void incrementarUno() {
        pulsaciones++;
    }

    //decrementa en uno las pulsaciones
    public void decrementarUno() {
        pulsaciones--;
    }

    //pone las pulsaciones a cero
    public void reiniciar() {
        pulsaciones = 0;
    }

    //aumenta las pulsaciones en una cantidad c
    public void incrementarVarios(int c) {
        pulsaciones = pulsaciones + c;
    }

    //disminuye las pulsaciones en una cantidad c
    public void decrementarVarios(int c) {
        pulsaciones = pulsaciones - c;
    }

}



  1. Ahora programaremos el diseño de la ventana principal. Lo haremos desde código. Entra en el módulo VentanaPrincipal.java (haciendo doble click en él) y pasa a la zona de código:




  1. En la zona de código programaremos el típico método creacionVentana, llamado desde el constructor, donde se programará el diseño de la ventana:




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




  1. En el método creacionVentana definiremos características de la ventana y construiremos estos botones y los situaremos en la ventana:




  1. Como puedes ver, los botones contadores se construyen igual que los JButton; y, de hecho, tienen los mismos métodos que los JButton, ya que derivan de ellos. Así pues, un botón contador tiene un método setText, setBounds, etc

  1. Ejecuta el programa y observa el resultado. Verás que en la ventana aparecen los dos botones contadores, sin embargo, observarás que tienen el mismo aspecto que los JButton. Se vuelve a indicar que esto es debido a que la clase BotonContador deriva de la clase JButton.




  1. Ahora se añadirá un actionPerformed a cada botón contador, para controlar sus pulsaciones. Añade al final (dentro del método creacionVentana) el siguiente código ya conocido, para la asignación de eventos actionPerformed a los botones:




  1. Se tendrán que programar los métodos de respuesta a los eventos, que aquí se han llamado pulsacionBotonA y pulsacionBotonB. Prográmalos (fuera de creacionVentana) de la siguiente forma:




  1. Cada vez que se pulse el Botón A, debería aumentar su contador interno de pulsaciones en uno. Lo mismo debería pasar con el Botón B. Esto se hace fácilmente usando el método incrementarUno, propio de nuestros botones contadores:




  1. Resumiendo, cada vez que se pulsa el Botón A, se le da la orden al Botón A de que incremente su contador interno. Lo mismo sucede con el Botón B.

  1. Ahora programaremos dos botones más en la ventana, pero estos serán botones normales y los crearemos desde la ventana de diseño, para facilitar la tarea. Estos botones se llamarán btnVerPulsaciones y btnReiniciar.




  1. Cuando se pulse el botón Ver Pulsaciones debería aparecer un JOptionPane indicando cuantas veces se ha pulsado el Botón A y cuantas el B. Esto se hará simplemente pidiendo a cada botón su número de pulsaciones almacenadas.

Accede al actionPerformed del botón Ver Pulsaciones y programa lo siguiente:




En este botón le pedimos al Botón A que nos diga cuantas pulsaciones tiene anotadas (a través del método getPulsaciones) y lo mismo hacemos con el Botón B. Esto es posible ya que ambos botones son del tipo BotonContador, la clase heredada que hemos programado.


  1. Ejecuta el programa y prueba lo siguiente:

-       Pulsa varias veces el Botón A y el B. Verás que no sucede nada (aunque internamente cada uno de los botones está guardando el número de pulsaciones en su propiedad pulsaciones)

-       Pulsa ahora el botón Ver Pulsaciones y comprobarás como este botón te muestra las veces que pulsaste cada botón.




  1. Ahora programaremos el botón Reiniciar de forma que los contadores internos de ambos botones A  y B se pongan a cero.

  1. Accede al actionPerformed del botón Reiniciar y programa lo siguiente:




  1. Puedes comprobar el funcionamiento de este botón ejecutando el programa y pulsando varias veces los botones A y B. Luego mira las pulsaciones almacenadas en ambos botones. Pulsa el botón Reiniciar y comprueba las pulsaciones de nuevo. Deberían ser cero en ambos botones.





EJERCICIO


Se propone al lector que añada las siguientes modificaciones al programa:

-       Añade desde código un nuevo botón Botón C (de tipo BotonContador) que al pulsarse aumente su número de pulsaciones interno en 2 (usa el método incrementarVarios propio de la clase BotonContador).

-       Cuando se pulse el botón Ver Pulsaciones también debería verse el número de pulsaciones del Botón C.

-       Cuando se pulse Reiniciar, el número de pulsaciones del Botón C debería situarse a cero también.

-       Añade desde diseño un cuadro de texto (llamado txtNumero) y un botón normal (JButton) llamado btnIniciar. En el cuadro de texto se introducirá un número, y al pulsar el botón btnIniciar, los valores internos de los tres botones A, B y C se inicializarán al número introducido:





CONCLUSIONES:

La Herencia consiste en crear una clase que obtenga todas las características de otra. Esta clase a su vez tendrá también características propias.

La clase inicial se denomina clase Base y la clase nueva creada a partir de la clase base se llama clase Derivada:




Se puede hacer que una clase de creación propia derive o herede de otra ya existente añadiendo:

extends NombreClaseBase

en la línea de creación de la clase.

La clase creada así obtendrá características de la clase de la que hereda.

Aparte, esta clase tendrá métodos propios añadidos por el programador.



martes, 14 de junio de 2016

031.- POO - Proyectos Con Clases Propias - Java y NetBeans



POO - USAR CLASES PROPIAS EN UN PROYECTO:

Aplicación de una Clase Propia:

Una vez programada una Clase de creación propia, podremos usar esta en uno de nuestros proyectos para crear objetos de dicha clase. En este ejercicio guiado veremos un ejemplo sobre cómo usar de forma práctica la clase SalaCine en un proyecto java hecho con NetBeans.


DESARROLLEMOS EL SIGUIENTE EJERCICIO:

La Corporación Cines AMANUVA nos encarga un programa para gestionar el funcionamiento de las dos salas con las que cuenta.

La primera de las salas es la “sala central”. En ella se proyectan las películas de estreno. Es una sala grande, con 500 localidades. El precio para ver una película en esta sala es de 8.00 euros.

La segunda de las salas es la “sala secundaria”. En esta sala se proyectan películas clásicas. Es una sala con un aforo más pequeño, concretamente, de 80 localidades. El precio para ver una película en esta sala es de 6.00 euros.

Se creará un programa que nos permita controlar la entrada de personas en las salas y podremos saber en todo momento el porcentaje de ocupación de cada sala y los ingresos obtenidos.


  1. Crear un nuevo proyecto. Este proyecto se llamará Cines AMANUVA, contendrá un paquete llamado paquetePrincipal y este a su vez contendrá un JFrame llamado VentanaPrincipal. El aspecto de la estructura del proyecto al crearlo será la siguiente:




  1. Diseña la ventana principal de forma que quede parecida a la siguiente. Usa la ventana de diseño para hacer el diseño del formulario. Los nombres de los componentes se indica a continuación.





  1. Antes de empezar la programación de cada botón del programa, incluiremos en el proyecto la clase SalaCine, para así poder generar objetos del tipo “sala de cine” y aprovecharlos en nuestro programa.

  1. Para añadir un fichero de clase propio en un proyecto Java con NetBeans, debes hacer clic derecho sobre el paquete donde quieras introducir la clase. En nuestro caso, haremos clic con el botón derecho sobre el paquetePrincipal, que es el único que tenemos:


  1. Elegiremos la opción Nuevo / Clase Java:





  1. Entonces tendremos que darle un nombre a nuestro fichero de clase. Recuerda que el nombre debe ser el mismo que el de la clase que queremos programar. En nuestro caso, SalaCine. Luego se pulsa el botón Terminar.




  1. Si vuelves a observar el esquema del proyecto, verás que dentro del paquete principal ha aparecido un nuevo elemento, llamado SalaCine. Este es el fichero donde programaremos nuestra clase SalaCine.




  1. Si haces doble clic sobre el fichero SalaCine.java, podrás ver en el centro de la ventana de NetBeans el código de dicha clase. NetBeans añade cierto código a la clase para ahorrarnos trabajo, por eso ya tendremos programado la instrucción inicial de la clase y algunos comentarios que se añaden automáticamente:





  1. Ahora ya solo tendremos que completar la programación de la clase, añadiendo las propiedades, el método constructor, y añadiendo los distintos métodos que programamos en la hoja anterior. Debes modificar el fichero SalaCine para que quede así:


/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package paquetePrincipal;

/**
 *
 * @author EdZu
 */
public class SalaCine {

    int aforo;
    int butacasOcupadas;
    String tituloPelicula;
    double precioEntrada;

    //Método Constructor
    public SalaCine() {
        aforo = 100;
        butacasOcupadas = 0;
        tituloPelicula = "";
        precioEntrada = 5.0;
    }

    //Métodos set
    //Método setAforo
    public void setAforo(int afo) {
        aforo = afo;
    }

    //Método setButacasOcupadas
    public void setButacasOcupadas(int ocu) {
        butacasOcupadas = ocu;
    }

    //Método setTituloPelicula
    public void setTituloPelicula(String peli) {
        tituloPelicula = peli;
    }

    //Método setPrecioEntrada
    public void setPrecioEntrada(double entra) {
        precioEntrada = entra;
    }

    //Método setButacasLibres
    public void setButacasLibres(int lib) {
        int ocu;

        ocu = aforo - lib;
        butacasOcupadas = ocu;
    }

    //Métodos get
    //Método getAforo
    public int getAforo() {
        return aforo;
    }

    //Método getButacasOcupadas
    public int getButacasOcupadas() {
        return butacasOcupadas;
    }

    //Método getTituloPelicula
    public String getTituloPelicula() {
        return tituloPelicula;
    }

    //Método getPrecioEntrada
    public double getPrecioEntrada() {
        return precioEntrada;
    }

    //Método getButacasLibres
    public int getButacasLibres() {
        int lib;
        lib = aforo - butacasOcupadas;
        return lib;
    }

    //Método getPorcentajeOcupacion
    public double getPorcentajeOcupacion() {
        double porc;
        porc = (double) butacasOcupadas * 100.0 / (double) aforo;
        return porc;
    }

    //Método getIngresosSala
    public double getIngresosSala() {
        double ingre;
        ingre = butacasOcupadas * precioEntrada;
        return ingre;
    }

    //Métodos de orden
    //Método vaciarSala
    public void vaciarSala() {
        butacasOcupadas = 0;
        tituloPelicula = "";
    }

    //Método entraUno
    public void entraUno() {
        butacasOcupadas++;
    }

}




  1. Ya hemos incluido la clase SalaCine en nuestro proyecto. A partir de ahora podremos crear objetos del tipo SalaCine y aprovechar sus características en nuestro programa.


  1. Empezaremos a programar la ventana principal de nuestro programa. Haz doble clic sobre el fichero VentanaPrincipal.java en la ventana de proyectos para pasar al diseño de la ventana principal:




  1. Nuestro programa principal, gestiona el funcionamiento de dos salas de cine: la sala central y la sala secundaria. Para facilitar nuestro trabajo, sería interesante crear dos objetos globales del tipo SalaCine. Uno de ellos representará a la sala central, y el otro a la sala secundaria.

  1. Para ello, acude a la ventana de código de la ventana principal:




  1. En la zona de variables globales de la ventana principal declararemos dos objetos del tipo SalaCine:




  1. Es en el constructor de nuestra ventana principal donde construiremos nuestros objetos de tipo sala. (Recuerda que el constructor de tu ventana principal se suele usar para construir los objetos que vas a usar en tu programa y asignarle las características que tendrán dichos objetos al inicio).




  1. Recuerda que cuando se construyen objetos, estos tienen por defecto unos valores iniciales. En el caso de los objetos tipo SalaCine, sus valores son los siguientes:

Aforo 100, Ocupación 0, Película (cadena vacía) y Entrada 5.0

Será necesario modificar las características de ambas salas ya que no tienen los valores correctos.

Se dijo al comenzar el ejercicio que la sala central tenía las siguientes características:

Aforo: 500 y un precio de entrada de 8 euros.

Por lo tanto, modificamos las características del objeto en el constructor de la siguiente forma:




  1. En el caso de la sala secundaria sucede lo mismo. Sus características son las siguientes:

Aforo: 80              Precio entrada: 6.0 euros.

Por tanto será necesario modificar el objeto salaSecundaria para asignar estos valores:




  1. Ya hemos incluido dos objetos del tipo SalaCine a nuestro proyecto. Los hemos declarado en la ventana principal como globales y los hemos construido dándoles las características apropiadas. A partir de ahora, usaremos esos objetos en la programación de cada botón de la ventana.

  1. Empezaremos programando el botón btnCentralCambiar. El objetivo de este botón es asignar a la sala central un título de película. Ese título se debe mostrar también en la etiqueta etiCentralPelicula:




  1. Dentro del evento actionPerformed del botón btnCentralCambiar programa lo siguiente:



          El código de este botón hace lo siguiente:

-       Le pide al usuario que introduzca el título para la película, usando un JOptionPane.showInputDialog. El título introducido se recoge en una variable de cadena llamada titulo.

-       Luego se asigna dicho título a la sala central de Cines AMANUVA. Esta línea es interesante, ya que se usa el método setTituloPelicula del objeto salaCentral para asignar el título de la película.

-       Y finalmente se coloca el título en la etiqueta para que el usuario pueda verlo.



  1. Ejecuta el programa y observa el funcionamiento del botón.

  1. Ahora se programará el botón btnCentralNuevaEntrada:




Cada vez que un espectador compre una entrada para la sala central, el usuario del programa deberá pulsar este botón. Internamente el programa debe decirle al objeto salaCentral que ha entrado una nueva persona en la sala. Esto se hace con el método entraUno.

Así pues, programe en el evento actionPerformed del botón btnCentralNuevaEntrada de la siguiente forma:




Como puedes ver, simplemente se le informa al objeto salaCentral que ha entrado una nueva persona usando el método entraUno.


  1. Programaremos ahora el botón btnCentralPorcentajeOcupacion. Este botón nos mostrará información sobre la sala central. Concretamente este botón debe mostrar lo siguiente:

Película que se está proyectando.
Aforo total de la sala.
Butacas Ocupadas.
Butacas Libres.
Porcentaje de Ocupación.

Para mostrar toda esta información, será necesario pedirle al objeto salaCentral que nos dé información de la sala. Esto lo conseguiremos usando los distintos métodos get del objeto.

Estudia atentamente la programación del botón btnCentralPorcentajeOcupacion:




          Observa el código:

-       Primero se crea una variable tipo cadena llamada info (información).

-       A continuación, se van concatenando textos a la variable de cadena. Recuerda que los \n permiten añadir saltos de línea.

-       Observa como se va pidiendo información al objeto a través de métodos get y se va concatenando esta información a la variable info.

-       Finalmente se presenta el texto de la variable info en un JOptionPane.


  1. Ejecuta el programa para observar el funcionamiento de los tres botones que se han programado. Asigna una película a la sala central, luego pulsa varias veces el botón Nueva Entrada y pulsa el botón % Ocupación para ver información sobre la sala:





  1. A continuación se programará el botón Vaciar correspondiente a la sala central (btnCentralVaciar) Este botón debe situar la ocupación de la sala a cero y quitar la película asignada a la sala central.

Programa en el evento actionPerformed del botón lo siguiente:




Como puedes observar, el código es muy simple. Solo tengo que ordenar al objeto salaCentral que se vacíe. Debido a que ya no hay película asignada a la sala central, es conveniente también borrar el contenido de la etiqueta que muestra el título de la película.


  1. Programaremos ahora el botón Ingresos del panel de la sala central. Este botón nos debe dar información sobre los ingresos producidos por la sala en el momento en que se pulsa. Esta información la mostraremos en un JOptionPane. Programa el evento actionPerformed de este botón como sigue:



Como puedes ver, la programación es bastante sencilla. Solo hay que pedirle al objeto salaCentral que nos diga los ingresos correspondientes.

Observa la ventaja de usar objetos. No tenemos que hacer ningún cálculo aquí. Solo tenemos que pedirle al objeto que haga el cálculo necesario por nosotros. Dicho de otra forma, hacemos que ellos hagan el trabajo por nosotros.


  1. Ejecuta el programa para comprobar el funcionamiento de estos botones. Asigna una película a la sala central, vende algunas entradas, comprueba el porcentaje de ocupación y luego comprueba los ingresos. Vacía la sala central, y vuelve a comprobar el porcentaje de ocupación y los ingresos actuales.





EJERCICIO

El segundo de los paneles hace referencia a la sala secundaria. Su funcionamiento es el mismo que el de la sala central. Se pide que programe todos los botones correspondientes a la sala secundaria.

La programación es prácticamente igual, solo hay que actuar sobre el objeto salaSecundaria en vez del objeto salaCentral.


EJERCICIO

El botón Ingresos Totales de la ventana, debería mostrar en un JOptionPane la suma de los ingresos actuales de ambas salas. Programe dicho botón. Solo tiene que pedirle a cada objeto: salaCentral y salaSecundaria que le de sus ingresos, y sumar ambos.






CONCLUSIONES:

Se pueden añadir a un proyecto Java clases programadas por uno mismo.

Al hacer esto, en el mismo proyecto podemos crear objetos de dichas clases y usarlos para hacer el programa.

En general, un proyecto java está constituido por un grupo de clases, algunas de las cuales serán de creación propia. En el programa usaremos objetos derivados de dichas clases.