[Resolvido] O que é isso?

Alguém pode me explicar essa parte: Oberver observer = (Observer).observers.get(i);


	public void notifyObservers() {
		
		for(int i = 0; observers.size(); i++) {
			Oberver	 observer = (Observer).observers.get(i); // O que acontece nessa linha?
			observer.update(temperature, humidity, pressure);
		}
	}

Eu nunca vi um método de configuração chamar outro método, o que contece nesse caso?

	public void setMeasurements(float temperature, float humidity, float pressure) {
		this.temperature = temperature;
		this.humidity = humidity;
		this.pressure = pressure;
		menssurementsChanged(); //O que acontece aqui?
	}

Se você colocar o codigo por completo fica um pouco melhor de explicar, mas como você queria saber somente sobre este trecho, aqui segue:

Oberver  observer = (Observer).observer.get(i);

Ele simplesmente cria um novo objeto na posicao ‘i’, e depois chama o metodo update da propria classe Observer e atualiza com os dados informados.

observer.update(temperature, humidity, pressure); 

Naquele outro trecho que voce questionou, o metodo ‘menssurementsChanged()’ deve existir algum tipo de mensagem
ou normalmente ele deve gerar um log.

Basicamente é isso, só relembrando, tente colar o codigo por completo na proxima vez, para podermos explicar melhor…

essa maneira de usar polimorfismo eu ainda não peguei o jeito. tem como me indicar algum material que explique esse modo de usar polorfismo?

Aprenda programação orientada a objetos em 21 dias.
Livro muito bom.

Eu imaginei que estivesse fazendo um tipo de “casting” por causa do uso das chaves ( ), mas e o ponto logo em seguida?

Oberver  observer = (Observer).observer.get(i);  

Esta “classe” Oberver ou Observer é criada pelo usuário ou é do próprio java?

ela já foi criada por mim e é Observer mesmo.

Casting? poderia explicar melhor?

[quote=guj1]ela já foi criada por mim e é Observer mesmo.

Casting? poderia explicar melhor?[/quote]

http://www.universidadejava.com.br/docs/castingdetiposprimitivosnojava

[quote=guj1]ela já foi criada por mim e é Observer mesmo.

Casting? poderia explicar melhor?[/quote]

Bom eu sou iniciante, mas, Cast, Casting, Downcast, Upcast, são tudo parecido, eles “moldam” um valor, ou objeto, para assumir um outro tipo. Ex:

Double nDouble = valorDouble;
int nInt = nDouble;

Não é possível porque tipo Double é maior que int, porém, posso “forçar”, com perdas ou não (depende do valor “exato” do nDouble), o nDouble a caber no int, ex:

Double nDouble = valorDouble;
int nInt = (int) nDouble;

O mesmo pode ser feito com objetos. Algo bem ligado a polimorfismo… Imagine, vc usa uma classe pai como tipo de uma variável de referência e atribui a ela o endereço de uma classe filha desta classe pai:

ClassePai pai = new ClasseFilha();

Dessa forma a variável de referência, pai, só pode usar os métodos da ClassePai, mesmo “tendo” como objeto real uma ClasseFilha.
Em algum momento vc poderia necessitar dos métodos específicos da ClasseFilha então vc poderia fazer:

ClassePai pai = new ClasseFilha();
     ...
ClasseFilha filha = (ClasseFilha) pai;

Ou seja, esta variável, filha, agora possui uma referência de pai “convertida” (observe as aspas) em filha…

Não sei se usei os termos corretos, mas acho que é por ai a questão de Castings… Moderadores, corrijam-me.

Hunnn Entendi, coerção de tipo, castings. Lembrei o que era mas não sabia que poderia ser usada em objetos.
Mas no exemplo que eu dei, existe um ponto, para acessar o método get do objeto observers. Nesse caso ele faz o casting e chama o método simultaneamente?

Oberver  observer = (Observer).observers.get(i)

vou te dar um exemplo simples, quando vc utiliza o cast para ‘garantir’ se eu posso falar a grosso modo que aquela instancia pertence a classe Observer, o ponto logo em seguida chama
o metodo dessa classe, ou seja, é como se vc tivesse criado um objeto normal, e chamando o metodo normalmente, mas nesse caso vc utilizou de um polimorfismo, usando duas classes e definindo (cast) que a instancia é de uma classe filha. Me corrijam se eu errei.

De modo simples respondendo sua pergunta: SIM chama simultaneamente porque o cast está definindo aquele obj para a classe.
Um abraço!!!

Ola,

Antes de mais nada quero esclarecer alguns pontos, na minha propensa “afirmação”:

Existe um porém, realmente quando se usa uma referência tipo ClassePai mas o objeto a que ela se refere é alguma classe filha, vc poderá usar apenas aqueles métodos “registrados” na classe pai, o porém é que se a classe filha sobrescreveu (sobrescreveu e não sobrecarregou) um método da classe pai, no exemplo que citei, primeiro a jvm irá procurar o método na classe real da referência ( classe filha), ou seja, a jvm irá executar o método da classe filha, e ai é que se encontra o polimorfismo, usar uma referência genérica (ClassePai) para acessar tipos mais “específicos”.

Outro porém, quando cito ClassePai, na verdade também, e é melhor, posso me referir a, Classe mãe, Classe base ou classe raiz(dependendo da situação), Progenitora, Super classe, e quando escrevo Classe filha, também pode ser subclasse, classe folha(dependendo da situação)…

Quanto a sua dúvida, eu acredito que, pelos seus comentários, é necessário você conhecer mais a respeito de Orientação a Objetos. No livro: Padrões de Projetos de Erich Gama e outros, eles definem logo no início que se você precisar de dicionário quando se fala de herança pela diferença, herança para substituição, etc, o livro não será tão útil.

Meu conselho, procure criar você mesmo um teste, sem copiar, que possa verificar a sua dúvida:

Se conseguir, você esclarece a sua dúvida e reafirma os conceitos que vc aprendeu. Se não conseguir, é melhor rever alguns assuntos, principalmente OO, e é claro, pode contar comigo.

Veja a apostila online da Caelum sobre Orientação a Objetos.

Um conceito novo pra mim.

herança pela diferença e pela substituição, eu comecei a estudar pelas apostilas de Caelum. Mas eu gostaria que vocês me indicasse uma referência que fala especificamente desse assunto que eu nunca ouvi falar isso. Alguma dica?

Obrigado meus caros.
Abraço!
Realmente preciso reforçar meus conhecimentos de OO. E já estou a todo vapor.

Ola,

Livro sobre OO eu indico este:

Aprenda Programação Orientada a Objeto em 21 dias

É claro que 21 dias depende do seu dia, que no meu caso, cada dia deles vale 30 dos meus


Você podriam ser um pouco mais específico quando falam de herança pela diferença e pela substituição?
E indicar alguma pequena explicação.

AH! e já comprei os livros necessários de OO em Java. Grato pelas indicações.

Crie um outro post com esses assuntos…