Uma associação é normalmente direcionada, ou seja, uma seta que sai da classe que precisa da colaboração e aponta para a classe que colabora.
É importante lembrar que uma classe colabora com uma responsabilidade de outra classe. Se passarmos isso para operações, temos então operações colaborando com operações. Isso pode ser fácil de perceber no nosso exemplo em que a operação ProduzirChamas() da classe Fogão precisa da operação FornecerGás() da classe BotijãoDeGás.
Você deve estar se perguntando por que eu estou falando isso. Estou falando isso porque o relacionamento de classes é a parte mais complexa da orientação a objetos e conseqüentemente a que mais gera confusões.
Precisamos agora definirmos uma notação para utilização das operações de um objeto.
Vamos usar a seguinte: Objeto.Operação()
Para um objeto fogão seria: meuFogão.ProduzirChamas()
Para um objeto botijão de gás seria: meuBotijãoDeGás.FornecerGás()
Agora como tornar a
responsabilidade “Fornecer Gás” do botijão uma colaboração para a responsabilidade do fogão
“Produzir chamas”?