Composición Poo Java
Composición Poo Java
Un sistema orientado a objetos está caracterizado por objetos que interactúan entre sí.
Estas interacciones suponen ciertos tipos de relaciones entre los objetos del sistema. La
semántica que expresa un objeto en el sistema está determinada, en primer lugar, por las
relaciones que éste establece con otros objetos o conjuntos de objetos. Tomemos como
ejemplo un objeto fecha, del que sin establecer ningún tipo de relación, podría decirse que
significa un día del año particular. Pero si relacionamos ese objeto fecha con un
objeto Persona de manera que represente la fecha en que esa persona nació, en ese
contexto dado, el mismo objeto fecha adoptaría un significado diferente, el de
un cumpleaños; aunque sigue siendo una fecha, ahora tiene otra idea asociada. Las
relaciones entre objetos no solo están definidas por los objetos que participan y la
circunstancia que los relaciona, sino también por la cantidad de objetos (cardinalidad de la
relación) y la dirección de la misma. Una relación puede tener cardinalidad:
y direccionalidad:
· bidireccional
Composición
La composición (también conocida como relación asociativa) es un tipo de relación que se
establece entre dos objetos que tienen comunicación persistente. Se utiliza para expresar
que un par de objetos tienen una relación de dependencia para llevar a cabo su función,
de modo que uno de los objetos involucrados está compuesto por el otro.
De manera práctica, es posible reconocer asociatividad entre dos objetos A y B si la
proposición "A tiene un B" (o viceversa) es verdadera. Por ejemplo: "una computador
tiene un disco duro" es verdadero; por tanto, un objeto computador tiene una relación de
composición con al menos un objeto disco duro.
Los dos conceptos que debes conocer cómo mínimo cuando intentas descifrar la forma en
que tus objetos deben interactuar son Asociación y Composición.
Asociación
La asociación se podría definir como el momento en que dos objetos se unen para
trabajar juntos y así, alcanzar una meta.
Un punto a tomar muy en cuenta es que ambos objetos son independientes entre sí,
veremos un poco más adelante qué implicación tiene esto. Para validar la asociación, la
frase “Usa un”, debe tener sentido:
Composición
En caso contrario, la composición es un tipo de relación dependiente en dónde un objeto
más complejo es conformado por objetos más pequeños. En esta situación, la frase
“Tiene un”, debe tener sentido:
· El auto tiene llantas
Y como ésta mini guía no va a mencionar nada de UML. Vamos a ver directamente en
código cómo se verían representadas ambos tipos de relaciones.
Cómo implementar Asociación
Representaremos la relación: El cliente usa tarjeta de crédito.
Código pascal :
type
Customer = Class
private
id:integer;
fistName,lastName:String;
creditCard: CreditCard;
public
constructor Customer();
procedure setCreditCard(creditCards:CreditCard);
end;
constructor Customer.Customer();
begin
//Lo que sea que el construtor haga
end;
procedure Customer.setCreditCard(creditCards: CreditCard);
begin
creditCard = creditCards;
end;
Código java :
public class Customer {
public Customer() {
//Lo que sea que el construtor haga
}
constructor Laptop.Laptop();
begin
//Lo que sea que el construtor haga
keyBoard := KeyBoard.create();
end;
Código Java:
public class Laptop {
private String manufacturer;
private String model;
private String serviceTag;
private KeyBoard keyBoard = new KeyBoard();
public Laptop() {
//Lo que sea que el constructor haga
}
Muy similar, pero hay una gran diferencia: Podemos crear un objeto de tipo Customer
y asignarle un CreditCard más tarde mediante el método setCreditCard.
En la asociación:
2. Se puede asignar o retirar la tarjeta de crédito, sin que la existencia del Cliente
se vea afectada (No debería verse afectada, esto significa que Customer no
debe tronar si no hay un CreditCard presente).
En la composición:
1. Los objetos que componen a la clase contenedora, deben existir desde el principio.
(También pueden ser creados en el constructor, no sólo al momento de declarar las
variables como se muestra en el ejemplo).
2. No hay momento (No debería) en que la clase contenedora pueda existir sin alguno de
sus objetos componentes. Por lo que la existencia de estos objetos no debe ser
abiertamente manipulada desde el exterior de la clase.