Programación de una Clase
En este ejercicio guiado, crearemos
la Clase SalaCine , que hemos descrito en la entrada
anterior. Luego, a partir de esta clase, fabricaremos objetos representando
salas de cine, y los usaremos en un proyecto Java.
Recuerda las características que
hemos decidido para la Clase SalaCine
en el post anterior:
Clase SalaCine
Nombre de la Clase : SalaCine
Propiedades de los objetos SalaCine:
aforo -
número entero (int)
butacasOcupadas - número entero (int)
tituloPelicula - cadena (String)
precioEntrada - número decimal (double)
Valores por defecto de los objetos
del tipo SalaCine:
aforo: 100
butacasOcupadas: 0
tituloPelicula: (cadena vacía)
precioEntrada: 5.0
Métodos de los objetos del tipo SalaCine:
Métodos
de asignación de propiedades (set)
setAforo - modifica la propiedad Aforo
setButacasOcupadas -
modifica la propiedad butacasOcupadas
setButacasLibres -
modifica la propiedad butacasOcupadas también
setTituloPelicula -
modifica la propiedad tituloPelicula
setPrecioEntrada - modifica la
propiedad precioEntrada
Métodos de petición de información
(get)
getAforo -
devuelve el valor de la propiedad aforo
getButacasOcupadas -
devuelve el valor de la propiedad butacasOcupadas
getButacasLibres - devuelve
el número de butacas libres
getPorcentajeOcupacion -
devuelve el porcentaje de ocupación de la sala
getIngresosSala - devuelve
los ingresos obtenidos por la venta de entradas
getTituloPelicula - devuelve
el valor de la propiedad tituloPelicula
getPrecioEntrada - devuelve
el valor de la propiedad precioEntrada
Métodos de orden
vaciarSala - vacía la ocupación de la
sala y borra el título de la película
entraUno - le indica al objeto que
ha entrado una persona más en la sala
PROGRAMACIÓN DE UNA CLASE
Fichero de la Clase
La programación de una clase de
objetos se realiza en un fichero aparte, cuyo nombre es exactamente el mismo
que el de la propia clase, y cuya extensión es .java.
Por ejemplo, si queremos programar
la clase SalaCine, esto se debe hacer en un fichero llamado:
SalaCine.java
Cuando programemos esta clase
dentro de NetBeans, veremos las facilidades que nos proporciona este para la
creación de la clase. De momento, solo veremos de forma teórica como hay que
programar la clase. (No tiene que introducir lo que viene a continuación en
ningún sitio).
Estructura básica de la Clase:
Dentro del fichero de la clase,
comenzará la programación de esta de la siguiente forma:
public
class SalaCine {
}
La programación de una clase
comienza siempre con una línea de código como la que sigue:
public
class NombreDeLaClase {
}
Toda la programación de la clase se
introducirá dentro de las dos llaves.
Propiedades de la Clase:
Lo primero que se debe introducir
en la clase que se está programando son las propiedades. Las propiedades de una
clase son básicamente variables globales de ésta. Si introducimos las
propiedades de la clase SalaCine, esta nos quedaría así:
public
class SalaCine {
int aforo;
int butacasOcupadas;
String tituloPelicula;
double precioEntrada;
}
Constructor de la Clase:
Cuando se planteó la clase SalaCine,
se tuvo que decidir qué valores iniciales deberían tener las propiedades de la
clase. Para asignar estos valores iniciales, es necesario programar lo que se
denomina el método constructor.
El método constructor de una
clase es un método (un procedimiento para entendernos) un poco especial, ya que
debe tener el mismo nombre de la clase y no devuelve nada, pero no lleva la
palabra void. Dentro del método constructor se inicializan las
propiedades de la clase.
En general, la programación del método
constructor sigue la siguiente sintaxis:
public
NombreDeLaClase() {
propiedad1 = valor1;
propiedad2 = valor2;
etc…
}
La clase SalaCine, añadiendo el método
constructor, tendrá el siguiente aspecto:
public class SalaCine {
int
aforo;
int butacasOcupadas;
String tituloPelicula;
double precioEntrada;
//Método Constructor:
public SalaCine() {
aforo = 100;
butacasOcupadas = 0;
tituloPelicula = “”;
precioEntrada = 5.0;
}
}
Observa como usamos el método constructor
de la clase SalaCine para asignar a cada propiedad los valores por defecto
decididos en el diseño de la clase que se hizo en la entrada anterior.
Métodos del tipo set:
Todas las clases suelen contener
métodos del tipo set. Recuerda que
estos métodos permiten asignar valores a las propiedades de la clase.
Debes tener en cuenta también que
cuando se habla de método de una clase, en realidad se está hablando de un
procedimiento o función, que puede recibir como parámetro determinadas
variables y que puede devolver valores.
Los métodos del tipo set son básicamente procedimientos que
reciben valores como parámetros que introducimos en las propiedades. Estos
métodos no devuelven nada, así que son void.
Se recomienda, que el parámetro del
procedimiento se llame de forma distinta a la propiedad que se asigna.
Veamos la programación del método setAforo,
de la clase SalaCine:
public
void setAforo(int afo) {
aforo = afo;
}
Observa este método:
-
Es void, es decir, no devuelve nada (el significado de la palabra public se verá
más adelante).
-
El método recibe como parámetro una variable del
mismo tipo que la propiedad que queremos modificar (en este caso int) y un nombre que se recomienda que
no sea igual al de la propiedad (en nuestro caso, afo, de aforo)
-
Puedes observar que lo que se hace simplemente en
el método es asignar la variable pasada como parámetro a la propiedad.
La mayoría de los procedimientos set usados para introducir valores en
las propiedades tienen la misma forma. Aquí tienes la programación de los demás
procedimientos set de la clase SalaCine.
//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;
}
Hay un método set de la clase SalaCine llamado setButacasLibres
cuya misión es asignar el número de localidades libres del cine. Sin embargo la
clase SalaCine no tiene una propiedad “butacasLibres”. En
realidad, este método debe modificar el número de localidades ocupadas. Observa
su programación:
//Método setButacasLibres
public void setButacasLibres(int lib) {
int
ocu;
ocu =
aforo – lib;
butacasOcupadas
= ocu;
}
Al asignar un número de localidades
ocupadas, estamos asignando indirectamente el número de localidades libres.
Como puedes observar en el método, lo que se hace es calcular el número de
localidades ocupadas a partir de las libres, y asignar este valor a la
propiedad butacasOcupadas.
No se pensó en crear una propiedad
de la clase llamada butacasLibres ya que en todo momento se puede saber cuantas
localidades libres hay restando el aforo menos las localidades ocupadas.
La clase SalaCine, añadiendo los
métodos set, quedaría de la siguiente
forma:
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 del tipo get:
Al igual que los métodos set, los métodos get son muy fáciles de programar ya que suelen tener siempre la
misma forma.
Estos métodos no suelen llevar
parámetros y devuelven el valor de la propiedad correspondiente usando la
típica instrucción return usada tanto en las funciones. Por tanto, un método get
nunca es void. Siempre será del mismo tipo de datos de la propiedad que
devuelve.
Veamos la programación del método getAforo:
//Método getAforo
public int getAforo() {
return
aforo;
}
Como puedes ver el método
simplemente devuelve el valor de la propiedad aforo. Como esta
propiedad es int, el método es int.
Los métodos que devuelven el resto
de las propiedades son igual de sencillos de programar:
//Método getButacasOcupadas
public int getButacasOcupadas() {
return
butacasOcupadas;
}
//Método getTituloPelicula
public String getTituloPelicula () {
return
tituloPelicula;
}
//Método getPrecioEntrada
public double getPrecioEntrada() {
return
precioEntrada;
}
Todos estos métodos son iguales.
Solo tienes que fijarte en el tipo de datos de la propiedad que devuelven.
Existen otros métodos get que
devuelven cálculos realizados con las propiedades. Estos métodos realizan algún
cálculo y luego devuelven el resultado. Observa el siguiente método get:
//Método getButacasLibres
public int getButacasLibres() {
int
lib;
lib
= aforo – butacasOcupadas;
return
lib;
}
No existe una propiedad butacasLibres,
por lo que este valor debe ser calculado a partir del aforo y el número de
localidades ocupadas. Para ello restamos y almacenamos el valor en una variable
a la que hemos llamado lib. Luego devolvemos dicha variable.
Los dos métodos get que quedan por programar de la clase
SalaCine
son parecidos:
//Método getPorcentajeOcupacion
public double getPorcentajeOcupacion() {
double
porc;
porc
= (double) butacasOcupadas *100.0 / (double) aforo;
return
porc;
}
Este método calcula el porcentaje
de ocupación de la sala (es un valor double)
//Método getIngresosSala
public double getIngresosSala() {
double
ingre;
ingre
= butacasOcupadas * precioEntrada;
return
ingre;
}
Los ingresos se calculan multiplicando
el número de butacas ocupadas por lo que vale una entrada.
Una vez introducidos los métodos
get la clase SalaCine quedaría de la siguiente forma:
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:
Para finalizar la programación de
la clase SalaCine, se programarán los dos métodos de orden que hemos
indicado en el planteamiento de la clase. Estos métodos suelen realizar alguna
tarea que involucra a las propiedades de la clase, modificándola internamente.
No suelen devolver ningún valor, aunque pueden recibir parámetros.
Veamos la programación del método vaciarSala,
cuyo objetivo es vaciar la sala y quitar la película en proyección:
//Método vaciarSala
public
void vaciarSala() {
butacasOcupadas = 0;
tituloPelicula = “”;
}
Como se puede observar, es un
método muy sencillo, ya que simplemente cambia algunas propiedades de la clase.
El método entraUno es también muy
sencillo de programar. Este método le indica al objeto que ha entrado un nuevo
espectador. Sabiendo esto, el objeto debe aumentar en uno el número de
localidades ocupadas:
//Método entraUno
public
void entraUno() {
butacasOcupadas++;
}
Añadiendo estos dos últimos
métodos, la programación de la clase SalaCine quedaría finalmente como
sigue:
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++;
}
}
EJERCICIOS RECOMENDADOS
Supongamos que tenemos una clase
llamada Rectangulo que nos permitirá
generar objetos de tipo rectángulo.
Sea el planteamiento de la clase Rectangulo el que sigue:
CLASE RECTANGULO
Nombre de la clase: Rectangulo
Propiedades de los objetos de la
clase Rectangulo:
base
(double)
altura
(double)
Valores iniciales de las
propiedades de los objetos de la clase Rectangulo:
base – 100
altura – 50
Métodos:
Métodos set:
setBase
– permite asignar un valor a la propiedad Base.
setAltura
– permite asignar un valor a la propiedad Altura.
Métodos get:
getBase
– devuelve el valor de la propiedad Base
getAltura
– devuelve el valor de la propiedad Altura
getArea – devuelve el área del rectángulo
getPerímetro
– devuelve el perímetro del rectángulo
Otros métodos:
Cuadrar
– este método debe hacer que la altura tenga el valor de la base.
SE PIDE:
Realiza (en papel) la programación
de la clase Rectangulo a partir del planteamiento anterior.
CONCLUSIÓN
La programación de una clase se realiza en un fichero que tiene el mismo
nombre que la clase y extensión .java
La estructura general de una clase es la siguiente:
public class NombreClase {
Propiedades (variables
globales)
Método Constructor
Métodos set
Métodos get
Métodos de orden y otros
métodos
}
El Método Constructor no devuelve nada pero que no es
void. Este método debe llamarse igual que la clase y se usa para asignar los
valores iniciales a las propiedades.
Los métodos set son void y reciben como parámetro un valor que se asigna
a la propiedad correspondiente.
Los métodos get no tienen parámetros y devuelven el valor de una
propiedad de la clase, aunque también pueden realizar cálculos y devolver sus
resultados.
Los métodos de orden realizan alguna tarea específica y a veces
modifican las propiedades de la clase de alguna forma.
No hay comentarios.:
Publicar un comentario