Mostrando entradas con la etiqueta Estructura de un programa Java. Mostrar todas las entradas
Mostrando entradas con la etiqueta Estructura de un programa Java. Mostrar todas las entradas

jueves, 3 de marzo de 2016

Constructores en JAVA



Para crear un objeto se utiliza el operador new. Si no se ha definido un método constructor para la clase, entonces el objeto se instancia indicando el nombre de la clase y a continuación un paréntesis abierto y otro cerrado.
Si ya se ha definido un método constructor, entonces no es posible instanciar un objeto utilizando el constructor por defecto. Cuando se invoca al constructor por defecto se asigna un espacio de memoria para el nuevo objeto y sus atributos se inicializan a los valores por defecto correspondientes a su tipo. Los números enteros se inicializan a cero, los números reales a 0.0, los valores lógicos a false, los caracteres se inicializan a \u0000 y las referencias a null.

En una clase se pueden definir uno o más métodos constructores para inicializar los atributos de un objeto con valores distintos de los valores por defecto de Java. Para instanciar un objeto es necesario indicar los valores iniciales de sus atributos cuando se ejecuta el método constructor. En la clase Vehiculo se ha definido un método constructor que inicializa los atributos matricula, marca, modelo, color y tarifa.



A veces es necesario contar con diferentes métodos constructores con distintos parámetros. Por ejemplo, se podría crear un objeto de la clase Vehiculo sin conocer la tarifa de alquiler. El método constructor debería inicializar la tarifa a cero.

public Vehiculo(String matricula,
String marca,
String modelo,
String color) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = 0.0;
this.disponible = false;
}

Cuando se definen dos o más métodos constructores para la clase Vehiculo, se dice que el método constructor de la clase está sobrecargado. En este ejemplo la diferencia entre los dos métodos es que el primero recibe cuatro parámetros e inicializa la tarifa a cero, el segundo recibe cinco parámetros, uno de ellos para inicializar la tarifa del vehículo.

public Vehiculo(String matricula,
String marca,
String modelo,
String color)
public Vehiculo(String matricula,
String marca,
String modelo,
String color,
double tarifa)

La clase Vehiculo con dos métodos constructores.

public class Vehiculo {
private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa;
private boolean disponible;
public Vehiculo(String matricula,
String marca,
String modelo,
String color) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = 0.0;>
this.disponible = false;
}
public Vehiculo(String matricula,
String marca,
String modelo,
String color,
double tarifa) {
this.matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = tarifa;
this.disponible = false;
}
}

Java diferencia los métodos sobrecargados por el número y el tipo de los argumentos que tiene el método. En la clase Vehiculo el número de parámetros de los dos métodos constructores es diferente.
Cuando se invoca al método constructor de la clase con el operador new, Java selecciona el método que debe ejecutar por el número y el tipo de argumentos que recibe.

Creación de objetos de la clase Vehiculo utilizando ambos métodos constructores.

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",
"VW",
"GTI",
"Blanco",
100.0);
Vehiculo vehiculo2 = new Vehiculo("2345 JVM",
"SEAT",
"León",
"Negro");

El objeto vehiculo1 se instancia ejecutando constructor de cinco parámetros, mientras que vehiculo2 se instancia ejecutando el constructor de cuatro parámetros.


Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

miércoles, 2 de marzo de 2016

Los métodos en JAVA - 3 de 3



Parámetros y argumentos

Los parámetros de un método definen la cantidad y el tipo de dato de los valores que recibe un método para su ejecución. Los argumentos son los valores que se pasan a un método durante su invocación. El método recibe los argumentos correspondientes a los parámetros con los que ha sido declarado.
Un método puede tener tantos parámetros como sea necesario. La lista de parámetros de la cabecera de un método se define con la siguiente sintaxis:

tipo nombre [,tipo nombre ]

Por ejemplo, el método constructor de la clase Vehiculo tiene cinco parámetros, la matrícula, la marca, el modelo, el color del vehículo y su tarifa. Los parámetros matricula, marca, modelo y color son de tipo String, tarifa es de tipo double.

public Vehiculo(String matricula,
String marca,
String modelo,
String color,
double tarifa) {
}

El método setTarifa(double tarifa) de la clase Vehiculo tiene un parámetro tarifa de tipo double.

public void setTarifa(double tarifa) {
}

Durante la invocación de un método es necesario que el número y el tipo de argumentos coincidan con el número y el tipo de parámetros declarados en la cabecera del método.
Por ejemplo, es correcto invocar al método setTarifa(double tarifa) del objeto vehiculo1 pasando un argumento de tipo double.

vehiculo1.setTarifa(100.0); // invocación correcta
vehiculo1.setTarifa(90.0); // invocación correcta

La invocación del método no es correcta si se pasan dos argumentos de tipo double o un argumento de tipo String porque la cabecera del método solo incluye un parámetro double. Las invocaciones del método setTarifa(double tarifa) son incorrectas.

vehiculo1.setTarifa(100.0, 20.0); // no es correcto
vehiculo1.setTarifa("100.0"); // no es correcto

Los dos ejemplos anteriores no son válidos porque la lista de argumentos del método setTarifa(double tarifa) no coincide con la lista de parámetros de la declaración de este método. 

Durante el proceso de compilación se comprueba que durante la invocación de un método se pasan tantos argumentos como parámetros tiene declarados y que además coinciden los tipos. Esta es una característica de los lenguajes que se denominan “strongly typed” o “fuertemente tipados”.


Paso de parámetros

Cuando se invoca un método se hace una copia de los valores de los argumentos en los parámetros. Esto quiere decir que si el método modifica el valor de un parámetro, nunca se modifica el valor original del argumento. 
Cuando se pasa una referencia a un objeto se crea un nuevo alias sobre el objeto, de manera que esta nueva referencia utiliza el mismo espacio de memoria del objeto original y esto permite acceder al objeto original. 



