Criar objetos em sistemas orientados a objetos é algo rotineiro. Porem quem cria o objeto X? Qual a classe que deve ter essa resposabilidade? São questões levantadas em diversos momentos da implementação do código.
Apesar de ser um processo simples, a instânciação de objetos no código sem uma devida análise dos impactos pelo programador acarreta em um projeto com um alto acoplamento, tornando difícil sua manutenção e reutilização.
Problema: Definir adequadamente aplicando o conceito de responsabilidade qual objeto é responsável pela criação de uma nova instância dentro da aplicação.
Solução: Atribua à classe B a resposnabilidade de criar a instância da classe A se uma das seguintes condições for verdadeira(quanto mais melhor):
- B “contém” A ou agrega A de modo composto
- B registra A
- B usa A de maneira muito próxima
- B tem os dados iniciais de A
O princípio criador auxilia na definição de qual objeto deve ser responsável por criar uma nova instância de classe. Essa atribuição bem definida da apoio para que o projeto apresente um baixo acoplamento, melhor encapsulamento e reutilização.
Repare que a escolha adequada desse princípio (criador) impacta no princípio de baixo acoplamento.
Outra forma de relacionamento também presente é de especialista de informação que é dado pela identificação de classes que possui os dados iniciais que serão passado como parâmetros durante a criação do objeto, mencionsado na condição 4.
A identificação de relacionamentos de objetos por composição ou agregação é uma boa diretriz para identificar os objetos que serão responsáveis por instânciar classes.
Contra-Indicações: Os processos onde é necessário instânciar classes de uma determinada família com base em um valor propriedades externa, é aconcelhável a delegar esse atividade a classes auxiliares chamadas de Fabrica Concreta ou Abstrata.
Composição ou Agregação?
Outro ponto onde programadores apresentam dúvidas é definir quando um relacionamento é dado por composição ou agregação.
Relacionamentos de composição, é dado pela dependência na qual o tempo de vida de um objeto é controlado por outro que o criou. Em outras palavras, o ciclo de vida do objeto depende do tempo de vida de quem o criou.

Relacionamentos de agregação, o tempo de vida dos objetos são independentes, ou seja, se o controlador for destruido, o objeto contido não será.

Podemos perceber que relacionamentos de composição quase sempre serão responsáveis por criarem objetos de seus relacionamentos, porem relacionamentos do tipo agregação normalmente não.
