Está en la página 1de 19

Asignatura: Programación Orientada a Objetos

Carrera: Analista Programador Universitario Plan 2008


Facultad de Ingeniería – Universidad Nacional de Jujuy

INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN JAVA

Creación de Clases

Programar en el Lenguaje de Programación de la Plataforma JAVA implica crear clases. La


definición de una clase en este lenguaje se desarrolla usando la siguiente nomenclatura:

class Nombre_de_la_clase
{
}
donde:
 class es la palabra reservada por el lenguaje para indicar la definición de una clase.
 Nombre_de_la_clase es el nombre que se le asignará a la clase creada
 { } indica el ámbito de la clase. Entre estas dos llaves se crearán los atributos y métodos1
de la clase creada.

Nomenclatura para la definición de Nombres de Clase

1. Los nombres de las clases deben ser sustantivos en Singular


2. La primera letra del nombre de la Clase debe ser mayúscula.
3. El resto de la palabra debe ser minúscula
4. En caso de conformar el nombre de la clase con varias palabras se indica la distinción de
cada una de ellas con letra en mayúscula

Ejemplos:

class Persona class MiPrimeraClase


{ {
} }

Figura 1. Ejemplos de definición de clases


Los archivos con extensión .java
Las clases en JAVA son definidas en archivos de texto. Estos archivos tienen extensión .java. El
nombre del archivo debe coincidir con el nombre de la clase definida. Por lo tanto para los
ejemplos indicados en la Figura 1 existirá un archivo con el mismo nombre.

class Persona
Su contenido es {
}

Figura 2. La definición de una clase se guarda en un archivo con extensión .java

1
En JAVA las operaciones de las clases se denominan métodos.

Autor: Ingeniero Ariel Alejandro Vega Página 1


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

JAVA permite que se definan más de una clase en un único archivo con extensión .java. Cuando
ocurre esta situación el nombre del archivo debe coincidir con la clase que se haya definido como
public. Solo puede existir una clase pública en un archivo .java.

public class Persona


¿Su contenido {
puede ser?
} 
class Computadora
{
}

class Persona
{
¿Su contenido } 
puede ser? class Computadora
{
}

class Persona
{
¿Su contenido
} 
public class Computadora
puede ser? {
}

Figura 3. Cuando se definen varias clases en un archivo .java el nombre del mismo
debe ser el de la única clase definida como public
Los paquetes
Los paquetes permiten organizar los archivos .java (y en consecuencia las clases) en categorías que
representen características comunes entre las clases. No pueden existir dentro de un paquete
clases con el mismo nombre pero si es posible que existan clases con el mismo nombre en
diferentes paquetes. Los paquetes se pueden utilizar para ocultar clases evitando que otros
programas o paquetes accedan a clases que son de uso exclusivo de una aplicación determinada,
ya que por defecto las clases de un paquete solo reconocen las clases que se hallan en el mismo
paquete. Al organizar ficheros .java en paquetes se proporciona un mecanismo sencillo y
homogéneo para acceder a clases generadas por otros programadores (usando la sentencia
import). Físicamente son carpetas o directorios que alojan ficheros .java.
La sentencia package crea y/o indica a que paquete pertenece la clase de un fichero.java. En caso
de que un fichero .java sea definido en un paquete, la sentencia package debe ser la primera línea
de código generada. Solo puede existir una sentencia package por archivo .java

Autor: Ingeniero Ariel Alejandro Vega Página 2


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

(dominio) package dominio;


class Persona
(Persona.java) {
}

Figura 4. Ejemplo de definición de un paquete. Físicamente es un directorio


Un paquete puede contener a uno o varios paquetes. Para indicar la jerarquía de paquetes a la
que pertenece un archivo .java se establece un separador entre los nombres de los paquetes de la
jerarquía. Este separador es el “.”. La jerarquía de paquetes físicamente es una jerarquía de
directorios.

(modelo) package modelo.dominio;

