viernes, 4 de marzo de 2016

Composición en JAVA



La composición consiste en crear una clase nueva agrupando objetos de clases que ya existen. Una composición agrupa uno o más objetos para construir una clase, de manera que las instancias de esta nueva clase contienen uno o más objetos de otras clases. Normalmente los objetos contenidos se declaran con acceso private y se inicializan en el constructor de la clase.
La clase Vehiculo está compuesta de objetos de tipo String. Los atributos matricula, marca, modelo y color en realidad son objetos de la clase String.

public class Vehiculo {
private String matricula;
private String marca;
private String modelo;
private String color;
private double tarifa;
private boolean disponible;
// se omiten los métodos ‘get’ y ‘set’ de la clase
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;
}
}

Para hacer una composición utilizando objetos de una clase diferente de String, lo primero es definir una nueva clase. La clase Cliente formará junto con Vehiculo la clase VehiculoAlquilado utilizando la composición.

public class Cliente {
private String nif;
private String nombre;
private String apellidos;
// se omiten los métodos ‘get’ y ‘set’ de la clase
public Cliente(String nif, String nombre, String apellidos) {
this.nif = nif;
this.nombre = nombre;
this.apellidos = apellidos;
}
}

Ahora se define una composición que declara un objeto de la clase Vehiculo y un objeto de la clase Cliente. La nueva clase VehiculoAlquilado relaciona una instancia de la clase Vehiculo con una instancia de la clase Cliente y crea objetos que almacenan relaciones entre clientes y vehículos de alquiler.



Esto significa que para instanciar un objeto de la clase VehiculoAlquilado es necesario tener referencias a objetos de las clases Cliente y Vehiculo.

public class VehiculoAlquilado {
private Cliente cliente;
private Vehiculo vehiculo;
private int diaAlquiler;
private int mesAlquiler;
private int añoAlquiler;
private int totalDiasAlquiler;
public VehiculoAlquilado(Cliente cliente,
Vehiculo vehiculo,
int diaAlquiler,
int mesAlquiler,
int añoAlquiler,
int totalDiasAlquiler) {
this.cliente = cliente;
this.vehiculo = vehiculo;
this.diaAlquiler = diaAlquiler;
this.mesAlquiler = mesAlquiler;
this.añoAlquiler = añoAlquiler;
this.totalDiasAlquiler = totalDiasAlquiler;
}
// los métodos ‘get’ de los atributos de tipo objeto
// Cliente y Vehiculo
public Cliente getCliente() {
return this.cliente;
}
public Vehiculo getVehiculo() {
return this.vehiculo;
}
}

La clase VehiculoAlquilado contiene un objeto de la clase Cliente, un objeto de la clase Vehiculo y atributos de tipo int para almacenar el día, el mes y el año de la fecha del alquiler del vehículo y el total de días de alquiler. La clase contenedora es VehiculoAlquilado y las clases contenidas son Cliente y Vehiculo.

El programa principal donde se crean los objetos de las clases Cliente, Vehiculo y VehiculoAlquilado.

public class MisVehiculos {
public static void main(String args[]) {
// se crean dos instancias de la clase Vehiculo
Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",
"VW",
"GTI",
"Blanco",
100.0);
Vehiculo vehiculo2 = new Vehiculo("2345 JVM",
"SEAT",
"León",
"Negro",
80.0);
// se crea una instancia de la clase Cliente
Cliente cliente1 = new Cliente("30435624X", "Juan", "Pérez");
// se crea una instancia de la clase VehiculoAlquilado que
// relaciona al cliente1 con el vehiculo1, el vehículo se
// alquila con fecha 11/11/2011 durante 2 días
VehiculoAlquilado alquiler1 = new VehiculoAlquilado(cliente1,
vehiculo1,
11,
11,
2011,
2);
}
}

En una relación de composición, hay atributos de la clase contenedora que son objetos que pertenecen a la clase contenida. Un objeto de la clase contenedora puede acceder a los métodos públicos de las clases contenidas. 
En la declaración de la clase VehiculoAlquilado se han definido dos métodos ‘get’ para los atributos de tipo objeto. El método getCliente() devuelve un objeto de tipo Cliente y el método getVehiculo() devuelve un objeto de tipo Vehiculo.
Por ejemplo, el objeto alquiler1 de la clase VehiculoAlquilado puede acceder a los métodos públicos de su propia clase y de las clases Cliente y Vehiculo. Un objeto de la clase VehiculoAlquilado puede ejecutar métodos ‘get’ para mostrar la información de los objetos que contiene.

alquiler1.getCliente().getNIF();
alquiler1.getVehiculo().getMatricula();

Los datos del cliente y del vehículo alquilado:

System.out.println("Vehículo alquilado")

System.out.println("Cliente : " +
alquiler1.getCliente().getNIF() + " " +
alquiler1.getCliente().getNombre() + " " +
alquiler1.getCliente().getApellidos());
System.out.println("Vehículo: " +
alquiler1.getVehiculo().getMatricula());

La salida por la consola:
Vehículo alquilado
Cliente : 30435624X Juan Pérez
Vehículo: 4050 ABJ


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











  

No hay comentarios:

Publicar un comentario en la entrada