C# - Os tipos associação entre as classes - II


 Hoje vamos continuar mostrando os tipos de associação entre as classes.

Continuando o artigo anterior vejamos agora a agregação e a composição.

3- Agregação

A agregação é um tipo especial de associação onde as informações de um objeto (chamado objeto-todo) precisam ser complementados pelas informações contidas em um ou mais objetos de outra classe (chamados objetos-parte); temos então o que conhecemos como todo/parte. 

Nota: A agregação é um tipo de composição que representa um vínculo fraco entre duas classes.

O relacionamento de agregação ás vezes é referido como relacionamento "tem um" ou 'has a'.

Neste tipo de relacionamento, um objeto pode ser composto de um ou mais objetos na forma de suas propriedades.

Na agregação temos uma dependência fraca entre as classes, indicando que os outros objetos continuam existindo mesmo que o todo for removido.

Podemos dizer que uma classe agregada (o todo) é montada com um conjunto de componentes (as partes).

Vejamos um exemplo onde temos como classes Time e Jogador. Um time pode ser composto de nenhum ou vários jogadores. Um jogador pode estar contido no máximo em um tempo.

Entretanto, se eu excluir o time, os jogadores continuam existindo. Assim, utilizamos uma notação de agregação.

   public class Time
   {
       public string Nome { get; set; }
       List<Jogador> jogadores { get;  set; }
        public Time(string nome )
        {
             Nome = nome;
             jogadores = new List<jogador>();
        }
    }

    public class Jogador
    {
       public string Nome { get; set; }
    }

4- Composição

A Composição, representa um vínculo forte entre duas classes , e , é também um relacionamento caracterizado como parte/todo, mas, neste caso, o todo é responsável pelo ciclo de vida da parte. Assim a existência do Objeto-Parte NÃO faz sentido se o Objeto-Todo não existir.

Suponha uma escola com muitos departamentos onde cada departamento pode pertencer somente a uma escola.

1- Classe Escola

public class Escola
    {
        public string Nome { get; set; }
        List<Departamento> listaDepartamentos;
        public void GetDepartamentos()
        {
            Departamento dep1 = new Departamento { Nome = "Departamento1" };
            Departamento dep2 = new Departamento { Nome = "Departamento2" };
            listaDepartamentos.Add(dep1);
            listaDepartamentos.Add(dep2);
        }
    }

2- Classe Departamento

    public class Departamento
    {
        public string Nome { get; set; }
    }

Primeiro, cada instância de departamento, "dep1" e "dep2", pode pertencer apenas a uma única instância de Escola  por vez. Mas uma instância de escola pode ter várias instâncias de departamento anexadas a ela.

Portanto, isso torna a instância de escola a proprietária das instâncias "dep1" e "dep2", e esse é o recurso herdado da agregação na composição.

O tempo de vida das instâncias de departamento depende das instâncias de Escola, uma vez que elas são criadas dentro da classe da Escola. Portanto, quando a instância de escola for descartada, as instâncias "dep1" e "dep2" também serão eliminadas. 

Os departamentos não existem sem a escola.

E estamos conversados...

"Por isso não desfalecemos; mas, ainda que o nosso homem exterior se corrompa, o interior, contudo, se renova de dia em dia."
2 Coríntios 4:16

Referências:


José Carlos Macoratti