(dominio) class Persona


{
(Persona.java) }

Figura 5. Ejemplo de definición de una jerarquía de paquetes


Nota Importante: El nombre completo de una clase está conformado de la siguiente forma
Jerarquía de paquetes + “.” + Nombre de la clase
Ejemplo: modelo.dominio.Persona

Ejecución de Aplicaciones JAVA J2SE. Salida por Consola

Desarrollar aplicaciones JAVA J2SE, implica generar clases. Al ejecutar la aplicación se crearán en
memoria objetos de las clases involucradas y se enviarán mensajes a los mismos para que ejecuten
el código introducido en los métodos invocados.
El punto de arranque de una aplicación JAVA J2SE se realiza desde alguna clase que posea el
método main(). Cuando la Máquina Virtual de JAVA (JVM, en inglés) halle este método en alguna
de las clases, ejecutará el código existente en ella. Para entender la nomenclatura de este método
observe el siguiente ejemplo:
Resultado:
public class MiPrimerEjemplo Hola Mundo
{
public static void main(String[] args
{
System.out.println(“Hola mundo”);
}
}
Figura 6. Ejemplo de Ejecución de una Aplicación JAVA J2SE

Autor: Ingeniero Ariel Alejandro Vega Página 3


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

En este ejemplo se observa como se ha de definir el método main(). La descripción de cada parte
se realizará al momento de describir la nomenclatura y uso de métodos JAVA. Si se define en
alguna clase el método main() como se describe en el ejemplo de la Figura 6, al ejecutar la
aplicación JAVA se mostrara por salida de consola la frase “Hola Mundo”. Toda aplicación
desarrollada en JAVA J2SE que quiera ejecutarse debe poseer al menos un método main() definido
en alguna de las clases de la aplicación.
Salida por Consola
System.out.println(a) donde a es cualquier variable o literal de cualquier tipo de dato, permite
visualizar dicha variable o literal por consola. Para ello convierte el valor de la variable o el literal
en una cadena de caracteres.
Proceso de Ejecución de Aplicaciones JAVA
Dos de las características importantes de JAVA son la portabilidad y la ejecución multiplataforma
como consecuencia de la portabilidad. Esto se logra porque JAVA ejecuta dos procesos para
realizar la ejecución de una aplicación JAVA.
1. Por un lado realiza un proceso de compilación que traduce el programa fuente (los
archivos con extensión .java) a un código intermedio cercano a los lenguajes máquina de
las computadoras, el resultado no es un código máquina concreto sino un código binario
denominado bytecode que es independiente de la computadora y del sistema operativo.
El código del bytecode se almacena en archivos con extensión .class (por cada archivo
.java se genera un archivo .class). El compilador que realiza esta acción es un archivo de la
biblioteca del Java Development Kit (JDK) denominado javac.

Figura 7. Proceso de compilación


2. Por otro lado el proceso de ejecución requiere que en cada máquina donde se deba
ejecutar la aplicación posea una JVM. La JVM es un intérprete que recibirá como entrada
los bytecode y generará las instrucciones elementales para ejecutar la aplicación en la
computadora que aloja la JVM. Por lo tanto la JVM es el intérprete de bytecode’s. El
intérprete es un archivo del Java RunTime Environment (JRE) denominado java.

Figura 8. Proceso de interpretación


Como se observa en la Figura 8, los bytecodes son interpretados en conjunto con los datos
(peticiones del usuarios, datos que ingresan al programa desde otras aplicaciones) por la
JVM (indicada como JVM-1) de la máquina instalada en la computadora donde se
ejecutará la aplicación (Maquina base.). La existencia del bytecode permite que este

Autor: Ingeniero Ariel Alejandro Vega Página 4


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

mismo proceso se pueda realizar en otras máquinas, siempre que en la misma esté
instalada la JVM compatible con la plataforma de la computadora (Sistema Operativo).

Figura 9. Proceso de interpretación. Observe que en ambas máquinas se nterpreta el


mismo bytecode. Observe que cada máquina tiene su respectiva JVM

Definición de atributos de una clase. Tipos de Datos. Modificadores de acceso

La declaración de un atributo de una clase consiste en definir una variable fuera del ámbito de un
método.
En java las variables se declaran de la siguiente forma:
Tipo_de_dato Nombre_de_la_variable;
Tipos de Datos
Para poder declarar una variable es necesario previamente definir el tipo de dato de esa variable.
En JAVA se definen dos familias de tipos de datos:
 Los primitivos.
 Las referencias u objetos.
Los primitivos son tipos de datos elementales, esto es, sirven para definir variables de forma
análoga a como lo hacen los lenguajes de programación no orientados a objetos. Su objetivo es
reservar un espacio de memoria para que la variable pueda alojar en el mismo un valor. En el caso
especial de JAVA, los mismos pertenecen a la biblioteca del JDK de tal forma que el tipo de dato
posea el mismo espacio en memoria y por lo tanto el mismo rango de valores posibles en
cualquiera de las plataformas que posean una JVM. Todos los primitivos poseen un rango
predefinido de valores permitidos (definidos por el tamaño de memoria que reserva el tipo de
dato) y un valor predefinido por defecto.
Las referencias u objetos son tipos de datos complejos, en el sentido que sus clases pueden ser
usadas para la definición de variables. Esto provoca que estas variables puedan poseer atributos y
métodos. A diferencia de los tipos primitivos, las referencias u objetos al ser declarados no ocupan
espacio en memoria, su referencia es igual a null. Esto se debe a la forma en particular por la cual
JAVA gestiona la memoria para los objetos de una aplicación. Esta gestión es descripta más
adelante. Existen tipos de datos que son objetos u referencias predefinidos en la biblioteca de
JAVA (cuyos atributos generalmente son valores constantes). El programador también puede crear
clases que se utilizarán como tipo de Datos. Estos se denominan referencias o tipos definidos por
el usuario. Las estructuras de datos en JAVA son definidas como clases, por lo tanto también son
tipos referencias (por ejemplo los arreglos, vectores y colecciones).

Autor: Ingeniero Ariel Alejandro Vega Página 5


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

El siguiente gráfico muestra los tipos de datos en JAVA:

Figura 9. Tipos de Datos en JAVA

Autor: Ingeniero Ariel Alejandro Vega Página 6


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

Tipos Primitivos
La siguiente tabla indica cual es el valor por defecto de cualquier variable que se haya definido con
un tipo de dato primitivo.
Tipo de dato Valor predeterminado
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
boolean False
Tabla 1. Valor por defecto para variables cuyo tipo de dato es primitivo
Observe que para los tipos de datos long, float y double el valor por defecto posee una letra
al final. Esto se debe a que para JAVA todos los valores literales numéricos y enteros por defectos
se consideran del tipo int. De la misma forma todos los valores literales de tipo numéricos y
decimal por defecto se consideran double. Esto es consecuencia de que JAVA gestiona una
Conversión Implícita para Variables cuyo tipo de datos es primitivo, de la siguiente forma:
double ≤ float ≤ long ≤ int ≤ short ≤ byte
Consecuencias de este tipo de conversión
Ejemplo 1:

public class MiPrimerEjemplo Resultado: 40


{
public static void main(String[] args) Razones:
{ El literal 40 es un entero int. JAVA
short z; permite asignar un literal int a un tipo
byte x = 40; de datos menor sin consecuencias
z = x; inesperadas si el literal se halla dentro
System.out.println(z); del rango del tipo de datos menor.
} Por la conversión implicita se puede
} asignar un byte a short.

Figura 10. Conversión implicita de literal. Conversión implicita de byte a short

Autor: Ingeniero Ariel Alejandro Vega Página 7


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

Ejemplo 2:

public class MiPrimerEjemplo Resultado: -128 o no permite compilar


{
public static void main(String[] args) Razones:
{ El literal 128 es un entero int. JAVA. El
short z; rango del byte es de -128 a 127 (vea
byte x = 128; Figura 9). Por lo tanto se supera en una
z = x; unidad el valor maximo. Por ello se
System.out.println(z); pierde precisión y pasa al valor menor del
} rango. Como consecuencia el valor
} almacenado en x es -128.
Las últimas versiones de JAVA advierten
esta pérdida y no permite la asignación.
Figura 11. Error tipico al intentar convertir un literal a un tipo de dato menor a int
Ejemplo 3:

public class MiPrimerEjemplo Resultado: 128


{
public static void main(String[] args) Razones:
{ El literal 128 es un entero int. JAVA
long x = 128; convierte en forma implicita un literal
System.out.println(x); numérico a un tipo primitivo superior.
}
}

Figura 12. Conversión implícita de un tipo de dato numérico primitivo a otro primitivo
numérico superior
Ejemplo 4:

public class MiPrimerEjemplo Resultado: No permite compilar


{
public static void main(String[] args) Razones:
{ El literal 3245678999 es un entero int
long x = 3245678999; cuyo valor supera el rango que el tipo
System.out.println(x); entero soporta. JAVA no permite asignar
} un literal int o float a un tipo de
} datos superior si el valor del literal supera
su rango.
Figura 13. Conversión implícita de un tipo de dato numérico primitivo a otro primitivo
numérico superior

Autor: Ingeniero Ariel Alejandro Vega Página 8


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

Ejemplo 5:

public class MiPrimerEjemplo Resultado: 3245678999


{
public static void main(String[] args) Razones:
{ El literal 3245678999L es un long
long x = 3245678999L; porque la letra L indica a JAVA que no es
System.out.println(x); un int sino un long.
}
}

Figura 14. Conversión de un literal int a un long


Modificadores de acceso
Los modificadores de acceso se aplican principalmente a los atributos y métodos. Permiten definir
la visibilidad y acceso a los mismos.
Los modificadores de acceso, determinan desde qué clases se puede acceder a un determinado
elemento (atributo o método). En JAVA existen 4 tipos: public, private, protected y el tipo por
defecto, que no tiene ninguna palabra clave asociada, pero se suele conocer como default o
package-private.
Si no especificamos ningún modificador de acceso se utiliza el nivel de acceso por defecto
 Nivel de acceso por defecto: consiste en que el elemento puede ser accedido sólo desde
las clases que pertenezcan al mismo paquete.
 Nivel de acceso public: permite a acceder al elemento desde cualquier clase,
independientemente de que esta pertenezca o no al paquete en que se encuentra el
elemento.
 Nivel de acceso private: es el modificador más restrictivo y establece que los elementos
que lo utilizan sólo pueden ser accedidos desde la clase en la que se encuentran. Este
modificador sólo puede utilizarse sobre los miembros (atributos o métodos) de una clase y
sobre interfaces y clases internas, no sobre clases o interfaces de primer nivel, dado que
esto no tendría sentido. El modificador private convierte los elementos en privados para
otras clases, no para otras instancias de la clase. Es decir, un objeto de una determinada
clase puede acceder a los miembros privados de otro objeto de la misma clase.
 Nivel de acceso protected: indica que los elementos sólo pueden ser accedidos desde su
mismo paquete (como el acceso por defecto) y desde cualquier clase que extienda la clase
en que se encuentra, independientemente de si esta se encuentra en el mismo paquete o
no. Este modificador, como private, no tiene sentido a nivel de clases o interfaces no
internas.
Los distintos modificadores de acceso quedan resumidos en la siguiente tabla:

Autor: Ingeniero Ariel Alejandro Vega Página 9


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

Tabla 2. Visibilidad y acceso a los atributos y métodos según el tipo de modificador aplicado
Creación de atributos
Ya se mencionó que para crear un atributo hay que definir una variable fuera del ámbito de un
método. Se agrega que esa misma variable debe ser definida dentro del ámbito de la clase
(delimitada por las llaves que obligatoriamente se deben definir al programar una clase).
El formato de la declaración de un atributo es el siguiente:
modificador_de_acceso tipo_de_dato nombre_atributo;
Ejemplos:

public class Circulo public class Rectangulo


{ {
double radio; private double base;
} private double altura;
}
El modificador de acceso del atributo es por Se han definido dos atributos de tipo double.
default (puede ser accedido por las clases Ambos poseen modificador de acceso
del mismo paquete y por los métodos de la private. Ninguna clase puede acceder a ellos,
misma clase). El atributo se define dentro de salvo los métodos de la misma clase.
las llaves que delimitan el ámbito de la clase.
public class Rectangulo public class Rectangulo
{ {
public double base; private double base;
public double altura; protected double altura;
} }
Se han definido dos atributos de tipo double El segundo atributo posee un modificador de
modificador de acceso public. Cualquier acceso protected. Solo puede ser accedido
clase puede acceder a ellos, además de los por las clases del mismo paquete, por las
métodos de la misma clase. subclases (independientemente de si se
hallan o no en el mismo paquete) y por los
métodos de la misma clase
Figura 15. Ejemplos de definición de atributos

Autor: Ingeniero Ariel Alejandro Vega Página 10


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

Nomenclatura para la definición de Atributos de una Clase

1. Los nombres de los atributos no deben ser verbos.


2. La primera letra del atributo debe ser escrita en minúscula.
3. El resto de la palabra también debe ser minúscula
4. En caso de conformar el nombre de un atributo con varias palabras se indica la distinción
de cada una de ellas con letra en mayúscula

Ejemplo

public class Mesa


{
private byte numeroPatas;
private double largo;
private double ancho;
private double altura;
}
Figura 16. Ejemplo de definición de atributos

Definición de métodos de una clase

La declaración de un método de una clase consiste en definir un bloque dentro del cual se podrá
escribir código que represente la acción que debe realizar el método. Un método debe ser escrito
dentro del ámbito de una clase. El formato de la definición de un método es el siguiente:
modificador_de_acceso tipo_retorno nombre_método ( Lista de parámetros )
{
Cuerpo del método
}
Donde
 modificador_de_acceso puede ser public, private, protected o default.
 tipo_retorno indica si el método devolverá algún valor o no. Si devuelve un valor
tipo_retorno indica cual es el tipo de dato del valor que devolverá el método. Si el método
no devuelve ningún valor JAVA define la palabra reservada void, para indicar dicha
situación.
 nombre_método es el nombre con el cual se identificará al método.
 Lista de parámetros: Se declaran dentro del paréntesis que sigue al nombre del método.
Son declaraciones de variables (definidos como tipo_de_dato nombre_variable). Cada uno
de los parámetros es separado del otro por medio del uso de una coma. Un método puede
o no tener una lista de parámetros.
 Cuerpo del método: Contiene el bloque de código que cumple la acción determinada en el
nombre del método. Debe ser escrita dentro de las llaves del método. Estas llaves
determinan el ámbito del método.

Autor: Ingeniero Ariel Alejandro Vega Página 11


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

Ejemplo 1

public class Circulo


{
private double radio;

public void asignarValorRadio(double xRadio)


{
radio = xRadio;
}

}
Figura 17. Ejemplo de método sin retorno de valor
En el ejemplo de la Figura 17 se crea el método cuyo nombre es asignarValorRadio(). El nombre
del método indica la acción que realizará. En este caso se asigna el valor que viene como
parámetro (xRadio) al atributo radio.
Observe que ahora hay dos bloques de llaves. El método ha sido definido dentro del ámbito de las
llaves que definen a la clase Circulo. El método posee a su vez un bloque de llaves que indica
donde inicia y donde finaliza el cuerpo del método.
Observe que el método fue definido con modificador de acceso public. Esto significa que este
método podrá ser visible por cualquier clase y accedido por los métodos de esas clases.
Ejemplo 2

public class Circulo


{
private double radio;

public void asignarValorRadio(double xRadio)


{
radio = xRadio;
}

public double obtenerValorRadio()


{
return radio;
}

}
Figura 18. Ejemplo de método con retorno de valor
En el ejemplo de la Figura 18 observe que la clase Circulo posee 2 métodos. Ambos se hallan
claramente separados uno del otro por sus respectivos bloques delimitados por sus llaves. Ambos
métodos se definen dentro del ámbito delimitado por las llaves que indican donde inicia y finaliza

Autor: Ingeniero Ariel Alejandro Vega Página 12


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

la clase. Observe que se ha definido un atributo. Este atributo no ha sido definido en ninguno de
los 2 métodos, pero si es usado en el cuerpo de ambos métodos.
El nombre del método obtenerValorRadio() indica que este método debe devolver el valor del
atributo radio. Por ello posee un tipo de retorno. Los tipos de retorno deben indicar el tipo de dato
que desea devolver. Dado que radio es un atributo de tipo double el tipo de retorno también
será double. El tipo de retorno es en realidad una variable sin nombre, por ello solo se indica el
tipo de dato. El siguiente paso será entonces asignarle a esta variable el valor que devolverá. Para
ello JAVA utiliza la palabra return definida previamente al literal, variable o método que posea el
valor a ser devuelto. En el ejemplo se debe devolver el radio por ello a continuación de return se
coloca el nombre del atributo. Si se define un tipo de retorno es obligatorio que exista al menos un
return dentro del cuerpo del método.
Ejemplo 3

public class Rectangulo


{
private double base;
private double altura;

public void asignarValores(double xBase, double xAltura)


{
base = xBase;
altura = xAltura;
}
}
Figura 19. Ejemplo de método con más de un parametro
En el ejemplo de la Figura 19 el método asignarValores() posee dos parámetros. Cada parámetro
es una declaración de una variable y se hallan separados por una coma.

Uso de la palabra reservada this en JAVA

La palabra reservada this indica que esa clase está por invocar un atributo o un método que posea.
Para entender qué significa esto observe los siguientes ejemplos:
Ejemplo 3

public class Circulo


{
private double radio;

public void asignarValorRadio(double radio)


{
radio = radio;
}
}
Figura 20. Error tipico al no comprender la precedencia de ambitos

Autor: Ingeniero Ariel Alejandro Vega Página 13


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

En el ejemplo de la Figura 20. El método asignarValorRadio() tiene como finalidad asignar el valor
del parámetro al atributo radio. Observe que el parámetro se llama exactamente igual que el
atributo. El ámbito del parámetro es el cuerpo del método. El ámbito del atributo es toda la clase.
El parámetro tiene mayor precedencia que el atributo porque ha sido definida en el bloque de
código involucrado (el cuerpo del método, recuerde que los parámetros son variables definidas
para el método). Por lo tanto la asignación radio = radio; asigna el valor del parámetro al
¡“parámetro”!, con lo cual nunca se asigna el valor a atributo. Para corregir este error sin
necesidad de cambiar el nombre del parámetro se puede utilizar la palabra this de la siguiente
forma.

public class Circulo


{
private double radio;

public void asignarValorRadio(double radio)


{
this.radio = radio;
}
}
Figura 21. Uso de this para invocar un atributo de la misma clase
La palabra this puede ser utilizada también para invocar un método de la misma clase, por
ejemplo:

public class Circulo


{
private double radio;

public void asignarValorRadio(double radio)


{
this.radio = radio;
}

public double obtenerRadio()


{
return radio; // también puede ser return this.radio
}

public void mostrarDatos()


{
System.out.println(this.obtenerRadio());
}

}
Figura 22. Uso de this para invocar un metodo dentro de la misma clase

Autor: Ingeniero Ariel Alejandro Vega Página 14


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

Encapsulación de atributos en JAVA. Las propiedades

Para implementar en JAVA la encapsulación de los atributos, se recurre a la aplicación de


propiedades de primer nivel.
Una propiedad de primer nivel consiste en definir un atributo en forma privada, de tal forma que
solo puede ser accedida para lectura y escritura por los métodos correspondientes. Estos métodos
normalmente se conocen como métodos accesores y son dos: get (para poder obtener el valor de
un atributo) y set (para asignar un valor a un atributo).
Por lo tanto la propiedad de un atributo consiste en la definición del mismo en forma privada más
sus respectivos métodos accesores.

public class Circulo


{
private double radio;

public void setRadio(double radio)


{
this.radio = radio;
}

public double getRadio()


{
return radio;
}

}
Figura 23. Definición de la propiedad radio
En la Figura 23 se ha creado la propiedad radio. Es una propiedad porque:
1) El atributo radio es private
2) Se ha creado su método get(). La nomenclatura que se adopta para los métodos get es
iniciar con la palabra get seguida del nombre del atributo.
3) Se ha creado su método set(). La nomenclatura que se adopta para los métodos set es
iniciar con la palabra set seguida del nombre del atributo.