Por ejemplo, el método recibirVehiculoAlquilado(Vehiculo v) recibe el parámetro v de tipo Vehiculo. Si el método modifica el estado del objeto v, en realidad modifica el estado del objeto original vehiculo1 que recibe como argumento.

public void recibirVehiculoAlquilado (Vehiculo v) {
v.setDisponible(true);
}

En el siguiente programa Java, en el método main() se crea un objeto vehiculo1 de la clase Vehiculo. Al instanciar el objeto, el método constructor asigna el valor false al atributo disponible, pero al invocar al método recibirVehiculoAlquilado(Vehiculo v) con el objeto vehiculo1, se modifica su disponibilidad.

public class MisVehiculos {
public static void recibirVehiculoAlquilado(Vehiculo v) {
v.setDisponible(true);
}
public static void main(String args[]) {
Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",
"VW",
"GTI",
"Blanco",
100.0);
// el valor del atributo disponible de vehiculo1 es false
System.out.println("El objeto vehiculo1 está disponible: " +
vehiculo1.getDisponible());
recibirVehiculoAlquilado (vehiculo1);
// el valor del atributo disponible de vehiculo1 es true
System.out.println("El objeto vehiculo1 está disponible: " +
vehiculo1.getDisponible());
}
}

La salida por la consola:

El objeto vehiculo1 está disponible: false
El objeto vehiculo1 está disponible: true


El valor de retorno

Un método puede devolver un valor. Los métodos que no devuelven un valor se declaran void, mientras que los métodos que devuelven un valor indican el tipo que devuelven: int, double, char, String o un tipo de objeto.
Los métodos ‘set’ devuelven void, mientras que los métodos ‘get’ devuelven el tipo correspondiente al atributo al que hacen referencia. Los métodos ‘set’ devuelven void porque son métodos modificadores, realizan operaciones y cálculos para modificar el estado de los objetos. Los métodos ‘get’, en cambio, son métodos de consulta y devuelven los valores almacenados en los atributos de un objeto.

Por ejemplo, el método setTarifa(double tarifa) recibe el parámetro tarifa de tipo double y devuelve void. 

public void setTarifa(double tarifa) {
this.tarifa = tarifa;
}

El método getTarifa() devuelve el tipo double correspondiente al atributo tarifa. El valor del atributo se devuelve con return.

public double getTarifa() {
return this.tarifa;
}


Las variables locales de un método

Las variables locales de un método son útiles para almacenar valores temporales cuyo tiempo de vida coincide con el método.

Por ejemplo, el método getAtributos() no utiliza variables locales. El valor de retorno se calcula al momento de hacer return.

public String getAtributos() {
return "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() +
" Tarifa: " + getTarifa() +
" Disponible: " + getDisponible;
}

Este método se podría codificar declarando la variable local atributos de tipo String para almacenar el valor de retorno. Esta variable se declara dentro del cuerpo del método.

public String getAtributos() {
String atributos;
atributos = "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() +
" Tarifa: " + getTarifa() +
" Disponible: " + getDisponible;
return atributos;
}

Los dos métodos son equivalentes, pero el primero es más claro porque evita el uso de una variable local que no es necesaria.


Sobrecarga de métodos

La sobrecarga de métodos es útil para que el mismo método opere con parámetros de distinto tipo o que un mismo método reciba una lista de parámetros diferente. Esto quiere decir que puede haber dos métodos con el mismo nombre que realicen dos funciones distintas. La diferencia entre los métodos sobrecargados está en su declaración.

Por ejemplo, el método getAtributos() se puede sobrecargar para devolver los atributos de un vehículo y para mostrar la tarifa reducida al aplicar el porcentaje de descuento recibido como argumento.

public String getAtributos() {
return "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() +
" Tarifa: " + getTarifa() +
" Disponible: " + getDisponible;
}
public String getAtributos(double porcentajeDescuento) {
return "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() + " Tarifa: " +
(100.0 – porcentajeDescuento)/100*tarifa +
" Disponible: " + getDisponible;
}

En este ejemplo los dos métodos se diferencian por la declaración de sus parámetros y ambos métodos realizan operaciones distintas.


Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

martes, 1 de marzo de 2016

Los métodos en JAVA - 2 de 3



Declaración de métodos

La declaración de un método indica si el método necesita o no argumentos.
Los métodos ‘get’ no tienen argumentos y devuelven un valor, los métodos ‘set’ necesitan un argumento para indicar el valor del atributo que van a modificar.

El método setTarifa(double tarifa) tiene un argumento. El nombre de este parámetro es tarifa y su tipo es double. 

Un método se declara con la siguiente sintaxis: 

tipo-de-acceso tipo nombre (lista-parametros);

El tipo de acceso puede ser private o public. Si el método devuelve un valor se debe indicar su tipo. Este valor puede ser de un tipo primitivo de Java o el identificador de una clase. Si el método no devuelve un valor entonces el tipo es void. El nombre del atributo debe cumplir las normas de los identificadores y se recomienda utilizar un verbo que sea representativo de la acción que realiza el método. La lista de parámetros indica los valores que requiere el método para su ejecución.

La lista de parámetros se declara con la siguiente sintaxis: 

tipo nombre [,tipo nombre ]

La lista de parámetros puede declarar una o más variables separadas por una coma. El tipo puede ser un tipo primitivo de Java o el identificador de una clase. El nombre del parámetro debe cumplir las normas de los identificadores y se recomienda utilizar un sustantivo que sea representativo de la información que almacena. 

Dentro de una clase los métodos se identifican unívocamente por su nombre y su lista de parámetros.


Invocación de métodos

Un método se puede invocar dentro o fuera de la clase donde se ha declarado. Si el método se invoca dentro de la clase, basta con indicar su nombre. Si el método se invoca fuera de la clase entonces se debe indicar el nombre del objeto y el nombre del método.

