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!
Twittear

Muy bien explicado
ResponderEliminarHola Ing. Victor Manuel Valdelamar Garcia, gracias por tu comentario. Los mejores deseos para este 2021.
EliminarGracias por esta info, usare tu ejemplo para mi tarea :D
ResponderEliminarHola Pit!, gracias por tu comentario. Qué bueno que te ayudó. Los mejores deseos para este 2021.
Eliminarhola estimado, lo que estaba buscando, despejaste mi inquietud! Excelente explicación.
ResponderEliminarHola jhon ospino, gracias por tu participación. Es bueno saber que te ayudó.
EliminarSaludos!
Muy bien explicado!
ResponderEliminarHola Unknown, gracias por la visita y el aporte de tu comentario.
EliminarMuy buena explicacion, muchas gracias
ResponderEliminarHola Anónimo, gracias por la visita y el aporte de tu comentario.
Eliminar