Creación de Objetos. Los constructores

Para crear objetos a partir de una clase es necesario que esa clase posea un constructor. Un
constructor es un bloque de código cuyo objetivo principal es indicar que sucederá al momento de
crear un objeto. Por defecto JAVA define para cada clase un constructor sin parámetros que tiene
la siguiente forma:
public nombre_clase()
{
}

Autor: Ingeniero Ariel Alejandro Vega Página 15


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

El nombre del constructor debe coincidir siempre con el nombre de la clase. Las llaves permiten
definir el código que se desea que se ejecute inmediatamente después de crear el objeto. Para
crear el objeto a partir de una clase se debe declarar una variable cuyo tipo sea la clase de la cual
se crea el objeto y realizar una asignación usando la palabra new y un constructor de la clase.
Ejemplo
Resultado:
public class MiPrimerEjemplo Se crea el objeto
{ denominado unCirculo
public static void main(String[] args {
Circulo unCirculo = new Circulo();
}
}
Figura 24. Ejemplo de creación de un objeto
En el ejemplo de la Figura 24 se crea un objeto de la clase definida en la Figura 23. Observe que no
se ha definido en la clase Circulo (Figura 23) un constructor y sin embargo se ha podido crear el
objeto unCirculo porque JAVA crea por defecto un constructor para todas las clases.
La forma de este constructor puede ser explícitamente declarada y tendría la siguiente forma:

public class Circulo


{
private double radio;

public Circulo()
{
}

public void setRadio(double radio)


{
this.radio = radio;
}

public double getRadio()


{
return radio;
}

}
Figura 25. Definición explicita del constructor por defecto de la clase Circulo
Una clase puede poseer más de un constructor, dado que todos deben llamarse igual que la clase
la diferencia entre ellos radica por la lista de parámetros que posea el constructor. Los
constructores con parámetros son utilizados generalmente para establecer el estado del objeto al
momento de su creación. Es decir asignar un valor específico a cada uno de sus atributos en el
momento de su creación. Si se crean constructores con parámetros es necesario explicitar la
definición del constructor por defecto. Por ejemplo:

Autor: Ingeniero Ariel Alejandro Vega Página 16


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

public class Circulo


{
private double radio;

public Circulo()
{
}

public Circulo(double radio)


{
this.radio = radio; // o this.setRadio(radio);
}

public void setRadio(double radio)


{
this.radio = radio;
}

public double getRadio()


{
return radio;
}

}
Figura 26. Definición de constructores parametrizados en la clase Circulo
Observe que se ha definido un constructor con un parámetro, cuyo objetivo es asignar un valor al
radio del objeto en el momento de la creación. Además observe que se vuelve obligatorio definir
el constructor por defecto.
La ejecución del mismo puede ser de la siguiente forma:
Resultado:
public class MiPrimerEjemplo Se crea el objeto
{ denominado unCirculo
public static void main(String[] args { utilizando el constructo pr
Circulo unCirculo = new Circulo(); defecto.

Circulo otroCirculo = new Circulo(23.6); Se crea el objeto


} otroCirculo utilizando el
} constructor parametrizado

Figura 27. Ejemplo de creación de un objeto

Autor: Ingeniero Ariel Alejandro Vega Página 17


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

Observe que JAVA puede determinar cuál es constructor a utilizar en el momento de la creación
de un objeto basándose en el tipo, orden y cantidad de argumentos que se le pase al constructor
definido luego de la palabra new.

Envió de mensajes entre objetos. Protocolo de Mensajes JAVA

Una vez que se crean los objetos con sus atributos y métodos es necesario ejecutar la aplicación y
que ejecuten sus métodos. Algunos objetos requerirán los métodos de otros objetos. Para que
pueda existir la posibilidad de invocar esos métodos los mismos no deben haber sido definidos
como privados. Los métodos de un objeto estarán disponibles para todos los otros objetos
únicamente si han sido definidos como públicos. De esta forma estos métodos son considerados
“Servicios”. La forma en la cual un objeto puede invocar un servicio está definida por un conjunto
de reglas que se conoce con el nombre de Protocolo de mensajes de JAVA.
Este protocolo establece lo siguiente:
 Un método de un objeto solo brinda su nombre, ocultando su implementación. Es decir
cada objeto solo ofrece el nombre de su método para que sea accedido, pero no se puede
acceder al código del mismo (Encapsulación de métodos).
 Para que un objeto pueda solicitar un método de otro objeto debe hacerlo de la siguiente
forma: Nombre_objeto . nombre_método();
Ejemplo
Resultado:
public class MiPrimerEjemplo 15.7
{ 23.6
public static void main(String[] args {
Circulo unCirculo = new Circulo();

Circulo otroCirculo = new Circulo(23.6);

unCirculo.setRadio(15.7);
unCirculo.mostrarDatos();
otroCirculo.mostrarDatos();

}
}
Figura 28. Ejemplo de creación de un objeto
Este ejemplo utiliza la definición generada en la Figura 29. Observe que se crean dos objetos de
tipo Circulo. Se requiere poder asignarle a unCirculo un valor a su radio. Entonces se envía a
ese objeto la invocación del método setRadio(). Como este método fue definido con un parámetro
es necesario enviarle un argumento. En este caso el argumento es el valor 15.7;
Luego cada objeto invoca su método mostrarDatos() porque el programador requiere que los
mismos sean mostrados por consola. De esta forma se invocan los métodos de un objeto, con una
sentencia en la cual primero se referencia el objeto, seguido de un punto y finalmente el nombre
del método, el cual puede o no recibir argumentos, según como lo haya creado el programador.

Autor: Ingeniero Ariel Alejandro Vega Página 18


Profesor Adjunto de la Asignatura
Asignatura: Programación Orientada a Objetos
Carrera: Analista Programador Universitario Plan 2008
Facultad de Ingeniería – Universidad Nacional de Jujuy

public class Circulo


{
private double radio;

public Circulo()
{
}

public Circulo(double radio)


{
this.radio = radio; // o this.setRadio(radio);
}

public void setRadio(double radio)


{
this.radio = radio;
}

public double getRadio()


{
return radio;
}

public void mostrarDatos()


{
System.out.println(this.getRadio());
}

}
Figura 29. Definición de la clase Circulo

Autor: Ingeniero Ariel Alejandro Vega Página 19


Profesor Adjunto de la Asignatura

También podría gustarte