Por ejemplo, el método getAtributos() de la clase Vehiculo se podría codificar invocando a los métodos getMatricula(), getMarca(), getModelo(), getTarifa() y getDisponible(). En este caso, el método getAtributos() utiliza los métodos ‘get’ de la clase en vez de hacer referencia directa a los atributos del objeto.

public class Vehiculo {
private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa = 0.0;
private boolean disponible = false;
public String getAtributos() {
return "Matrícula: " + getMatricula() + " " +
" Modelo: " + getMarca() + " " + getModelo() +
" Color: " + getColor() +
" Tarifa: " + getTarifa() +
" Disponible: " + getDisponible;
}
}

Si el método getAtributos() se va a invocar desde fuera de la clase, entonces es necesario indicar el nombre del objeto y el nombre del método. 
En este ejemplo, el método getAtributos() se utiliza para mostrar los valores almacenados en el objeto vehiculo1.

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",
"VW",
"GTI",
"Blanco",
100.0);
// invocación del método getAtributos para mostrar
// los datos del objeto vehiculo1
System.out.print("Datos del vehículo " +
vehiculo1.getAtributos());

Si el método es estático, entonces es necesario indicar el nombre de la clase y el nombre del método. Por ejemplo, la clase Math incluye el método sqr para calcular el cuadrado de un número. En este caso, es necesario indicar el nombre de la clase y el nombre del método que se invoca.

int numero = 4;
// invocación del método sqr de la clase Math
System.out.print("El cuadrado del número es: " +
Math.sqr(numero));

Cuando se invoca a un método ocurre lo siguiente:
En la línea de código del programa donde se invoca al método se calculan los valores de los argumentos.
Los parámetros se inicializan con los valores de los argumentos.
Se ejecuta el bloque código del método hasta que se alcanza return o se llega al final del bloque.
Si el método devuelve un valor, se sustituye la invocación por el valor devuelto.
La ejecución del programa continúa en la siguiente instrucción donde se invocó el método.


El método main()

Existe un método especial, llamado main(). Este método se invoca cuando se ejecuta un programa Java. Todo programa Java debe tener una clase con el método main(). Este método se debe declarar public static void.
Es un método estático, público y no devuelve un valor de retorno. Los parámetros String[] args se refieren a la línea de comandos de la aplicación.

Cuando la máquina virtual de Java (JVM) ejecuta un programa Java invoca al método main(). Es este método quien a su vez ejecuta los métodos de la aplicación.

public class MisVehiculos {
public static void main(String args[]) {
// este programa crea un objeto de la clase vehiculo y
// muestra sus atributos
// instanciación del objeto vehiculo1
Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",
"VW",
"GTI",
"Blanco",
100.0);
// invocación del método getAtributos() para mostrar los datos
// del objeto vehiculo1
System.out.print("Datos del vehículo " +
vehiculo1.getAtributos());
}
}



Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

Los métodos en JAVA - 1 de 3




Los métodos son funciones que determinan el comportamiento de los objetos. Un objeto se comporta de una u otra forma dependiendo de los métodos de la clase a la que pertenece. Todos los objetos de una misma clase tienen los mismos métodos y el mismo comportamiento.

Existen tres tipos de métodos: métodos de consulta, métodos modificadores y operaciones. Los métodos de consulta sirven para extraer información de los objetos, los métodos modificadores sirven para modificar el valor de los atributos del objeto y las operaciones definen el comportamiento de un objeto.

Los métodos ‘get’ son métodos de consulta, mientras que los métodos ‘set’ son métodos modificadores.

Los métodos ‘get’ se utilizan para extraer el valor de un atributo del objeto y los métodos ‘set’ para modificarlo. En la clase Vehiculo es necesario definir un método ‘get’ para cada uno de sus atributos: getMatricula(), getMarca(), getModelo(), getColor(), getTarifa() y getDisponible(). Los métodos ‘set’ solo se definen para los atributos que pueden ser modificados después de que se ha creado el objeto. En este caso es necesario definir los métodos setTarifa(double tarifa) y setDisponible(boolean disponible) para modificar la tarifa del alquiler del vehículo y su disponibilidad, respectivamente.

Un método ‘get’ se declara public y a continuación se indica el tipo que devuelve. Es un método de consulta. Por ejemplo, el método getTarifa() devuelve double porque el atributo tarifa es de tipo double. La lista de parámetros de un método ‘get’ queda vacía. En el cuerpo del método se utiliza return para devolver el valor correspondiente al atributo tarifa del objeto, al que se hace referencia como this.tarifa. 



Un método ‘get’ utiliza return para devolver el valor del atributo. En este caso el identificador del atributo es tarifa y se refiere a él como this.tarifa

El método getAtributos() es un caso particular de método ‘get’ que devuelve los valores concatenados de los atributos del objeto.

public class Vehiculo {
private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa = 0.0;
private boolean disponible = false;
public String getAtributos() {
return "Matrícula: " + this.matricula +
" Modelo: " + this.marca + " " + this.modelo +
" Color: " + this.color +
" Tarifa: " + this.tarifa +
" Disponible: " + this.disponible;
}
}

Un método ‘set’ se declara public y devuelve void. La lista de parámetros de un método ‘set’ incluye el tipo y el valor a modificar. Es un método modificador. Por ejemplo, el método setTarifa(double tarifa) debe modificar el valor de la tarifa del alquiler almacenado en el objeto. El cuerpo de un método ‘set’ asigna al atributo del objeto el parámetro de la declaración.



Un método ‘set’ modifica el valor de un atributo del objeto. En este caso el identificador del atributo es tarifa y se refiere a él como this.tarifa para asignarle el valor del parámetro 
Un método de tipo operación es aquel que realiza un cálculo o modifica el estado de un objeto. Este tipo de métodos pueden incluir una lista de parámetros y puede devolver un valor o no. Si el método no devuelve un valor, se declara void.

Por ejemplo, la clase Circulo define dos métodos de tipo operación, uno para calcular el perímetro y otro para calcular el área.

