Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Creación de Clases
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.
Ejemplos:
class Persona
Su contenido es {
}
1
En JAVA las operaciones de las clases se denominan métodos.
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.
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
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
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.
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).
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).
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:
Ejemplo 2:
Figura 12. Conversión implícita de un tipo de dato numérico primitivo a otro primitivo
numérico superior
Ejemplo 4:
Ejemplo 5:
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:
Ejemplo
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.
Ejemplo 1
}
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
}
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
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
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
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.
}
Figura 22. Uso de this para invocar un metodo dentro de la misma clase
}
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.
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()
{
}
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 Circulo()
{
}
}
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:
public Circulo()
{
}
}
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.
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.
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();
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.
public Circulo()
{
}
}
Figura 29. Definición de la clase Circulo