Está en la página 1de 4

http://www.ingenieriasystems.

com

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.

?
1
2
3 public class Vehiculo {
private String matricula;
4 private String marca;
5 private String modelo;
6 private String color;
7 private double tarifa;
8 private boolean disponible;
// se omiten los métodos ‘get’ y ‘set’ de la clase
9 public Vehiculo(String matricula,
10 String marca,
11 String modelo,
12 String color,
double tarifa) {
13 this.matricula = matricula;
14 this.marca = marca;
15 this.modelo = modelo;
16 this.color = color;
17 this.tarifa = tarifa;
this.disponible = false;
18 }
19 }
20
21

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.

?
1 public class Cliente {
private String nif;
2 private String nombre;
3 private String apellidos;
4 // se omiten los métodos ‘get’ y ‘set’ de la clase
5 public Cliente(String nif, String nombre, String apellidos) {
6 this.nif = nif;
this.nombre = nombre;
7 this.apellidos = apellidos;
8 }
http://www.ingenieriasystems.com

9 }
10
11

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 {
1 private Cliente cliente;
2 private Vehiculo vehiculo;
3 private int diaAlquiler;
4 private int mesAlquiler;
private int añoAlquiler;
5 private int totalDiasAlquiler;
6 public VehiculoAlquilado(Cliente cliente,
7 Vehiculo vehiculo,
8 int diaAlquiler,
9 int mesAlquiler,
int añoAlquiler,
10 int totalDiasAlquiler) {
11 this.cliente = cliente;
12 this.vehiculo = vehiculo;
13 this.diaAlquiler = diaAlquiler;
this.mesAlquiler = mesAlquiler;
14 this.añoAlquiler = añoAlquiler;
15 this.totalDiasAlquiler = totalDiasAlquiler;
16 }
17 // los métodos ‘get’ de los atributos de tipo objeto
18 // Cliente y Vehiculo
public Cliente getCliente() {
19 return this.cliente;
http://www.ingenieriasystems.com

20 }
21 public Vehiculo getVehiculo() {
return this.vehiculo;
22 }
23 }
24
25
26
27
28
29

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.

?
1
2
3 public class MisVehiculos {
4 public static void main(String args[]) {
5 // se crean dos instancias de la clase Vehiculo
Vehiculo vehiculo1 = new Vehiculo("4050 ABJ",
6
"VW",
7 "GTI",
8 "Blanco",
9 100.0);
10 Vehiculo vehiculo2 = new Vehiculo("2345 JVM",
"SEAT",
11 "León",
12 "Negro",
13 80.0);
14 // se crea una instancia de la clase Cliente
15 Cliente cliente1 = new Cliente("30435624X", "Juan", "Pérez");
// se crea una instancia de la clase VehiculoAlquilado que
16 // relaciona al cliente1 con el vehiculo1, el vehículo se
17 // alquila con fecha 11/11/2011 durante 2 días
18 VehiculoAlquilado alquiler1 = new VehiculoAlquilado(cliente1,
19 vehiculo1,
11,
20 11,
21 2011,
22 2);
23 }
24 }
25
26
http://www.ingenieriasystems.com

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.

?
1 alquiler1.getCliente().getNIF();
2 alquiler1.getVehiculo().getMatricula();

Los datos del cliente y del vehículo alquilado:

?
1
System.out.println("Vehículo alquilado")
2
3 System.out.println("Cliente : " +
4 alquiler1.getCliente().getNIF() + " " +
5 alquiler1.getCliente().getNombre() + " " +
6 alquiler1.getCliente().getApellidos());
System.out.println("Vehículo: " +
7 alquiler1.getVehiculo().getMatricula());
8

La salida por la consola:


Vehículo alquilado
Cliente : 30435624X Juan Pérez
Vehículo: 4050 ABJ

También podría gustarte