public class Circulo {
public static final double PI = 3.1415926536;
private double radio;
public Circulo(double radio) {
this.radio = radio;
}
public double getRadio() {
return this.radio;
}
public double calcularPerimetro() {
return 2 * PI * this.radio;
}
public double calcularArea() {
return PI * this.radio * this.radio;
}
}

En este ejemplo, los métodos calcularPerimetro() y calcularArea() devuelven un valor double y ninguno de ellos recibe parámetros.


Espero haber ayudado en algo. Hasta la próxima oportunidad!

DESCARGAR PUBLICACIÓN










  

domingo, 28 de febrero de 2016

Atributos de un objeto en JAVA



Los atributos son los elementos que almacenan el estado de un objeto. Se definen de la misma forma que las variables, pero dentro del bloque de la clase.

Existen dos tipos de atributos: los atributos de clase y los atributos de objeto. Los atributos de clase existen siempre, son independientes de que existan objetos instanciados. Los atributos de clase se declaran utilizando static. Los atributos de objeto existen durante el ciclo de vida de un objeto, es decir, se crean cuando se instancia el objeto y se pueden utilizar mientras el objeto exista.
Un atributo se declara con la siguiente sintaxis:

tipo-de-acceso tipo nombre [ = valor-inicial ];

El tipo de acceso puede ser private, protected o public. Los atributos con acceso private solo se pueden acceder desde la propia clase que los define, mientras que los atributos public se pueden acceder libremente desde otras clases. Los atributos protected se pueden acceder desde la propia clase que los define y desde sus subclases. El concepto de subclase se explica más adelante, en el apartado de extensión de clases.

El tipo puede ser un tipo primitivo de Java o el identificador de una clase. El nombre del atributo debe cumplir las normas de los identificadores y se recomienda utilizar un sustantivo que sea representativo de la información que almacena.

La inicialización del objeto es opcional. Se puede declarar un objeto que será instanciado después o se puede instanciar al momento de su declaración.

public class Vehiculo {
String matricula;
String marca;
String modelo;
String color;
double tarifa = 0.0;
boolean disponible = false;
}

En el ejemplo anterior, el atributo tarifa se inicializa a cero y disponible a false. Al resto de atributos no se les asigna un valor inicial. Con esta declaración, cuando se instancia un objeto de tipo Vehiculo se inicializan los valores de los atributos tarifa y disponible. Si no se define el tipo de acceso, entonces el atributo tiene acceso de tipo public.

La clase Vehiculo se debe declarar con atributos privados. Se utiliza el tipo de acceso private para que solo los métodos ‘get’ y ‘set’ de la clase puedan acceder a ellos.

public class Vehiculo {
private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa = 0.0;
private boolean disponible = false;
}

En esta nueva declaración, todos los atributos tienen acceso private y solo es posible acceder a ellos desde los métodos de la clase.



Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

miércoles, 17 de febrero de 2016

Los objetos en JAVA



Un objeto se compone de atributos y métodos. Para acceder a los elementos de un objeto se escribe el nombre del objeto, un punto y el nombre del elemento al que se desea acceder. 
Por ejemplo, para los objetos vehiculo1 y vehiculo2, se podría acceder directamente a sus atributos como se muestra a continuación:

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",
"VW", "GTI",
"Blanco",
100.0);
System.out.println("Matricula : " +
vehiculo1.matricula);
System.out.println("Marca y modelo: " +
vehiculo1.marca + " " +
vehiculo1.modelo);
System.out.println("Color : " +
vehiculo1.color);
System.out.println("Tarifa : " +
vehiculo1.tarifa);

La salida por la consola:

Matrícula : 4050 ABJ
Marca y modelo: VW GTI
Color : Blanco
Tarifa : 100.0

Para acceder a un método, además de su nombre hay que indicar la lista de argumentos requeridos por el método. Cuando la declaración del método no incluye parámetros no es necesario pasar argumentos. 
El siguiente código Java crea el objeto vehiculo1 y muestra su matrícula y su tarifa. A continuación modifica la tarifa a 90.0 euros y la muestra de nuevo.

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",
"VW",
"GTI",
"Blanco",
100.0);
System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());
vehiculo1.setTarifa(90.0);
System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());

La salida por la consola:

Matrícula : 4050 ABJ
Tarifa : 100.0
Matrícula : 4050 ABJ
Tarifa : 90.0

Para mostrar la tarifa del objeto vehiculo1 se puede acceder directamente al atributo tarifa del objeto o se puede ejecutar el método getTarifa().
Esto se debe a que los atributos de clase Vehiculo son de acceso público porque se han declarado public en vez de private. Los atributos de la clase se deben declarar private y para acceder a ellos se debe utilizar un método ‘get’.


La referencia null

Una referencia a un objeto puede no tener asignada una instancia. Esto puede ocurrir porque se ha declarado el objeto pero no se ha instanciado, es decir no se ha creado un objeto con el operador new. Existe un valor especial, llamado null que indica que un objeto no se ha instanciado. A continuación se declara el objeto vehiculo2, pero no se crea una instancia para él.

Vehiculo vehiculo2;

Mientras no se instancie el objeto vehiculo2 su referencia vale null. En un programa Java no se deben dejar referencias de objetos sin instanciar. 
Es necesario asegurarse que los objetos existen para evitar referencias null.
El objeto se puede instanciar en la misma declaración o más adelante, como se muestra en el siguiente ejemplo.

Vehiculo vehiculo2;
// el objeto vehiculo2 se declara pero no se instancia
// la instancia se crea utilizando el operador new
Vehiculo vehiculo2 = new Vehiculo("2345 JVM",
"SEAT",
"León",
"Negro",
80.0);


Para saber si una referencia está instanciada o no, se puede comparar con null.

if (vehiculo2 == null) {
System.out.print("vehiculo2 es una referencia null")
}
if (vehiculo2 != null) {
System.out.print("vehiculo2 está instanciado")
}

