Só aumentando a variedade de exemplos:
Para uma mesma modelagem:

public void sacar(Caixa caixa) {
   caixa.cartao(meuCartao);
   caixa.senha(minhaSenha);
   caixa.operacao(saque);
   minhaCarteira = minhaCarteira + caixa.quantia(50);
}

Ainda posso ter várias implementações:

public void sacar(Caixa caixa) {
   minhaCarteira = minhaCarteira + caixa.saque(meuCartao, minhaSenha, 50);
}

ou se não quisesse usar cartão:

public void sacar(Caixa caixa) {
   minhaCarteira = minhaCarteira + caixa.saque(agencia,
conta, minhaSenha, 50);
}

ou se meu banco só tivesse uma agência:

public void sacar(Caixa caixa) {
   minhaCarteira = minhaCarteira + caixa.saque(conta, minhaSenha, 50);
}

tanto faz, percebe?

O importante é determinar quem participa e perceber a quem cabe fazer o que,
quem interage com quem e a ordem que faz mais sentido.

Peter P. Lupo
http://craftnicely.blogspot.com - http://sites.google.com/site/pplupo
 <http://sites.google.com/site/pplupo>MPS.BR Authorized Implementation
Practitioner<http://www.softex.br/mpsbr/_profissionais/MPS.BR_certificados_de_arovacao_prova_P2-MPS.BR.pdf>-
Certified
ScrumMaster <http://www.scrumalliance.org/pages/certified_scrummaster>
 <http://www.scrumalliance.org/pages/certified_scrummaster>Oracle Certified
Associate, Java SE 5/SE
6<http://in.sun.com/training/certification/java/scja.xml> -
Java Black Belt <http://www.blackbeltfactory.com/ui#!User/pplupo>
 <http://www.blackbeltfactory.com/ui#!User/pplupo>+55 (021) 81742487



2011/4/24 Peter P. Lupo <[email protected]>

