Oct.18

Diagrama de Clases UML: Agregación y Composición

Las relaciones de Agregación y Composición son dos tipos de especialización de la relación de Asociación.

Agregación

Definición

Es muy similar a la relación de Asociación solo varía en la multiplicidad ya que en lugar de ser una relación "uno a uno" es de "uno a muchos".

Representación UML

Se representa con una flecha que parte de una clase a otra en cuya base hay un rombo de color blanco.

  • La ClaseA agrupa varios elementos del tipo ClaseB.

Ejemplo

  • Tenemos una clase Agenda.
  • Tenemos una clase Contacto.
  • Una Agenda agrupa varios Contactos.

Composición

Definición

Similar a la relación de Agregación solo que la Composición es una relación mas fuerte. Aporta documentación conceptual ya que es una "relación de vida", es decir, el tiempo de vida de un objeto está condicionado por el tiempo de vida del objeto que lo incluye.

Representación UML

Se representa con una flecha que parte de una clase a otra en cuya base hay un rombo de color negro.

  • La ClaseA agrupa varios elementos del tipo ClaseB.
  • El tiempo de vida de los objetos de tipo ClaseB está condicionado por el tiempo de vida del objeto de tipo ClaseA.

Ejemplo

  • Tenemos una clase Silla.
  • Un objeto Silla está a su vez compuesto por cuatro objetos del tipo Pata.
  • El tiempo de vida de los objetos Pata depende del tiempo de vida de Silla, ya que si no existe una Silla no pueden existir sus Patas.


Traduciendo a Código

La forma de traducir ambos tipos de relación a código es tener un atributo en la clase compuesta donde almacenaremos una colección de los objetos que la componen. Dependiendo del lenguaje podremos utilizar diferentes estructuras de datos que nos permitan almacenar la colección de objetos, aunque generalmente se utilizan arreglos para este fin. Además debemos de proporcionar un método para agregar elementos a la colección.

En el ejemplo de la Agenda:

Código traducido a PHP:

Contacto.php

<?php
/* Clase Contacto */
Class Contacto
{
    private $_nombre;
    private $_telefono;

    public function __construct($nombre, $telefono) {
        $this->_nombre = $nombre;
        $this->_telefono = $telefono;
    }
}
?>

Agenda.php

<?php
/* Incluimos la clase Contacto */
require_once 'Contacto.php';

/* Clase Agenda */
class Agenda
{
   private $_contactos = array();

   public function __construct() {

   }

   public function addContacto(Contacto $contacto)
   {
      $this->_contactos[] = $contacto;
   }
}
?>

En la practica:

<?php
/* Creamos una instancia de Agenda */
$miAgenda = new Agenda();

/* Agregamos algunos Contactos*/
$miAgenda->addContacto(new Contacto("Pepe", "3-21-54-87"));
$miAgenda->addContacto(new Contacto("Juan", "3-32-65-98"));
$miAgenda->addContacto(new Contacto("Luis", "3-78-13-46"));
?>
Desarrollo,UML,Ingeniería de Software
Share this Story:
  • facebook
  • twitter
  • gplus

About Didier

Comments(1)

  1. Trackback: Mis apuntes de UML (Diagrama de Clases) | Blog de Oscar Valenzuela

Leave a comment

Comment