Principio do Minimo Conhecimento  XML
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Autor Mensagem
Astork
JavaGuru

Membro desde: 13/11/2008 17:14:18
Mensagens: 214
Localização: Curitiba
Offline

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

Comentário do livro: Aqui nos obtemos o objeto Thermometer de station e chamamos diretamente o seu metodo 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
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline

Quando você cria um método ou um construtor que recebe um objeto (criado sei lá como) que implementa a interface Temperature, permite que você possa usar algum framework de inversão de controle ou injeção de dependências. São eles que usam, na prática, esse tal princípio. Nesse caso, você não deveria ter de saber que é necessário criar um objeto do tipo Temperature (poderia ser um objeto que lhe passassem que só implementasse a interface Temperature, tal como "FahrenheitTemperature").

This message was edited 1 time. Last update was at 23/02/2010 18:32:33

Astork
JavaGuru

Membro desde: 13/11/2008 17:14:18
Mensagens: 214
Localização: Curitiba
Offline

entanglement, este caso então, faltou um pouco mais de detalhe do proprio livro !!!

pois imaginei o metodo getTemperature(); assim

Ou seja, apenas não está chamando no metodo getTemp, mas mesmo assim ainda preciso conhecero o Thermometer...

E segundo a sua explicação ficaria assim

Ou até passar o InterfaceThermometer no construtor etc.. o que fica a mesma coisa que o metodo.. seria isto?
ffranceschi
JavaChild
[Avatar]

Membro desde: 23/08/2006 11:07:21
Mensagens: 130
Offline


"Principio do Minimo Conhecimento - só fale com seus amigos mais proximos"


Esse principio é para voce minimizar o acoplamento entre as classes... procure por Law of Demeter

Tem livros que falam sobre isso ... Code Complete, Pragmatic Programmer, Clean Code...

Abraços

Fernando Franceschi
Blog - http://ffranceschi.wordpress.com/
Twitter - http://twitter.com/ffranceschi1
[WWW]
sergiotaborda
GUJ Expert
[Avatar]

Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline

Astork wrote: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

Comentário do livro: Aqui nos obtemos o objeto Thermometer de station e chamamos diretamente o seu metodo 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


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



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.

This message was edited 1 time. Last update was at 23/02/2010 23:16:00


Criando sua própria API de Validação



Blog do MiddleHeaven
[WWW]
Astork
JavaGuru

Membro desde: 13/11/2008 17:14:18
Mensagens: 214
Localização: Curitiba
Offline

Valeu pessoal pelas respostas/dicas.. !!!

O Exemplo do livro acho que poderia ser um pouco mais detalhado... demonstrando assim como vcs citaram.. mas é isto ae..

Valeu. Att
 
Índice dos Fóruns » Metodologias de Desenvolvimento e Testes de Software
Ir para:   
Powered by JForum 2.1.8 © JForum Team