> Antes de mais nada, foi uma sugestão. Há outras formas, algumas também
> corretas (outras nem tanto) de fazer. Só quis dar um exemplo que te
> orientasse a buscar as entidades que participam do problema e identificar
> quais as suas responsabilidades.
>
> Suponha por exemplo que você está fazendo um saque bancário (na vida real).
>
> Você teria como participantes você mesmo (cliente), o caixa automático e o
> dinheiro em si passando de um para o outro. Além disso há a conta, onde fica
> registrado o saldo. Você também pode definir que você vai guardar o dinheiro
> na carteira. Tanto faz. Você deve identificar o que é RELEVANTE para o seu
> sistema, ou seja, um modelo. Um modelo é como uma maquete. Você representa
> de forma minimalista o que interessa para resolver o problema e descarta
> atributos desnecessários.
>
> No saque, você pede um valor ao caixa, ele desconta da sua conta e te
> entrega.
>
> Então uma solução poderia ser:
>
> cliente.sacar(caixa);
> método sacar:
> public void sacar(Caixa caixa) {
>    caixa.cartao(meuCartao);
>    caixa.senha(minhaSenha);
>    caixa.operacao(saque);
>    minhaCarteira = minhaCarteira + caixa.quantia(50);
> }
>
> Outra solução poderia ser:
>
> Conta conta = Banco.getConta(agencia, numero);
> conta.saque(50);
> Carteira carteira = cliente.getCarteira();
> carteira.adiciona(50);
>
> Vê? Em uma solução eu não precisei do banco e tinha cartão. Na outra eu não
> tinha cartão mas usei o banco. As duas estão corretas.
> Em nenhuma delas eu fiz algo tipo:
>
> cartao.sacarDinheiro(50)
> ou
> dinheiro.senha("XXX");
>
> porque o cartão não saca e dinheiro não tem a ver com senha. ;-)
>
> Quanto à sua dúvida, posso já ter respondido, mas caso não, vamos abstrair
> o problema.
>
> public int duplica(XXXXXXX) {
>     return 2*a;
> }
>
> O que você escreveria no lugar do "XXXXXXX" para o método funcionar?
>
> Peter P. Lupo
> http://craftnicely.blogspot.com - http://sites.google.com/site/pplupo
>  <http://sites.google.com/site/pplupo>MPS.BR Authorized Implementation
> Practitioner<http://www.softex.br/mpsbr/_profissionais/MPS.BR_certificados_de_arovacao_prova_P2-MPS.BR.pdf>-
>  Certified
> ScrumMaster <http://www.scrumalliance.org/pages/certified_scrummaster>
>  <http://www.scrumalliance.org/pages/certified_scrummaster>Oracle
> Certified Associate, Java SE 5/SE 
> 6<http://in.sun.com/training/certification/java/scja.xml> -
> Java Black Belt <http://www.blackbeltfactory.com/ui#!User/pplupo>
>  <http://www.blackbeltfactory.com/ui#!User/pplupo>+55 (021) 81742487
>
>
>
> 2011/4/24 Augusto Vanderley <[email protected]>
>
>> Então no caso a classe Personagem que possui o método comprarEspada?
>> Não entendi como fazer o método recebendo o parâmetro loja. :S
>>
>> Em 24 de abril de 2011 22:01, Peter P. Lupo <[email protected]> escreveu:
>>
>> Augusto,
>>>
>>> É importante identificar quem faz o que. Quem compra as espadas é o
>>> personagem. E ele as compra da loja. Então uma chamada do tipo:
>>>
>>> personagem.comprarEspada(loja)
>>>
>>> faz mais sentido pois o personagem é quem irá efetuar a compra em uma
>>> loja.
>>>
>>> A loja, conforme é pedido, deve ter vários itens. Você não deve modelar
>>> uma loja, vc deve modelar um jogo. Neste jogo você encontra personagens,
>>> lojas, espadas e outros itens, cada um com seu comportamento definido dentro
>>> do esperado. ;-)
>>>
>>> Veja se isto te ajuda a identificar quais métodos vão em quais classes.
>>>
>>> Abraço
>>>
>>> Peter P. Lupo
>>> http://craftnicely.blogspot.com - http://sites.google.com/site/pplupo
>>>  <http://sites.google.com/site/pplupo>MPS.BR Authorized Implementation
>>> Practitioner<http://www.softex.br/mpsbr/_profissionais/MPS.BR_certificados_de_arovacao_prova_P2-MPS.BR.pdf>-
>>>  Certified
>>> ScrumMaster <http://www.scrumalliance.org/pages/certified_scrummaster>
>>>  <http://www.scrumalliance.org/pages/certified_scrummaster>Oracle
>>> Certified Associate, Java SE 5/SE 
>>> 6<http://in.sun.com/training/certification/java/scja.xml> -
>>> Java Black Belt <http://www.blackbeltfactory.com/ui#!User/pplupo>
>>>  <http://www.blackbeltfactory.com/ui#!User/pplupo>+55 (021) 81742487
>>>
>>>
>>>
>>> 2011/4/24 Cleiton Menezes <[email protected]>
>>>
>>>> também gostei deste método!!!!
>>>>
>>>> Em 24 de abril de 2011 21:46, Felipe Costa 
>>>> <[email protected]>escreveu:
>>>>
>>>> Você consegue acessar os dados dos personagens pela main
>>>>> porque você está instanciando Personagem na main.
>>>>>
>>>>> Bem, existe algumas formas de fazer isso. Uma delas seria você passar
>>>>> como pararametro o objeto pessoa e consultar o saldo dentro do método:
>>>>> Espadas espadas = new Espadas;
>>>>> espadas.comprarEspadas(p);
>>>>>
>>>>>
>>>>> Abs
>>>>> --
>>>>> Felipe Costa
>>>>> Undergraduating in Computer Science at UFRJ
>>>>> Black belt <http://www.blackbeltfactory.com/ui#User/fcosta> on
>>>>> JavaBlackBelt  <http://www.blackbeltfactory.com/ui#User/fcosta>
>>>>>
>>>>>
>>>>>
>>>>> 2011/4/24 Augusto Vanderley <[email protected]>
>>>>>
>>>>>> Estou com uma dúvida sobre a lista, espero que alguém possa me ajudar.
>>>>>> Vou dar um exemplo.
>>>>>>
>>>>>> Eu criei no método main um objeto de Personagem usando:
>>>>>> "Personagem p1 = new Personagem"
>>>>>> Consigo acessar os dados do personagem pela main ou acessar seus
>>>>>> métodos estáticos.
>>>>>> Na classe "Espadas" criei um método comprarEspadas que precisa
>>>>>> verificar o saldo do personagem p1 através de um método getSaldo().
>>>>>>
>>>>>> Como fazer para chamar o método getSaldo? Preciso criar denovo o
>>>>>> objeto p1? Faço a gambiarra de deixar o método static getSaldo já que só
>>>>>> temos um personagem mesmo?
>>>>>>
>>>>>> Espero que tenham compreendido minha dúvida e possam me ajudar.
>>>>>> Abraços
>>>>>> Augusto
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "Comp 2 - Geral" group.
>>>>>> To post to this group, send email to [email protected].
>>>>>> To unsubscribe from this group, send email to
>>>>>> [email protected].
>>>>>> For more options, visit this group at
>>>>>> http://groups.google.com/group/comp2-geral?hl=en.
>>>>>>
>>>>>
>>>>>  --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Comp 2 - Geral" group.
>>>>> To post to this group, send email to [email protected].
>>>>> To unsubscribe from this group, send email to
>>>>> [email protected].
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/comp2-geral?hl=en.
>>>>>
>>>>
>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Comp 2 - Geral" group.
>>>> To post to this group, send email to [email protected].
>>>> To unsubscribe from this group, send email to
>>>> [email protected].
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/comp2-geral?hl=en.
>>>>
>>>
>>>  --
>>> You received this message because you are subscribed to the Google Groups
>>> "Comp 2 - Geral" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> For more options, visit this group at
>>> http://groups.google.com/group/comp2-geral?hl=en.
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Comp 2 - Geral" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group at
>> http://groups.google.com/group/comp2-geral?hl=en.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups "Comp 
2 - Geral" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/comp2-geral?hl=en.

Responder a