[quote=Astork]Ae galera, estou estudando padrões de projetos… e estava lendo sobre o padrão Facade (Livro Use a Cabeça)
O livro cita este principio de projeto: "Principio do Minimo Conhecimento - só fale com seus amigos mais proximos"
E cita este exemplo
Sem o principio
public float getTemp() {
Thermometer thermometer = station.getThermometer();
return thermometer.getTemperature();
}
Comentário do livro: Aqui nos obtemos o objeto Thermometer de station e chamamos diretamente o seu metodo getTemperature();
Com o principio
public float getTemp() {
return station.getTemperature();
}
Comentário do livro: Aplicando o principio, acrescentamos a classe Station um metodo que faz a solicitacao ao objeto Thermometer para nós. Isso reduz o numero de classes das quais dependemos
A duvida é o seguinte… pelo que eu entendi, no exemplo com principio, ele criou um metodo getTemperature, e la dentro faz a chamada ao objeto Thermometer…, se o que entendi está certo… não consegui perceber porque fazer isto… já que o objeto que implementa este metodo vai ter que ter conhecimento da classe Thermometer do mesmo jeito.
Alguem sabe os beneficios deste principio, o padrao facade eu entendi bem, mas este principio falado no mesmo capitulo não entendi o real beneficio do mesmo.
Att[/quote]
O principio é relacionado ao que vc está fazendo não ao como.
O que está sendo dito é: se vc quer saber a temperatura na estação, pergunte À estação. Não tente perguntar a alguem a estação tem.
Visto por outro lado : como a estação sabe a temperatura ? Resposta: não importa. O que importa é que eu posso saber a temperatura na estação. O como isso é feito na implementação é irrelevante. E é irrelevante porque ira´mudar. Desenhar as classes com base nesse principio nada mais é do que desacoplar corretamente.
No caso em particular a estação tem um termometro e o usa para saber a temperatura. em um outro caso a estação simplesmente retorna um valor fixo, etc…
Básicamente , o principio tem que ver com não navegar na estrutura de objetos associados. Quanto mais vc usa o operador ponto, mais acoplado vc estará
Outro exemplo seria saber a idade de uma pessoa
vc pode fazer pessoa.getIdade(hoje) ou vc pode fazer
Date data = pessoa.getDataNascimento();
Utils.calculaIDade(data, hoje);
Na segunda forma vc precisa saber que a pessoa tem uma propriedade data de nascimento. No primeiro não. Embora a pessoa continue tendo esse atributo, ele não é usado directamente.
Se eu resolver colocá-lo como privado isso não afetará em nada o codigo que quer saber a idade da pessoa. é por isso que se fala tanto que os get/set são "evil’. Eles são a forma mais forte de acoplamento.