[quote=rmendes08][quote=macario1983][quote=rmendes08]Santa mãe de Deus pessoal! O cara tá começando agora … será que pra fazer uma classe microondas o cara vai precisar de Spring + Hibernate e arquitetura multi-camadas ???
[code]
class Microondas{
public static final int BAIXA = 1;
public static final int MEDIA = 2;
public static final int ALTA = 3;
public static final int MAXIMA = 4;
private int potencia = BAIXA;
private int tempoEmSegundos = 0;
public void aumentaPotencia(){
if(potencia < MAXIMA)
potencia++;
}
public void diminuiPotencia(){
if(potencia > BAIXA)
potencia–;
}
public void aumentaTempo(int segundos){
tempoEmSegundos += segundos;
}
//…
}
[/code][/quote]
vlw pela ideia, julgado o que fiz la em cima, vc acha estar muito errado?
[/quote]
Nem tanto … acho que o seu erro principal foi ter criado as classes AumentarPotencia e DiminuirPotencia, e isso te confundiu te levando a criar variáveis estáticas para fazer as coisas. Veja bem, classes servem para representar coisas: Carro, Cliente, Animal, NotaFiscal, Funcionario, etc. enquanto que ações como acelerar(), contratar(), faturar(), latir(), caminhar() são ações de objetos, e tem que ser representados como métodos dentro de uma classe entendeu ? No seu caso, aumentarPotencia() e diminuirPotencia() devem ser métodos de uma classe Microondas ou de uma classe Potencia. Você vai ver que quando você aplica esses conceitos a necessidade de variáveis estáticas diminui. Via de regra, não use variáveis estáticas. Se você ficar tentado a fazê-lo, venha no fórum e peça uma segunda opinião …
Quanto ao modelo que eu coloquei, ele pode ser refinado sim, sem problemas:
class Microondas{
private Potencia potencia;
private Tempo tempo;
public void aumentarPotencia(){
potencia.aumentarPotencia();
}
}
o que eu fiz foi refinar o modelo aplicando um conceito chamado de composição. No modelo anterior o próprio microondas sabia como aumentar ou diminuir a potência. No segundo modelo, o microondas delega essa função para um componente interno, do qual o usuário do microondas não tem conhecimento. [/quote]
hum…
realmente sobre composição eu sei algo, vc cria as classes dos objetos que compoem determinado objeto maior…
por exemplo um carro…que tem volante, freio, acelerador…
sobre eu ter quebrado os métodos em suas classes foi pensando em ficar mais descentralizado pois comecei a ler o livro do fowler sobre refatoração mas concordo totalmente quando vc diz sobre responsabilidade das classes…
exemplo: freio - freia
acelerador - acelera
o problema seria mais por conta de enxergar que por exemplo ao instanciar a classe do microondas ele so instanciar uma vez a classe potencia entre outras…
Acho que ai que esta a chave para meu entendimento basico sobre uma parcela de OO…
Acredito que eu possa extrair as classes colocando elas nos metodos e manter o enum…
Irei trabalhar aqui no codigo e qualquer duvida a mais posto aqui…
vlw