Si vehiculo2 es null, la primera expresión es true y la segunda false.
En ese caso, el programa muestra por la consola el mensaje:

vehiculo2 es una referencia null


Referencias compartidas por varios objetos

Un objeto puede tener varias referencias o nombres. Un alias es otro nombre que se referencia al mismo objeto. Un alias es una referencia más al mismo espacio de memoria del objeto original. Por ejemplo, si se crea el objeto vehiculo1 y después se declara otro objeto vehiculo3 y a continuación se asigna la referencia de vehiculo1 a vehiculo3, entonces vehiculo3 es un alias de vehiculo1. Esto significa que el espacio de memoria de vehiculo1 y vehiculo3 es el mismo.

Vehiculo vehiculo1;
Vehiculo vehiculo3;
vehiculo1 = new Vehiculo("4050 ABJ",
"VW",
"GTI",
"Blanco",
100.0);
// el objeto vehiculo1 se instancia, vehiculo3 solo
// está declarado y es una referencia null
vehiculo3 = vehiculo1;
// al asignar la referencia de vehiculo1 a vehiculo3,
// éste se convierte en alias de vehiculo1 y referencia
// el mismo espacio de memoria
System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());
// se muestra la matricula y la tarifa de vehiculo1
System.out.println("Matricula : " +
vehiculo3.getMatricula());
System.out.println("Tarifa : " +
vehiculo3.getTarifa());
// se muestra la matricula y la tarifa de vehiculo3,
// un alias de vehiculo1, por lo que muestra de nuevo
// la información correspondiente a vehiculo1

La salida por la consola muestra dos veces los valores asignados al objeto vehiculo1.

Matrícula : 4050 ABJ
Tarifa : 100.0
Matrícula : 4050 ABJ
Tarifa : 100.0

Un alias se puede utilizar para mostrar el estado de un objeto y también para modificarlo. Si se ejecuta setTarifa(90.0) con el objeto vehiculo3 en realidad se modifica la tarifa de vehiculo1.

vehiculo3.setTarifa(90.0);
// al modificar la tarifa de vehiculo3 en realidad se
// modifica la tarifa de vehiculo1
System.out.println("Matricula : " +
vehiculo1.getMatricula());
System.out.println("Tarifa : " +
vehiculo1.getTarifa());
System.out.println("Matricula : " +
vehiculo3.getMatricula());
System.out.println("Tarifa : " +
vehiculo3.getTarifa());

Se muestra la matrícula y la tarifa de vehiculo1 y vehiculo3.

Matrícula : 4050 ABJ
Tarifa : 90.0
Matrícula : 4050 ABJ
Tarifa : 90.0

El objeto vehiculo3 es un alias de vehiculo1 y no tiene un espacio de memoria propio. Utiliza el mismo espacio de memoria que vehiculo1. Es decir, vehiculo1 comparte con sus alias el mismo espacio de memoria. Si se modifica el valor de la tarifa almacenada en vehiculo3, en realidad se modifica el valor de vehiculo1.
Esquemáticamente, un alias se puede ver como un objeto que apunta al espacio de memoria de otro objeto, como se muestra a continuación:



En este esquema, el objeto vehiculo3 es un alias de vehiculo1 y ambos objetos comparten el mismo espacio de memoria. El objeto vehiculo2, tiene su espacio de memoria propio y no lo comparte con otro objeto. 


El ciclo de vida de un objeto

El ciclo de vida de un objeto empieza por su declaración, su instanciación y su uso en un programa Java hasta que finalmente desaparece. 
Cuando un objeto deja de ser utilizado, Java libera la memoria asignada al objeto y la reutiliza. El entorno de ejecución de Java decide cuándo puede reutilizar la memoria de un objeto que ha dejado de ser útil en un programa. El programador no debe preocuparse de liberar la memoria utilizada por los objetos. A este proceso se le conoce como recolección de basura. Java cuenta con un sistema recolector de basura que se encarga de liberar los objetos y los espacios de memoria que ocupan cuando éstos dejan de ser utilizados en un programa.


Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

miércoles, 10 de febrero de 2016

Los elementos de una clase en JAVA



Una clase describe un tipo de objetos con características comunes. Es necesario definir la información que almacena el objeto y su comportamiento.


Atributos

La información de un objeto se almacena en atributos. Los atributos pueden ser de tipos primitivos de Java o de tipo objeto. Por ejemplo, para el catálogo de vehículos de una empresa de alquiler, es necesario conocer la matrícula del coche, su marca, modelo, color, la tarifa del alquiler y su disponibilidad.

public class Vehiculo {
String matricula;
String marca;
String modelo;
String color;
double tarifa;
boolean disponible;
}

En este ejemplo, los atributos matricula, marca, modelo y color son cadenas de caracteres, tarifa es un número real y disponible es un valor lógico.


Métodos y constructores

Además de definir los atributos de un objeto, es necesario definir los métodos que determinan su comportamiento. Toda clase debe definir un método especial denominado constructor para instanciar los objetos de la clase. Este método tiene el mismo nombre de la clase. Por ejemplo, para la clase Vehiculo, el identificador del método constructor es Vehiculo. El método constructor se ejecuta cada vez que se instancia un objeto de la clase. Este método se utiliza para inicializar los atributos del objeto que se instancia. 
Para diferenciar entre los atributos del objeto y los identificadores de los parámetros del método constructor, se utiliza la palabra this. De esta forma, los parámetros del método pueden tener el mismo nombre que los atributos de la clase. Esto permite hacer una asignación como la que se muestra a continuación, donde this.marca se refiere al atributo del objeto y marca al parámetro del método.

this.marca = marca;

En el siguiente ejemplo el método constructor inicializa los atributos matricula, marca, modelo, color y tarifa.

public class Vehiculo {
String matricula;
String marca;
String modelo;
String color;
double tarifa;
boolean disponible;
// el método constructor de la clase Vehiculo
public Vehiculo(String matricula,
String marca,
String modelo,
String color,
double tarifa) {
this,matricula = matricula;
this.marca = marca;
this.modelo = modelo;
this.color = color;
this.tarifa = tarifa;
this.disponible = false;
}
}

