Está en la página 1de 9

Programación

Material Conferencia

OBJETOS EN JAVA.

En la conferencia anterior se estudió:


- Declaración de clases en Java. En particular:
- Definición de atributos
<modificador> <tipo> <nombre> [= <valor por defecto>];
- Definición de métodos.
<modificador> <tipo_de_retorno> <nombre> (<parámetro>*)
{
<instrucciones>*
}
- Instrucciones que se utilizarían: declaración de variables, asignación, de
retorno.
Se programó una clase que representaba un recipiente en forma de paralelepípedo de base
cuadrada, del cual se quiere conocer su volumen y el costo de construcción, conocido el
costo unitario del material.
La clase quedó de la siguiente manera:
class Recipiente {
private double lado;
private double altura;

public double volumen() {


return lado*lado*altura;
}
public double costo(double cm) {
double area=lado*lado+4*lado*altura;
return area*cm;
}
public void setLado(double newLado) {
lado = newLado;
}
public void setAltura(double newAltura) {
altura = newAltura;
}
public double getLado() {
return lado;
}
public double getAltura() {
return altura;
}

1
Ahora se puede formular las siguientes preguntas:
¿Cómo crear un objeto a partir de esta clase?
¿Cómo pasar mensajes a esos objetos de manera que realicen alguna acción?
¿Dónde se crean estos objetos para tener un programa que se pueda ejecutar?

En la presente conferencia se dará respuesta a cada una de estas preguntas.

Creación de objetos en Java.


Para trabajar con un objeto en Java hay que tener una variable declarada con el tipo de la
clase de la cual ese objeto es instancia.
La forma de declararlo entonces es la misma que la de cualquier variable:
<tipo clase> <nombre variable>;

Ejemplo:
Recipiente c;

de esta forma se tiene una variable c de tipo Recipiente.


Con esta sentencia, solo se está declarando la variable, aún el objeto no está construido.
Para construirlo se utiliza un método especial que de forma implícita Java incluye en todas
las clases, denominado constructor, que tiene como nombre el mismo nombre de la clase.
Quiere decir que la clase Recipiente tiene un método que el Java incorpora de forma
implícita llamado Recipiente() (recordar que todos los métodos tienen paréntesis para
indicar los parámetros, en este caso el constructor por defecto es un método que no tiene
parámetros).

Para construir un objeto se utiliza la sentencia


<nombre objeto> = new <constructor>;

en este caso sería:

c = new Recipiente();

las sentencias de declaración de variable y la creación del objeto pueden ser escritas en una
única sentencia:

Recipiente c = new Recipiente();

Con esta sentencia se están haciendo dos cosas:


1. Declarando una variable (c) de tipo Recipiente (un objeto)
2. Creando el objeto.

El tipo de estas variables se denominan en Java tipo de referencia. Más adelante se


explicará la diferencia entre un tipo primitivo (como int, double, float, etc.) y un tipo de
referencia.

2
De esta forma se puede declarar y tener tantos objetos como se necesite.
Es importante tener presente que cuando se crea un objeto con el constructor por defecto
los atributos del mismo no tienen valor a menos que se le hayan declarado algún valor por
defecto en la definición de la clase.

Paso de mensajes a los objetos

Luego de creado un objeto es necesario utilizarlo, y para ello se ha dicho que se le pasan
mensajes a los cuales este objeto responde. Los mensajes que un objeto puede “entender”
son aquellos relacionados con sus métodos públicos.
Para enviar un mensaje a un objeto se utiliza la sintaxis:
<nombre objeto>.<nombre método>(<valor de parámetros>*);

Ejemplo.
// declaración y creación del objeto c.
Recipiente c = new Recipiente();

/* se tiene un objeto “vacío” para ponerle valores


a sus atributos se pueden utilizar los métodos set
*/

c.setLado(10); // se inicializa el lado con 10


c.setAltura(5); // se inicializa la altura con 5;

/* crear una variable con el valor de la volumen


del recipiente
*/
double v = c.volumen();

En el ejemplo se han utilizado tres de los métodos de la clase Recipiente: setLado(),


setAltura(), volumen().
Al escribir c.setLado(10)se dice que al objeto c se le pasa el mensaje setLado, lo que
hace que se ejecute un método con ese nombre. Como ese método necesita un parámetro
(ver la declaración de la clase) es necesario escribir el valor real de ese parámetro, en este
caso 10. ¿Qué sucede entonces? El método setLado toma el valor 10 como el valor de la
variable newLado y realiza la asignación que se encuentra en su cuerpo. Por lo tanto el 10
va a ponerse en el atributo lado del objeto.
El mensaje c.setAltura(5)hace una acción similar a la descrita anteriormente y por lo
tanto ya los dos atributos del objeto c tienen valor (lado 10, altura 5).
Se puede entonces enviar el mensaje c.volumen(), el cual no necesita parámetros y lo
que hace es calcular el volumen del recipiente, este métodos nos devuelve un valor que se
le asigna a la variable v.
Si ahora se desea conocer cuál es el costo de este recipiente si el material que se utiliza vale
5 pesos por metro cuadrado, habría que incluir un mensaje al objeto para que sea capaz de
calcular el costo, este mensaje necesita el valor del costo del material.

3
double cr = c.costo(5);

Observar que cuando se envía el mensaje el parámetro se pasa SIN TIPO, este parámetro
puede ser una constante, como este caso, pero puede ser también una expresión que tome
un valor double.
double costoalum = 5;
double cr = c.costo(costoalum);

Aquí se utilizado una variable (costoalum) a la cual se le asigna el valor 5, que es la que se
le pasa al mensaje. Cuando se envía el mensaje al objeto el valor de esta variable se le pasa
al parámetro del método (cm) y luego este se utiliza en el cálculo del costo, se realizan las
operaciones y el valor del costo retorna y se almacena en la variable cr.
Estas operaciones de creación de un objeto y paso de mensajes se pueden realizar en
cualquier método de cualquier clase, que es en definitiva donde se realizan la
programación de las acciones que se desean desarrollar.

Aplicación Java de Consola

Ahora se responderá a la pregunta: ¿cómo hacer un programa que se pueda ejecutar para
realizar una acción determinada? A esto es lo que se ha denominado aplicación Java. El
calificativo de consola, es porque la entrada/salida de estas aplicaciones es una ventana
DOS, o sea no son aplicaciones que corran sobre una ventana Windows, con controles, etc.
Ello se estudiará en el segundo semestre.
Para ello se necesita, como siempre en Java, una clase que contenga un método especial
llamado main, que siempre debe tener este nombre y la siguiente sintaxis:

public static void main(String [] args){


}

En esta sintaxis hay algunos elementos conocidos: los modificadores public y void, que
tienen el mismo significado que hemos estudiado: un método que puede ser accedido desde
cualquier lugar (public) y que no devuelve valor alguno (void). El modificador static no se
ha estudiado, por el momento sólo se comentará que significa que para activar este método
no se necesita de crear un objeto de la clase a la cual pertenece.
Este método, como se observa, tiene un parámetro (args, pudiera ser otro nombre
cualquiera) que es de tipo String, por el momento siempre se escribirá de esta manera, pues
este tipo de dato no ha sido estudiado, ni tampoco el significado de los corchetes.

4
Entonces, una aplicación Java queda de la forma:
class Aplicacion{
public static void main(String [] args){
<instrucciones>*
}
}

El nombre de la clase puede ser cualquier otro.


Las instrucciones del método pueden ser cualquier instrucción Java de la que se han
estudiado.
Ejemplo:
Si se desea que en este programa se calcule el volumen de un paralelepípedo con base
cuadrada de lado 4 y altura 8, se haría de la siguiente forma:
class Principal {
public static void main(String[] args) {
Recipiente c = new Recipiente();
c.setLado(4);
c.setAltura(8);
double v = c.volumen();
}
}

Ahora surge otro problema: se crea el recipiente, se inicializan su valores de lado y altura
(con 4 y 8 respectivamente), se calcula el volumen del recipiente y se le asigna a la variable
c. ¿Cómo saber el valor de esta variable?
Se necesita alguna instrucción de salida que permita visualizar el valor de una variable, un
mensaje, etc. Algo equivalente al “escribir” del pseudocódigo que se ha utilizado en el
tema de Algoritmos.
Para ello Java proporciona una clase que, entre otras cosas, ayuda a escribir en la pantalla
de la computadora: la clase System. Esta es una clase especial, porque para trabajar con
ella no necesitamos objetos, solo la clase.
Para ello se utiliza la sintaxis:
System.out.println(<expresión>);
Si se desea conocer un poco más sobre esta sintaxis se puede decir que out es el nombre
de un atributo de la clase, que es a su vez un objeto que pertenece a la clase
PrintStream, la cual tiene un método llamado println que escribe sobre la pantalla
el valor de la expresión.
En el caso de estudio quedaría:
System.out.println(v);

5
El argumento de println, tiene que ser único. Si se desea, como es usual, escribir una
cadena que indique lo que se está imprimiendo y luego el valor es necesario escribir una
constante cadena (recordar que se escribe entre comillas) y “sumarla” con la variable que se
desea imprimir. Esta “suma”, realmente es una concatenación como se estudiará más
adelante.
System.out.println(“Volumen= “+v);

La aplicación se escribiría entonces:


class Principal {
public static void main(String[] args) {
Recipiente c = new Recipiente();
c.setLado(4);
c.setAltura(8);
double v = c.volumen();
double cr= c.costo(5);
System.out.println("Volumen: "+v);
System.out.println("Costo: "+cr);
}
}

Aquí se presenta otro problema: los valores que se están utilizando para el lado y la altura
son fijos. ¿no podrán ser leídos como se hacía en pseudocódigo con la instrucción leer?
En este caso Java también brinda algunas clases, pero son mucho más complicadas de usar.
En Internet se encuentran algunas clases que ayudan a la lectura de valores primitivos:
enteros, reales, caracteres y lógicos. Se utilizarán alguna de estas clases obtenidas de
Internet y en el anexo a esta conferencia se explica su uso.

Compilación y corrida de una aplicación Java


Si se conoce ya la forma de escribir una aplicación Java. ¿Cómo se puede hacer en la
computadora?
Para realizar esta operación se tiene que estar seguro de tener el compilador y la máquina
virtual instalados.
Los pasos entonces son:
1. Crear una carpeta donde se almacenen todos los ficheros con que se vayan a
trabajar.
2. Crear un fichero con cada una de las clases. El nombre del fichero debe coincidir
con el nombre de la clase. Los ficheros tienen que tener extensión .java. Estos
ficheros son ficheros textos, o sea pueden ser creados con cualquier editor de texto
simple, por ejemplo el bloc de notas.

6
3. Se debe ir a la ventana de comandos, para ello se puede:
a. Start  Run..  escribir cmd
b. Start  Accesorios  Command Prompt

4. Utilizar el comando cd para cambiarse a la carpeta que se creó donde están todos
los ficheros.
5. Compilar cada fichero, para ello escribir
javac <nombre fichero>.java
se produce la compilación, indicando errores de sintaxis si los hubiera. Se debe leer
los errores con cuidado y la línea donde se produce para localizarlos y arreglarlos.
Luego de arreglados se vuelve a compilar. Si no hay errores se obtiene en el mismo
fichero un programa en bytecode que en definitiva es un fichero con el mismo
nombre, pero con extensión .class.
6. Luego de compilar todos los ficheros y tener todos los .class, se debe usar la
máquina virtual y correr la aplicación, o sea la clase que contiene el método main.
Para ello se usa el comando:
java <nombre clase>
es importante respetar mayúsculas y minúsculas.
Con esto se corre la aplicación, se piden datos, se escriben resultados, etc.

CONCLUSIONES

Se ha estudiado:
- La forma de declarar y crear un objeto, utilizando el constructor por defecto
que tienen todas las clases.
- Pasar mensajes a los objetos.
- Crear una aplicación Java de consola. Utilizando el método main.
- Hacer entradas/salidas sencillas.

Bibliografía

- Conferencia en el servidor.
-

7
Clase para lectura desde el teclado
Se ha comentado la necesidad de un “leer” en Java para poder hacer aplicaciones que
sirvieran para varios casos. Además se comentó del uso de algunas clases que se pueden
obtener desde Internet.

Java brinda una clase que entre otras funcionalidades sirve para leer datos desde la consola.
Esta clase de llama Scanner y se proporciona junto con el Java. Las clases que Java
proporciona al ser instalado están agrupadas en “paquetes”, los cuales se pueden considerar
carpetas organizadas y en cada una de estas carpetas hay un conjunto de clases. La clase
Scanner se encuentra en un paquete que se llama útil. Por lo tanto, donde se quiera leer se
debe incluir al inicio del fichero la instrucción:

import java.util.Scanner;

lo que quiere decir que el paquete útil es proporcionado por Java y de él se utilizará la clase
Scanner.

Luego donde quiera efectuarse la lectura se crea un objeto de esa clase, como se ha
explicado anteriormente, por ejemplo:

Scanner r = new Scanner(System.in);

El objeto se ha creado con un constructor que tiene un parámetro: System.in, que es un


objeto que permite manipular la lectura desde el teclado.

Al objeto r ahora se le pueden pasar mensajes para leer datos de diferentes tipos:

nextInt() devuelve un entero


nextShort() devuelve un short
nextLong() devuelve un long
nextFloat() devuelve un float
nextDouble() devuelve un doble
nextBoolean() devuelve un lógico

Observar que no se puede leer un char. Se estudiará más adelante la forma de hacerlo.

Si se desea hacer una aplicación para calcular el volumen y el costo de un recipiente


pudiera hacerse de la siguiente forma:

8
import java.util.Scanner; // importar el paquete

class Principal {
public static void main(String[] args) {
// Crear el objeto para leer
Scanner rs=new Scanner(System.in);
// Leer los tres datos
double l=rs.nextDouble();
double h=rs.nextDouble();
double costoalum=rs.nextDouble();
// Crear el recipient y enviar mensajes
Recipiente c = new Recipiente();
c.setLado(l);
c.setAltura(h);
double v = c.volumen();
double cr= c.costo(costoalum);
System.out.println("Volumen: "+v);
System.out.println("Costo: "+cr);
}
}

De esta manera la aplicación queda general y la podemos ejecutar cuantas veces se quiera,
dando los valores que necesitemos en cada caso.

También podría gustarte