Troca de Mensagens [RESOLVIDO]

5 respostas
airmigjr

Olá pessoal.
Estou com uma dúvida que é o seguinte: Possuo 3 classes (seguem abaixo), a classe Fonte, a classe TVComFonte e a classe TVComFonteFinal, sendo esta última a classe que contém o método main.

Na classe com o método main, quando eu executo o método ligar(), inicialmente ninguém instanciou a classe Fonte, que é pré-requisito para que a TV funcione, portanto a mensagem que meu sistema me dá é de que "Não há fonte de energia disponível".
Então, vemos no código tv.setFonte(fonte), que é um setter da classe TVComFonte que atribui o objeto recém criado "fonte" para a variável de instância Fonte, que é a nossa classe fonte inicial. Então, quando tenta-se ligar novamente a TV, com o método ligar(), a TV liga, pois satisfaz-se a condição de fonte existente, no teste de fonte==null no método ligar da classe TVComFonte.
O que não entendo, é, o que estamos enviando pelo setter na classe main tv.setFonte(fonte), para a o objeto fonte do tipo Fonte da classe TVComFonte? O objeto fonte foi recém criado, e não inserimos valor algum para a variável booleana "disponivel" do objeto fonte. Porquê o objeto fonte deixou de ser null ?
Espero que eu tenha me expressado bem.
Obrigado,

Airton

public class Fonte {

		private boolean disponivel;
		public void setDisponivel(boolean disp){
			if (disponivel && disp){
				System.out.println("A fonte de energia está disponível!");
		}else if(!disponivel && !disp){
			System.out.println("A fonte está indisponível!");
		}	else{
			disponivel = disp;
			String str = disponivel?"disponivel.":"indisponivel.";
			System.out.println("A fonte está "+str);
			}
		}

		public boolean estaDisponivel(){
			return disponivel;
		}
}

---

public class TVComFonte {
	Fonte fonte;
	public void setFonte(Fonte b){
		this.fonte = b;
	}
	public void ligar(){
		if(fonte == null){
			System.out.println("Não há fonte de energia disponível");
		}else if (fonte.estaDisponivel()){
			System.out.println("TV já ligada");
		}else{
			fonte.setDisponivel(true);
			System.out.println("TV Ligado");
		}
	}
	public void desligar(){
		if(fonte == null){
			System.out.println("Não há fonte disponível");
		}else if(!fonte.estaDisponivel()){
			System.out.println("A fonte já está desligada");
		}else{
			fonte.setDisponivel(false);
			System.out.println("A TV está desligada");
		}
	}
}
---
public class TVComFonteFinal {
	public static void main(String[] args) {
		Fonte fonte = new Fonte();
		TVComFonte tv = new TVComFonte();
		tv.ligar(); //retorna na tela que não há fonte de energia disponível
		tv.setFonte(fonte);//não retorna nada na tela
		tv.ligar();//retorna duas mensagens, que a fonte está disponível e que a TV está ligada
		tv.ligar();//retorna que a TV já está ligada
		tv.desligar();

	}

}

5 Respostas

X

Olá amigo, não tenho certeza mas quando uma variável boolean fica sem definição ela por padrão fica como false.

Logo podemos considerar que:

Assim que vc chama o método ligar pela segunda vez, fonte.estaDisponivel() retorna false, assim ele cai no else, assim alterando a variável Disponível do objeto fonte para true. Na terceira chamada do método ligar ele irá falar “Tv já ligada”, afinal o boolean do objeto foi trocado para true.

Se eu estiver errado, me falem.

airmigjr

Ainda não entendo “tv.setFonte(fonte)”, pois se o que está me dizendo for verdade, para que esta linha?

Obrigado,

Airton

X

A linha iria servir para iniciar a fonte, visto que o objeto fonte da classe TvComFonte no começo é null, e quando vc passa por parametro da classe TvComFonteFinal o objeto fonte ( Fonte fonte = new Fonte(); ) o objeto fonte da classe TvcomFonte deixa de ser null…

airmigjr

Entendi! Muito Obrigado pela explicação!

1 Abraço,

X

Se possível altere o Título para [RESOLVIDO]

Abraços

Criado 12 de agosto de 2011
Ultima resposta 13 de ago. de 2011
Respostas 5
Participantes 2