La instanciación de un objeto se realiza ejecutando el método constructor de la clase.

Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",
"VW", "GTI",
"Blanco",
100.0);

En este ejemplo se instancia el objeto vehiculo1. El método constructor crea el objeto vehiculo1 con la matrícula “4050 ABJ”, marca “VW”, modelo “GTI”, color “Blanco” y tarifa 100.0 euros.

Vehiculo vehiculo2 = new Vehiculo("2345 JVM",
"SEAT",
"León",
"Negro",
80.0);

En este ejemplo se instancia el objeto vehiculo2. El método constructor crea el objeto vehiculo2 con la matrícula “2345 JVM”, marca “SEAT”, modelo “León”, color “Negro” y tarifa 80.0 euros. 
La instanciación de un objeto consiste en asignar un espacio de memoria al que se hace referencia con el nombre del objeto. Los identificadores de los objetos permiten acceder a los valores almacenados en cada objeto. En estos ejemplos, los objetos vehiculo1 y vehiculo2 almacenan valores diferentes y ocupan espacios de memoria distintos.
Para acceder a los atributos de los objetos de la clase Vehiculo se definen los métodos ‘get’ y ‘set’. Los métodos ‘get’ se utilizan para consultar el estado de un objeto y los métodos ‘set’ para modificar su estado. En la clase Vehiculo es necesario definir un método ‘get’ para cada uno de sus atributos: getMatricula(), getMarca(), getModelo(), getColor(), getTarifa() y getDisponible(). Los métodos ‘set’ solo se definen para los atributos que pueden ser modificados después de que se ha creado el objeto. En este caso es necesario definir setTarifa(double tarifa) y setDisponible(boolean disponible) para modificar la tarifa del alquiler del vehículo y su disponibilidad, respectivamente.

public class Vehiculo {
String matricula;
String marca;
String modelo;
String color;
double tarifa;
boolean disponible;
// los métodos ‘get’ y ‘set’ de la clase Vehiculo
public String getMatricula() {
return this.matricula;
}
public String getMarca() {
return this.marca;
}
public String getModelo() {
return this.modelo;
}
public String getColor() {
return this.color;
}
public double getTarifa() {
return this.tarifa;
}
public boolean getDisponible() {
return this.disponible;
}
public void setTarifa(double tarifa) {
this.tarifa = tarifa;
}
public void setDisponible(boolean disponible) {
this.disponible = disponible;
}
}


Representación de clases y objetos

Representación de la clase vehículo utilizando un diagrama de clases.


Una clase se representa como un recuadro dividido en tres partes: el nombre de la clase en la parte superior, la declaración de atributos y la declaración de métodos.
El código Java de una clase se divide en dos partes, la declaración y su definición. La declaración comienza por la palabra class y a continuación se indica el nombre de la clase. La definición de una clase queda delimitada por la llave de inicio { y la llave de fin }. En el bloque de definición de la clase se declaran los atributos de los objetos y los métodos que definen su comportamiento.

Los objetos se representan como cajas que indican el nombre del objeto, la clase a la que pertenecen y el estado del objeto.


En este ejemplo, los objetos vehiculo1 y vehiculo2 son instancias de la clase Vehiculo. Ambos objetos comparten los mismos atributos, pero almacenan distintos valores. Los valores almacenados en un objeto representan su estado. El estado del objeto vehiculo1 almacena los valores: matricula “4050 ABJ”, marca “VW”, modelo “GTI”, color “Blanco”, tarifa 100.0 y disponible true. El estado del objeto vehiculo2 almacena matricula “2345 JVM”, marca “SEAT”, modelo “León”, color “Negro”, tarifa 80.0 y disponible false.
El estado de un objeto puede cambiar durante la ejecución de un programa Java. En este ejemplo, se podría modificar la tarifa del alquiler y la disponibilidad de los objetos de la clase Vehiculo, el resto de los atributos no se pueden modificar.


Espero haber ayudado en algo. Hasta la próxima oportunidad!

DESCARGAR PUBLICACIÓN










  

domingo, 31 de enero de 2016

Clases y Objetos en JAVA



La programación orientada a objetos se enfoca en los elementos de un sistema, sus atributos y las interacciones que se producen entre ellos para diseñar aplicaciones informáticas. Los elementos abstractos del modelo orientado a objetos se denominan clases. 

Un programa orientado a objetos es, esencialmente, una colección de objetos que se crean, interaccionan entre sí y dejan de existir cuando ya no son útiles durante la ejecución de un programa. Una aplicación informática puede llegar a ser muy compleja. La complejidad es más manejable cuando se descompone y se organiza en partes pequeñas y simples, los objetos.

Un programa Java utiliza clases y objetos. Las clases representan un esquema simplificado de la casuística de una aplicación informática. Una clase es una representación abstracta de un conjunto de objetos que comparten los mismos atributos y comportamiento, es decir, una clase describe un tipo de objetos. Un objeto es una instancia de una clase, tiene una identidad propia y un estado. La identidad de un objeto se define por su identificador. El estado de un objeto se define por el valor de sus atributos.
El comportamiento de un objeto queda determinado por el comportamiento la clase a la que pertenece. Los objetos son unidades indivisibles y disponen de mecanismos de interacción llamados métodos.

Para entender el concepto de objeto es necesario saber que existe una relación directa entre los elementos que forman parte de una aplicación informática y los objetos. Normalmente, para identificar los elementos de una aplicación, debemos fijarnos en los sustantivos que utilizamos para describir los objetos reales del sistema. Para diseñar una aplicación orientada a objetos es necesario responder las siguientes preguntas:
  • ¿Cuáles son los elementos tangibles de un sistema?
  • ¿Cuáles son sus atributos?
  • ¿Cuáles son sus responsabilidades?
  • ¿Cómo se relacionan los elementos del sistema?
  • ¿Qué objeto debe “saber”...?
  • ¿Qué objeto debe “hacer”...?

