Você está na página 1de 12

EJERCICIO GUIADO. JAVA: POO.

PROGRAMACIN DE UNA CLASE


Programacin de na C!a"e
En este ejercicio guiado, crearemos la Clase SalaCine, que hemos descrito en la hoja anterior. Luego,
a partir de esta clase, fabricaremos objetos representando salas de cine, y los usaremos en un
proyecto Java.
Recuerda las caractersticas que hemos decidido para la Clase SalaCine en la hoja anterior
CLASE SALACINE
!ombre de la Clase SalaCine
"ropiedades de los objetos SalaCine
A#oro # n$mero entero %int&
Oc$ada" # n$mero entero %int&
Pe!%c!a # cadena %'tring&
En&rada # n$mero decimal %double&
(alores por defecto de los objetos del tipo SalaCine
)foro '((
*cupadas (
"elcula )cadena *ac%a+
Entrada ,
+,todos de los objetos del tipo SalaCine
+,todos de asignaci-n de propiedades %set&
setAforo # modifica la propiedad )foro
setOcupadas # modifica la propiedad *cupadas
setLibres # modifica la propiedad *cupadas tambi,n
setPelicula # modifica la propiedad "elcula
setEntrada # modifica la propiedad Entrada
+,todos de petici-n de informaci-n %get&
getAforo # devuelve el valor de la propiedad )foro
getOcupadas # devuelve el valor de la propiedad *cupadas
getLibres # devuelve el n$mero de butacas libres
getPorcentaje # devuelve el porcentaje de ocupaci-n de la sala
getIngresos # devuelve los ingresos obtenidos por la venta de entradas
getPelicula # devuelve el valor de la propiedad "elcula
getEntrada # devuelve el valor de la propiedad Entrada
+,todos de orden
Vaciar # vaca la ocupaci-n de la sala y borra la pelcula
entraUno # le indica al objeto que ha entrado una persona m.s en la sala
PROGRAMACIN DE UNA CLASE
Fichero de la Clase
La programaci-n de una clase de objetos se reali/a en un fichero aparte, cuyo nombre es
e0actamente el mismo que el de la propia clase, y cuya e0tensi-n es .java.
"or ejemplo, si queremos programar la clase 'alaCine, esto se debe hacer en un fichero llamado
SalaCine.java
Cuando programemos esta clase dentro de !et1eans, veremos las facilidades que nos proporciona
este para la creaci-n de la clase. 2e momento, solo veremos de forma te-rica como hay que
programar la clase. %!o tiene que introducir lo que viene a continuaci-n en ning$n sitio&
Estructura bsica de la Clase
2entro del fichero de la clase, comen/ar. la programaci-n de esta de la siguiente forma
public class SalaCine {
}
La programaci-n de una clase comien/a siempre con una lnea de c-digo como la que sigue
public class NombreDeLaClase {
}
3oda 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. 'i introducimos las
propiedades de la clase SalaCine, esta nos quedara as
public class SalaCine {
int Aforo;
int Ocupadas;
String el!cula;
double "ntrada;
}
Constructor de la Clase
Cuando se plante- la clase SalaCine, se tuvo que decidir qu, valores iniciales deberan tener las
propiedades de la clase. "ara asignar estos valores iniciales, es necesario programar lo que se
denomina el Constructor.
El 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. 2entro
del constructor se iniciali/an las propiedades de la clase.
En general, la programaci-n del constructor sigue la siguiente sinta0is
public NombreDeLaClase#$ {
propiedad% & valor;
propiedad' & valor;
etc(
}
La clase SalaCine, a4adiendo el Constructor, tendr. el siguiente aspecto
public class SalaCine {
int Aforo;
int Ocupadas;
String el!cula;
double "ntrada;
))Constructor
public SalaCine#$ {
Aforo & %**;
Ocupadas & *;
elicula & +,;
"ntrada & -.*;
}
}
*bserva como usamos el constructor de la clase SalaCine para asignar a cada propiedad los valores
por defecto decididos en el dise4o de la clase que se hi/o en la hoja anterior.
Mtodos del tipo set
3odas las clases suelen contener m,todos del tipo set. Recuerda que estos m,todos permiten asignar
valores a las propiedades de la clase.
2ebes 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.
'e recomienda, que el par.metro del procedimiento se llame de forma distinta a la propiedad que se
asigna.
(eamos la programaci-n del m,todo setAforo, de la clase SalaCine
public void setAforo#int afo$ {
Aforo & afo;
}
*bserva este m,todo
# Es void, es decir, no devuelve nada %el significado de la palabra public se ver ms adelante&
Constructor
# 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&
# "uedes observar que lo que se hace simplemente en el m,todo es asignar la variable pasada
como par.metro a la propiedad.
La mayora de los procedimientos set usados para introducir valores en las propiedades tienen la
misma forma. )qu tienes la programaci-n de los dem.s procedimientos set de la clase SalaCine.
))./todo setOcupadas
public void setOcupadas#int ocu$ {
Ocupadas & ocu;
}
))./todo setPelicula
public void setelicula#String peli$ {
elicula & peli;
}
))./todo set"ntrada
public void set"ntrada#double entra$ {
"ntrada & entra;
}
5ay un m,todo set de la clase SalaCine llamado setLibres cuya misi-n es asignar el n$mero de
localidades libres del cine. 'in embargo la clase SalaCine no tiene una propiedad 6Libres7. En
realidad, este m,todo debe modificar el n$mero de localidades ocupadas. *bserva su programaci-n
))./todo setLibres
public void setLibres#int lib$ {
int ocu;
ocu & Aforo 0 lib;
Ocupadas & ocu;
}
)l 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 *cupadas.
!o se pens- en crear una propiedad de la clase llamada Libres ya que en todo momento se puede
saber cuantas localidades libres hay restando el )foro menos las localidades *cupadas.
La clase SalaCine, a4adiendo los m,todos set, quedara de la siguiente forma
public class SalaCine {
int Aforo;
int Ocupadas;
String el!cula;
double "ntrada;
))Constructor
public SalaCine#$ {
Aforo & %**;
Ocupadas & *;
elicula & +,;
"ntrada & -.*;
}
))./todos set
))./todo setAforo
public void setAforo#int afo$ {
Aforo & afo;
}
))./todo setOcupadas
public void setOcupadas#int ocu$ {
Ocupadas & ocu;
}
))./todo setPelicula
public void setelicula#String peli$ {
elicula & peli;
}
))./todo set"ntrada
public void set"ntrada#double entra$ {
"ntrada & entra;
}
))./todo setLibres
public void setLibres#int lib$ {
int ocu;
ocu & Aforo 0 lib;
Ocupadas & ocu;
}
}
Mtodos del tipo get
)l 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 tpica instrucci-n return usada tanto en las funciones. "or tanto, un m,todo get nunca es
void. 'iempre ser. del mismo tipo de datos que la propiedad que devuelve.
(eamos la programaci-n del m,todo getAforo
+,todos 'et
))./todo getAforo
public int getAforo#$ {
return Aforo;
}
Como puedes ver el m,todo simplemente devuelve el valor de la propiedad )foro. 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
))./todo getOcupadas
public int getOcupadas#$ {
return Ocupadas;
}
))./todo getelicula
public String getelicula#$ {
return el!cula;
}
))./todo get"ntrada
public double get"ntrada#$ {
return "ntrada;
}
3odos estos m,todos son iguales. 'olo tienes que fijarte en el tipo de datos de la propiedad que
devuelven.
E0isten otros m,todos get que devuelven c.lculos reali/ados con las propiedades. Estos m,todos
reali/an alg$n c.lculo y luego devuelven el resultado. *bserva el siguiente m,todo get
))./todo getLibres
public int getLibres#$ {
int lib;
lib & Aforo 0 Ocupadas;
return lib;
}
!o e0iste una propiedad Libres, por lo que este valor debe ser calculado a partir del )foro y el n$mero
de localidades *cupadas. "ara 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
))./todo getorcentaje
public double getorcentaje#$ {
double por;
por & #double$ Ocupadas ) #double$ Aforo 1 %**.*;
return por;
}
Este m,todo calcula el porcentaje de ocupaci-n de la sala %es un valor double&
))./todo get2ngresos
public double get2ngresos#$ {
double ingre;
ingre & Ocupadas 1 "ntrada;
return ingre;
}
Los ingresos se calculan multiplicando el n$mero de entradas por lo que vale una entrada.
La clase SalaCine una ve/ introducidos los m,todos get quedara de la siguiente forma
public class SalaCine {
int Aforo;
int Ocupadas;
String el!cula;
double "ntrada;
))Constructor
public SalaCine#$ {
Aforo & %**;
Ocupadas & *;
elicula & +,;
"ntrada & -.*;
}
))./todos set
))./todo setAforo
public void setAforo#int afo$ {
Aforo & afo;
}
))./todo setOcupadas
public void setOcupadas#int ocu$ {
Ocupadas & ocu;
}
))./todo setPelicula
public void setelicula#String peli$ {
elicula & peli;
}
))./todo set"ntrada
public void set"ntrada#double entra$ {
"ntrada & entra;
}
))./todo setLibres
public void setLibres#int lib$ {
int ocu;
ocu & Aforo 0 lib;
Ocupadas & ocu;
}
))./todos get
))./todo getAforo
public int getAforo#$ {
return Aforo;
}
))./todo getOcupadas
public int getOcupadas#$ {
return Ocupadas;
}
+,todos 8et
))./todo getelicula
public String getelicula#$ {
return el!cula;
}
))./todo get"ntrada
public double get"ntrada#$ {
return "ntrada;
}
))./todo getLibres
public int getLibres#$ {
int lib;
lib & Aforo 0 Ocupadas;
return lib;
}
))./todo getorcentaje
public double getorcentaje#$ {
double por;
por & #double$ Ocupadas ) #double$ Aforo 1 %**.*;
return por;
}
))./todo get2ngresos
public double get2ngresos#$ {
double ingre;
ingre & Ocupadas 1 "ntrada;
return ingre;
}
}
Mtodos de orden
"ara finali/ar 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 reali/ar alguna tarea que
involucra a las propiedades de la clase, modific.ndola internamente. !o suelen devolver ning$n valor,
aunque pueden recibir par.metros.
(eamos la programaci-n del m,todo Vaciar, cuyo objetivo es vaciar la sala y quitar la pelcula en
proyecci-n
))./todo 3aciar
public void 3aciar#$ {
Ocupadas & *;
el!cula & +,;
}
Como se puede observar, es un m,todo muy sencillo, ya que simplemente cambia algunas
propiedades de la clase.
+,todos 8et
El m,todo entra9no es tambi,n muy sencillo de programar. Este m,todo le indica al objeto que ha
entrado un nuevo espectador. 'abiendo esto, el objeto debe aumentar en uno el n$mero de
localidades ocupadas
))./todo entra4no
public void entra4no#$ {
Ocupadas55;
}
)4adiendo estos dos $ltimos m,todos, la programaci-n de la clase SalaCine quedara finalmente
como sigue
public class SalaCine {
int Aforo;
int Ocupadas;
String el!cula;
double "ntrada;
))Constructor
public SalaCine#$ {
Aforo & %**;
Ocupadas & *;
elicula & +,;
"ntrada & -.*;
}
))./todos set
))./todo setAforo
public void setAforo#int afo$ {
Aforo & afo;
}
))./todo setOcupadas
public void setOcupadas#int ocu$ {
Ocupadas & ocu;
}
))./todo setPelicula
public void setelicula#String peli$ {
elicula & peli;
}
))./todo set"ntrada
public void set"ntrada#double entra$ {
"ntrada & entra;
}
))./todo setLibres
public void setLibres#int lib$ {
int ocu;
ocu & Aforo 0 lib;
Ocupadas & ocu;
}
"ropiedades %variables globales&
Constructor
+,todos 'et
))./todos get
))./todo getAforo
public int getAforo#$ {
return Aforo;
}
))./todo getOcupadas
public int getOcupadas#$ {
return Ocupadas;
}
))./todo getelicula
public String getelicula#$ {
return el!cula;
}
))./todo get"ntrada
public double get"ntrada#$ {
return "ntrada;
}
))./todo getLibres
public int getLibres#$ {
int lib;
lib & Aforo 0 Ocupadas;
return lib;
}
))./todo getorcentaje
public double getorcentaje#$ {
double por;
por & #double$ Ocupadas ) #double$ Aforo 1 %**.*;
return por;
}
))./todo get2ngresos
public double get2ngresos#$ {
double ingre;
ingre & Ocupadas 1 "ntrada;
return ingre;
}
))./todos de orden
))./todo 3aciar
public void 3aciar#$ {
Ocupadas & *;
el!cula & +,;
}
))./todo entra4no
public void entra4no#$ {
Ocupadas55;
}
}
+,todos 8et
+,todos de orden y otros
m,todos.
EJERCICIOS RECOMENDADOS
'upongamos que tenemos una clase llamada ectangulo que nos permitir. generar objetos de tipo
rect.ngulo.
'ea el planteamiento de la clase ectangulo el que sigue
CLASE REC-ANGULO
!ombre de la clase Rectangulo
"ropiedades de los objetos de la clase Rectangulo
1ase %double&
)ltura %double&
(alores iniciales de las propiedades de los objetos de la clase Rectangulo
1ase : ;<<
)ltura : =<
+,todos
+,todos set
set1ase : permite asignar un valor a la propiedad 1ase.
set)ltura : permite asignar un valor a la propiedad )ltura.
+,todos get
get1ase : devuelve el valor de la propiedad 1ase
get)ltura : devuelve el valor de la propiedad )ltura
get)rea : devuelve el .rea del rect.ngulo
get"ermetro : devuelve el permetro del rect.ngulo
*tros m,todos
Cuadrar : este m,todo debe hacer que la )ltura tenga el valor de la 1ase.
'E ">2E
Reali/a %en papel& la programaci-n de la clase Rectangulo a partir del planteamiento anterior.
CONCLUSIN
La $rogramacin de na c!a"e "e rea!i.a en n #ic/ero 0e &iene e! mi"mo nom1re 0e
!a c!a"e 2 e3&en"in .4a*a
La e"&rc&ra genera! de na c!a"e e" !a "igien&e:
$1!ic c!a"" Nom1reC!a"e 5
Pro$iedade" )*aria1!e" g!o1a!e"+
Con"&rc&or
M6&odo" "e&
M6&odo" ge&
M6&odo" de orden 2 o&ro" m6&odo"
7
E! Con"&rc&or e" n $rocedimien&o 0e no de*e!*e nada $ero 0e no e" *oid. E!
con"&rc&or de1e !!amar"e iga! 0e !a c!a"e 2 "e "a $ara a"ignar !o" *a!ore" inicia!e"
a !a" $ro$iedade".
Lo" m6&odo" "e& "on *oid 2 reci1en como $ar8me&ro n *a!or 0e "e a"igna a !a
$ro$iedad corre"$ondien&e.
Lo" m6&odo" ge& no &ienen $ar8me&ro" 2 de*e!*en e! *a!or de na $ro$iedad de !a
c!a"e9 an0e &am1i6n $eden rea!i.ar c8!c!o" 2 de*o!*er "" re"!&ado".
Lo" m6&odo" de orden rea!i.an a!gna &area e"$ec%#ica 2 a *ece" modi#ican !a"
$ro$iedade" de !a c!a"e de a!gna #orma.