Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Material Conferencia:
CLASES EN JAVA.
Como se vio en clases anteriores un programa OO era un programa donde existen objetos
que colaboran entre sí y estos objetos son instancia de alguna clase. Por lo tanto, para tener
instancias es necesario primeramente poder declarar o definir clases.
También se estudió que un objeto tiene:
- Atributos (donde se almacenan los datos, la información del mismo)
- Operaciones o métodos (que son aquellos que responden a los mensajes y que
manipulan los atributos).
Al definir (declarar) una clase se debe entonces definir atributos y operaciones.
Los atributos serán datos de los tipos que soporta el lenguaje.
Las operaciones o métodos son segmentos de código que permitirán realizar operaciones
con los atributos y con otros datos necesarios para realizar determinada tarea. Las
diferentes estructuras de programación se utilizan en los métodos, son los más complejos
de programar y se irán estudiantes desde métodos simples a métodos más complejos en la
medida que se estudien las diferentes operaciones que soporta el Java.
En UML (recordar los diagramas de actividad) las clases se representan con un rectángulo
dividido en tres partes: nombre de la clase, atributos y métodos
Nombre de la clase
Atributos de la clase
Métodos de la clase
1
Clases en Java
La definición más simple de una clase en Java es de la siguiente forma:
El modificador dice el alcance del atributo: el modificador private hace que el atributo
solo puede ser utilizado por los métodos de la clase; por su parte el modificador public
hace que el atributo pueda ser utilizado por los métodos de la clase y desde otras clases
donde se utilicen objetos de la misma. NO se debe tener en las clases atributos con este
alcance. El modificador protected se estudiará más adelante.
Como su nombre lo indica el tipo dice el tipo de valor que puede almacenar este atributo.
Observar que un atributo puede ser de cualquiera de los tipos primitivos estudiados en la
conferencia anterior, pero también puede ser de tipo clase, esto quiere decir que el atributo
de una clase puede ser un objeto de una clase dada. Esto da una tremenda expresividad al
lenguaje y se puede tener objetos que contengan otros objetos.
Todo atributo tiene un nombre que responde a las reglas de los identificadores estudiados
en la clase anterior. Los programadores Java por convención utilizan letras minúsculas para
comenzar el nombre de un atributo.
El valor por defecto es un valor que puede tomar el atributo cuando se cree un objeto de
esta clase. Observar que se ha escrito entre corchetes, lo que indica que no necesariamente
tiene que estar presente.
Es importante tener en cuenta que la declaración de un atributo termina con punto y coma.
2
Ejemplo:
Se quiere construir una clase Recipiente que permita representar paralelepípedos con
base cuadrada, que se utilizan para almacenar líquido, por lo que es importante
conocer el volumen de ellos y dado el costo por metro cuadrado del material con que
se fabrica el costo total de un recipiente.
Por lo tanto se puede pensar que los objetos de este tipo tienen como atributos: la
longitud del lado del cuadrado base y la altura del paralelepípedo y como método uno
que sea capaz de calcular el volumen del mismo y otro que tome el costo por metro
cuadrado el material y calcule el costo total del recipiente.
Representado en UML se tiene:
Recipiente
- lado
- altura
+ volumen
+ costo
Nota: el signo menos que aparece delante del nombre de los atributos, significa que
son privados.
En Java se tiene:
class Recipiente {
private double lado;
private double altura;
// cálculo del volumen
// cálculo del costo
}
Se ha destacado en negritas las palabras claves, cuando se escribe una clase Java
utilizando un editor este destaque no es necesario.
Se han declarado dos atributos: lado y altura, ambos se han declarado de ámbito local a
la clase (privados) y de tipo double de manera que puedan almacenar un número con
coma decimal lo más grande posible.
Cuando ambos atributos tienen los mismos modificadores y los mismos tipos se
pueden declarar en una sola línea:
class Recipiente {
private double lado, altura;
// cálculo del volumen
// cálculo de la atura
}
3
La declaración de los métodos es más compleja y sigue la siguiente sintaxis:
4
La sintaxis como se observa es similar a la de los atributos, excepto que aquí no se escriben
los modificadores.
Es importante diferenciar un atributo de una variable de un método. Los atributos son
“visibles” para todos los métodos, es decir todos los métodos de la clase pueden utilizar el
valor que tienen estos atributos. Sin embargo una variable que se declare en un método es
local al mismo, sólo puede ser utilizada en dicho método.
De las instrucciones posibles a utilizar se mencionarán hoy dos de ellas:
Instrucción de asignación:
Se utiliza el signo = y tiene la sintaxis:
<variable> = <expresión>;
indicando que la variable de la izquierda recibe el valor de la expresión de la derecha.
Esta expresión es similar a la estudiada en el tema de algoritmos (), aunque por el
momento solo se utilizarán los operadores aritméticos usuales: + , *, -, /, % con el
significado que ya se ha visto.
Un estudio más riguroso de las expresiones se hará en una conferencia posterior.
Instrucción de retorno
El valor que retorna, qué devuelve un método se especifica en una instrucción return,
que tiene la forma:
return [<expresión>];
Es importante que coincida el tipo de la expresión con el tipo que se especifica en el
encabezamiento del método.
En todos los métodos que devuelven un valor tiene que estar presente una o varias
instrucciones return, sólo en el caso que el tipo de retorno sea void es que se admiten
métodos sin esta instrucción. Esta instrucción también significa que el método termina.
Ejemplo:
Retomando el ejemplo visto anteriormente, era necesario completar la clase con un
método que fuera capaz de calcular el volumen del recipiente, esto pudiera hacerse
de la siguiente forma:
class Recipiente {
private double lado;
private double altura;
public double volumen(){
double vol;
vol=lado*lado*altura;
return vol;
}
// cálculo del costo
}
5
Se ha declarado un método que se llama volumen, que es público, por lo tanto
puede ser utilizado en cualquier otro lugar; no necesita parámetros, porque utiliza
para el cálculo solo los atributos de la clase. Calcula un double que es el tipo de
retorno. Se han programado tres instrucciones: la primera declara una variable
interna para el método (vol), la segunda calcula el valor de esta variable con la
fórmula conocida y la tercera devuelve este valor. ¿Es necesaria la variable? En este
caso no es necesaria y el método se pudiera reformular de la siguiente manera:
class Recipiente {
private double lado;
private double altura;
public double volumen(){
return lado*lado*altura;
}
// cálculo del costo
}
Es importante observar:
En ambas implementaciones el uso de los punto y coma para finalizar las
instrucciones.
Utilización de las llaves para determinar el alcance de la clase y el alcance
del método.
No uso de parámetros en este caso pues la operación se lleva a cabo con los
atributos de la clase, pero la necesidad de escribir los paréntesis.
Uso de mayúsculas y minúsculas, recordar que el Java las diferencia, por lo
tanto el escribir class, public, private, double, return con mayúscula sería un
error o el Java no lo interpretaría como se desea.
El otro método es el cálculo del costo del recipiente, conocido el costo unitario del
material con que se hace. Aquí se tiene una información adicional: el costo por
metro cuadrado del material con que se fabrica el recipiente. Este dato constituye un
parámetro del método.
class Recipiente {
private double lado;
private double altura;
public double volumen(){
return lado*lado*altura;
}
6
public double costo(double cm){
double area= lado*lado+4*lado*altura;
return area*cm;
}
}
7
a) A los métodos que “ponen” un valor en el atributo les llaman set y seguido el
nombre del atributo, tienen generalmente un parámetro del mismo tipo del atributo
que es el que se le asigna al mismo. Realizan, generalmente alguna operación de
chequeo sobre el o los parámetros para comprobar su corrección antes de colocarlo
en el atributo. Estos métodos por lo general no devuelven ningún valor por lo tanto
el tipo de retorno es void.
b) A los métodos que extraen, que devuelven el valor del atributo les llaman get
seguido del nombre del atributo. En atributos simples no utilizan, generalmente,
parámetros y el tipo de retorno coincide con el tipo del atributo.
Ejemplo
Se puede completar el ejemplo con los métodos vistos:
class Recipiente {
private double lado;
private double altura;
// método para calcular el volumen
public double volumen(){
return lado*lado*altura;
}
// método para calcular el costo
public double costo(double cm){
double area= lado*lado+4*lado*altura;
return area*cm;
}
// método para obtener el lado
public double getLado(){
return lado;
}
// método para poner el lado
public void setLado(double newLado){
lado=newLado;
}
// método para obtener la altura
public double getAltura(){
return altura;
}
// método para poner la altura
public void setAltura(double newAltura){
altura=newAltura;
8
}
}
Observar:
Se han incluido los métodos getLado() y getAltura(), sin parámetros y el
tipo de retorno es el mismo que el del argumento que ellos están
“devolviendo”. El cuerpo de estos métodos es simplemente una instrucción
return que devuelve el valor del atributo correspondiente.
Se ha incluido el método setLado(double newLado) cuya función es tomar
el valor que se pasa como parámetro y ponerlo en el atributo. El parámetro
del método se puede ver como un valor que viene de fuera de la clase, que
en este momento no es importante saber de donde procede: si se lee, si se
calcula, etc.; la clase no necesita conocer el origen del valor, es un valor que
está llegando y que se le va a asignar al atributo lado. El tipo de retorno es
void porque está método solo altera el atributo, no devuelve nada.
El método setAltura es similar al método explicado anteriormente.
Utilización de los comentarios.
En el ejemplo se han utilizado los dos métodos de acceso para cada atributo, esto no
siempre es necesario y es importante comprender que es una decisión del programador si
los escribe o no. Pueden estar presentes los dos, puede que esté uno y no el otro, o puede
que no estén presentes ninguno de los dos, todo depende de la política que se quiera seguir
para acceder a los atributos. También es necesario aclarar que el nombre set y get no es
obligatorio, es una práctica usual entre los programadores, pero pueden ser llamados de
cualquier modo.
Ejemplo 2
Se desea construir una clase que permita trabajar puntos del plano, de manera que
se puedan trasladar a nuevas coordenadas, conocidos los desplazamientos.
En UML la representaríamos de la siguiente forma:
Punto
- double x
- double y
+ setX
+ setY
+ getX
+ getY
+ desplaza
9
Esta clase tiene como atributos las coordenadas x e y del punto. Los métodos son
las operaciones de acceso a cada uno de los atributos y el método desplaza que
calcula, conocidos x e y, las nuevas coordenadas del punto.
En Java quedaría:
class Punto{
10
CONCLUSIONES
Se ha estudiado:
La forma de representar una clase en UML
La sintaxis para escribir una clase en Java:
o Atributos
o Métodos
Los modificadores private y public para atributos y métodos.
Los métodos de acceso a los atributos (set y get)
Bibliografía
- Conferencia en el servidor.
11