Por ejemplo, si se desea diseñar un programa Java para gestionar las ventas de una tienda, entonces habría que identificar y describir las características elementos como: cliente, tipo de cliente, producto, pedido, tipo de entrega, forma de pago, unidades en existencia de los productos, etc. Los procesos de gestión de la tienda incluirían el registro de los clientes, el registro de los productos de la tienda, el proceso de compra del cliente y la realización de los pedidos, la entrada y salida de productos del almacén, etc.

Si en vez de una tienda se trata de una aplicación para dibujar figuras geométricas en dos dimensiones, entonces sería necesario identificar y describir las características de las figuras y su posición. En este caso habría figuras de tipo círculo, rectángulo, triángulo, etc. Las operaciones a realizar con las figuras incluirían dibujar, borrar, mover o rotar.


Clases

En su forma más simple, una clase se define por la palabra reservada class seguida del nombre de la clase. El nombre de la clase debe empezar por mayúscula. Si el nombre es compuesto, entonces cada palabra debe empezar por mayúscula. Circulo, Rectangulo, Triangulo y FiguraGeometrica son nombres válidos de clases.

Por ejemplo, la clase Circulo se define con tres atributos: el radio y las coordenadas x, y que definen la posición del centro del círculo.

/* Esta clase define los atributos de un círculo */
public class Circulo {
int x;
int y;
int radio;
}

Una vez que se ha declarado una clase, se pueden crear objetos a partir de ella. A la creación de un objeto se le denomina instanciación. Es por esto que se dice que un objeto es una instancia de una clase y el término instancia y objeto se utilizan indistintamente.

Para crear objetos, basta con declarar una variable de alguno de los tipos de figuras geométricas:

Circulo circulo1;
Circulo circulo2;

Para crear el objeto y asignar un espacio de memoria es necesario realizar la instanciación con el operador new.

circulo1 = new Circulo();
circulo2 = new Circulo();

Después de crear los objetos, circulo1 y circulo2 almacenan los valores predeterminados de la clase Circulo. A partir de este momento los objetos ya pueden ser referenciados por su nombre. Los nombres circulo1 y circulo2 son las referencias válidas para utilizar ambos objetos.



Espero haber ayudado en algo. Hasta la próxima oportunidad!

DESCARGAR PUBLICACIÓN










  

sábado, 30 de enero de 2016

Los elementos de un programa Java - 3 de 3



Expresiones

Una expresión permite realizar operaciones entre valores utilizando distintos operadores. Las expresiones son útiles para representar las fórmulas matemáticas que se utilizan para realizar cálculos.

En Java se pueden definir expresiones tan complejas como sea necesario. 
Por ejemplo, para convertir una temperatura de grados Fahrenheit a Centígrados se utiliza la fórmula:

C = ((F – 32) * 5) / 9

En este ejemplo C representa la temperatura en grados centígrados y F en grados Fahrenheit. La fórmula en Java, utilizando las variables centigrados y fahrenheit de tipo double.

centigrados = ((fahrenheit – 32.0) * 5.0)) / 9.0;

Toda la expresión se evalúa a un valor. El orden de los cálculos depende del orden de prioridad de los operadores: primero los operadores unarios, después los multiplicativos, de izquierda a derecha, después los operadores aditivos, de izquierda a derecha, después los operadores de relación y por último los operadores de asignación.

Por ejemplo, la expresión x = -3 + 2 * 4 – 12 / 6 + 5 se calcula en el orden siguiente:

Primero se aplica el operador unario (-) a 3 y se obtiene -3. A continuación se evalúan los operadores multiplicativos de izquierda a derecha. Se calcula el producto de 2 * 4 y se obtiene 8, después se divide 12 / 6 y se obtiene 2. 
Al finalizar estas operaciones la expresión queda x = -3 + 8 – 2 + 5. Por último, se evalúan los operadores aditivos de izquierda a derecha y se obtiene 8.

Cuando se desea modificar el orden de prioridad de los operadores es necesario utilizar paréntesis para indicar el orden de evaluación. Por ejemplo, al calcular el valor de y = -3 + 2 * (14 – 2) / 6 + 5 se obtiene 6.


Expresiones aritmético-lógicas

Una expresión aritmético-lógica devuelve un valor lógico verdadero o falso. 
En este tipo de expresiones se utilizan operadores aritméticos, operadores relacionales y de igualdad. Por ejemplo, una expresión lógica puede ser:

(10 – 2) > (5 – 3)

En este ejemplo la expresión aritmético-lógica es verdadera porque el lado derecho de la expresión es mayor que el lado izquierdo.

En una expresión aritmético-lógica se pueden combinar varias expresiones con operadores lógicos. La precedecencia de los operadores lógicos es menor que la de los operadores relacionales, por lo que primero se evalúan las desigualdades y después los operadores lógicos. El orden de prioridad de los operadores lógicos es el siguiente: primero la negación, después el Y lógico y por último el O lógico. La prioridad de los operadores de asignación es la menor de todas.

Por ejemplo, la expresión 3 + 5 < 5 * 2 || 3 > 8 && 7 > 6 – 2 se evalúa en el orden siguiente.

Primero se evalúan las expresiones aritméticas y se obtiene la expresión lógica 8 < 10 || 3 > 8 && 7 > 4. A continuación se evalúan los operadores relacionales y se obtiene true || false && true. Ahora se evalúa el operador Y lógico con los operandos false && true y se obtiene false.
Por último, se evalúa el operador O lógico con los operandos true || false y se obtiene true, el valor final de la expresión.

Los operadores lógicos && y || se evalúan por cortocircuito. Esto significa que al evaluar a && b, si a es falso, no es necesario evaluar b porque la expresión es falsa. De forma similar, al evaluar a || b, si a es verdadero, no es necesario evaluar b porque la expresión es verdadera.


