Microondas

boa tarde

tenho um exercicio de criar um forno microondas em java

ja criei a classes de alguns itens que idetifiquei no aparelho

  • porta
  • lampada
  • temperatura
  • timer
  • prato giratorio
  • ventilador

e ai vem uma duvida em relacao a oo…

eu queria saber o seguinte, tem como eu pegar essa classes e juntar elas todas numa classe microondas?

eu deveria criar um atributo de cada classe acima que criei?

pq irei implementar funcoes, como aumentar temperatura…esquentar…
as classes acima citadas ja tem suas funções implementadas

pensei em usar interface mas acho que n daria mt certo…

qual a opiniao de vcs?

O certo seria composição mesmo. Onde um objeto é composto por outros,

então sua primeira ideia é a correta, de que tem que ter um atributo na classe Microondas para cada um dos objetos que a compõe.

[quote=digaoneves]O certo seria composição mesmo. Onde um objeto é composto por outros,

então sua primeira ideia é a correta, de que tem que ter um atributo na classe Microondas para cada um dos objetos que a compõe.[/quote]

pois é, eu to aqui fazendo e fiz assim

criei as classes do componentes q eu julguei necessarios para funcionar um microondas como citei la em cima…

criei a classe painel e no construtor dela eu crio dos objetos

e criei junto metodos como:

descongelar
preparar alimento
aumentar a temperatura
diminuir temperatura…

e ai queria uma dica quando eu quebro isso em pedaços menores estou diminuindo o acomplamento?

e o que seria melhor?

public class Lampada {

	private boolean isLigada;
	private static final String MSG_ACESA = "Lampada Acesa";
	private static final String MSG_APAGADA = "Lampada Apagada";

	public boolean isLigada() {
		return isLigada;
	}

	public void setLigada(boolean isLigada) {
		this.isLigada = isLigada;
		mostrar();
	}

	private void mostrar() {
		System.out.println(this.isLigada ? MSG_ACESA : MSG_APAGADA);
	}
}

eu criei a classe lampada, era melhor criar 2 metodos um de apagar e outro de acender ou deste jeito esta bacana?

	public void descongelar() throws ExcessaoTempo, ExcessaoTemperatura {
		porta.setFechada(true);
		lampada.setLigada(true);
		pratoGiratorio.setGirando(true);

		do {
			termostato.diminuirTemperatura();
		} while (termostato.getTemperatura() != termostato.TEMPERATURA_MINIMA);

		timer.setTempo(10);
		pratoGiratorio.setGirando(false);
		System.out.println("Alimento descongelado!");
		porta.setFechada(false);
	}

pq na classe painel ai eu so passo parametro boolenao para a função e diminui o codigo…

vlw pela ajuda…

vai funcionar, mas eu faria diferente.

você envia um parâmetro para o método setLigada, para indicar se ela vai ser ligada ou desligada, isso significa que a sua classe Microondas sabe detalhes da implementação da classe Lampada. Eu faria assim:[code]public class Lampada{

private boolean ligada;

private static final String MSG_ACESA = "Lampada Acesa";  

private static final String MSG_APAGADA = "Lampada Apagada";

public boolean isLigada(){
	return ligada;
}

public void ligar(){
	ligada = true;
	mostrar();
}

public void desligar(){
	ligada = false;
	mostrar();
}

private void mostrar() {  
    System.out.println(this.ligada ? MSG_ACESA : MSG_APAGADA);  
}  

}[/code]Dessa maneira você não sabe os detalhes da implementação da Lampada, se quer ligá-la, invoque o método ligar(), e a Lâmpada é a responsável por cuidar do resto. Veja também que removi o método setLigada, pois ele quebraria o encapsulamento.

Fez sentido?

[quote=digaoneves]vai funcionar, mas eu faria diferente.

você envia um parâmetro para o método setLigada, para indicar se ela vai ser ligada ou desligada, isso significa que a sua classe Microondas sabe detalhes da implementação da classe Lampada. Eu faria assim:[code]public class Lampada{

private boolean ligada;

private static final String MSG_ACESA = "Lampada Acesa";  

private static final String MSG_APAGADA = "Lampada Apagada";

public boolean isLigada(){
	return ligada;
}

public void ligar(){
	ligada = true;
	mostrar();
}

public void desligar(){
	ligada = false;
	mostrar();
}

private void mostrar() {  
    System.out.println(this.ligada ? MSG_ACESA : MSG_APAGADA);  
}  

}[/code]Dessa maneira você não sabe os detalhes da implementação da Lampada, se quer ligá-la, invoque o método ligar(), e a Lâmpada é a responsável por cuidar do resto. Veja também que removi o método setLigada, pois ele quebraria o encapsulamento.

Fez sentido?[/quote]

100%

Eu nao pensei nesse sentido, ainda to novo nessa coisa de OO, mas tem sentido pq a ideia do encapsulamento é quebrada…

Sabe o que pensei no momento que eu alterei?

Que eram 2 metodos, mas em primeiro momento eu fiz deste modo que vc citou…

Pra reduzir as linhas de codigo…

Quando vc fala em composição, tem haver com o padrao de projeto?

Tive uma outra ideia, criar uma classe interface de metodos que o microondas faz…e quebrar os metodos em classes…