Conversión de tipos

Muchas veces es necesario realizar conversiones de tipos cuando se evalúa una expresión aritmética. Por ejemplo, si después de realizar el cálculo de conversión de grados Fahrenheit a Centígrados se quiere almacenar el resultado en la variable de tipo entero temperatura, es necesario hacer una conversión de tipos. La fórmula en Java, utilizando las variables centigrados y fahrenheit de tipo double.

centigrados = ((fahrenheit – 32.0) * 5.0)) / 9.0;

Antes de asignar el valor resultante a la variable temperatura, que almacena un valor entero, es necesario convertir el valor de tipo double de la variable centigrados a int.

int temperatura = (int) centigrados;


Las palabras reservadas de Java

En todos los lenguajes de programación existen palabras con un significado especial. Estas palabras son reservadas y no se pueden utilizar como nombres de variables.


En realidad, las palabras false, null y true son literales. No son palabras reservadas del lenguaje, pero no se pueden utilizar como identificadores.


Espero haber ayudado en algo. Hasta la próxima oportunidad!

DESCARGAR PUBLICACIÓN










  

viernes, 29 de enero de 2016

Los elementos de un programa Java - 2 de 3



Tipos primitivos

Las variables de java pueden ser de un tipo primitivo de datos o una referencia a un objeto. Los tipos primitivos permiten representar valores básicos. Estos tipos se clasifican en números enteros, números reales, caracteres y valores booleanos.

Números enteros. Representan números enteros positivos y negativos con distintos rangos de valores, desde cientos a trillones. Los tipos enteros de Java son byte, int, short y long.

Números reales. Existen dos tipos de números reales en Java, float y double. La diferencia entre ellos está en el número de decimales que tienen capacidad para expresar y en sus rangos de valores. 

Caracteres. El tipo char permite representar cualquier carácter Unicode. 
Los caracteres Unicode contienen todos los caracteres del alfabeto de la lengua castellana.

Booleano. Se utiliza para representar los valores lógicos verdadero y falso.Solo tiene dos valores true y false.

La siguiente tabla resume los tipos primitivos de Java.



Literales

Se denomina literal a la manera en que se escriben los valores para cada uno de los tipos primitivos.

Números enteros. Un número entero en Java se puede escribir en decimal, octal o en hexadecimal. Cuando se utiliza el sistema octal es necesario poner el dígito 0 delante del número. Si se utiliza el sistema hexadecimal se debe poner 0x delante del número. Por ejemplo, el número decimal 10 se puede escribir 012 en octal y 0xA en hexadecimal. Los números enteros se supone que pertenecen al tipo int.

Números reales. Un número real en Java siempre debe tener un punto decimal o un exponente. Por ejemplo, el número 0.25 se puede expresar también como 2.5e-1. Los números reales se supone que pertenecen al tipo double.

Booleanos. Los valores lógicos solo pueden ser true y false. Se escriben siempre en minúsculas.

Caracteres. Los valores de tipo carácter representan un carácter Unicode.

Se escriben siempre entre comillas simples, por ejemplo 'a', 'A', '0', '9'. En Java un carácter se puede expresar por su código de la tabla Unicode en octal o en hexadecimal. Los caracteres que tienen una representación especial se indican en la siguiente tabla.


Textos. Un texto en Java pertenece a la clase String y se expresa como el texto entre comillas dobles. Un texto siempre debe aparecer en una sola línea. Para dividir un texto en varias líneas se debe utilizar el operador + para concatenar textos.

Un texto puede estar vacío o contener uno o más caracteres. Por ejemplo, “Hola Mundo” es un texto de 10 caracteres, mientras que “” es un texto vacío y tiene 0 caracteres. El texto “a” es diferente del carácter 'a' de tipo char.


Operadores

Cada tipo puede utilizar determinados operadores para realizar operaciones o cálculos.

Números enteros. Al realizar una operación entre dos números enteros, el resultado siempre es un número entero. Con los números enteros se pueden realizar operaciones unarias, aditivas, multiplicativas, de incremento y decremento, relacionales, de igualdad y de asignación.
  • Una operación unaria permite poner un signo delante: +5, -2.
  • Una operación aditiva se refiere a la suma y la resta: 2+3, 5-2.
  • Una operación multiplicativa multiplica o divide dos valores: 5*2, 5/2. El operador % calcula el resto de la división entera 5%2.
  • Un incremento o decremento aumenta o decrementa en 1 el valor de una variable: ++numero, numero++, --numero, numero--. Si el operador va antes de la variable, primero se realiza la operación y se modifica el valor de la variable. Si el operador va después de la variable, su valor se modifica al final.
  • Un operador relacional permiten comparar dos valores: >, <, >= y <=. 
  • El resultado de la comparación es un valor booleano que indica si la relación es verdadera o falsa.
  • Un operador de igualdad compara si dos valores son iguales o no. El operador == devuelve verdadero si los dos valores son iguales, el operador != devuelve verdadero si son diferentes. El resultado de la comparación es un valor booleano que indica si la igualdad o desigualdad es verdadera o falsa.
  • Un operador de asignación permite asignar un valor o el resultado de una operación a una variable: =, +=, -=, *=, /=, %=.

Números reales. Con los números reales se aplican los mismos operadores que con los números enteros. Si se realizan operaciones unarias, aditivas o multiplicativas, el resultado es un número real. También se pueden aplicar los operadores relacionales para comparar dos números reales.

Booleanos. Los operadores que se aplican a los valores lógicos son: negación, Y lógico, O lógico.
  • La negación (!) devuelve true si el operando es false.
  • El Y lógico (&&) devuelve false si uno de los operandos es false.
  • El O lógico (||) devuelve true si uno de los operandos es true.



Espero haber ayudado en algo. Hasta la próxima oportunidad!










  
       
free counters

Páginas vistas en total según Google