Troca de Mensagem entre Objetos

28 respostas
A

Boa tarde pessoal,

alguem sabe indicar algum material, tópico, site ou mesmo queira deixar seu comentário sobre como ocorre a troca de mensagem entre os objetos?
Pode ser em qualquer linguagem orientada a objetos.

t+

28 Respostas

O

Acredito que qualquer apostila na web que fala de orientação a objetos poderá te ajudar nisso.
Dá uma olhada nesse artigo do Guj: http://www.guj.com.br/articles/149

A

Pior que não!!!

Já pesquisei um monte e nada de tratar desse assunto. O máximo que encontrei foram comentários que dizem: “objetos se comunicam através de mensagens”.
Inclusive nesta que me passou num tem mais que duas ocorrências da palavra “mensagem”.

Ou seja, não é tão fácil quanto parece.

L

Oi,

Como assim? Algo relacionado a socket? Ou estou boiando?

Tchauzin!

X

A troca de mensagens ocorre através da chamada aos métodos de um objeto por outro objeto.
Exemplo

public class Relatorio {
	...
	public void imprimirTitulo(String titulo){
		formulario.Imprimir(posicaoX, posicaoY, Alinhamento.CENTRAL, titulo);
	}
	...
}

No exemplo acima o Objeto Relatorio passa uma mensagem para o objeto formulario utilizando a função imprimir deste.
Sempre que você chama um método de um objeto você está passando uma mensagem. Alguns métodos não tem retorno então é como você fala-se “objeto faz isso”, outros métodos vão te retornar algo então seria como você fala-se “objeto me responde o que te pedi”

A

Estude um pouco da arquitetura Swing talvez fique mais claro. O que acontece é que este conceito é intrínseco na orientação a objetos.
Segue um trecho do Wikipedia:

Link para referência:

A

Boa X@ndy, lina e otavio…

Deixa ser mais claro…

O que preciso é a parte teórica… o que ocorre por trás, nos bastidores? Como um objeto se comunica com outro objeto? Como ocorre essa troca de mensagem? O que é realmente esta mensagem?

E outra, não precisa estar ligado a Java. Pode ser qualquer outra linguagem OO ou pode ser genérico (para qualquer linguagem OO).

X

O Shoes da uma explica do que o ocorre nos a bastidores com um metamodelo aqui

Como eu te disse a comunicação (em java) se da pela troca de mensagens ou seja quando um objeto chama um método de outro objeto

A mensagem é justamente o que tu quer objeto faça! No exemplo o objeto relatório quer que o objeto formulário imprima uma string em determinada posição. Não interessa como o objeto formulário vai fazer isso, ele simplesmente quer seja feito então ele passa para este os dados que ele necessita que seja impresso, a posição que deve ser impresso esses dados e o alinhamento. Podemos considerar que método imprimir é o “papel da mensagem” e os parâmetros (x, y, Alinhamento, texto) são as palavras escritas nesse papel. O objeto formulário ao receber “o papel com a mensagem vai ler o que está escrito e fazer algo”, ou seja a implementação do método imprimir toma alguma ação com base nos parâmetros recebidos.
A troca de mensagens é um conceito abstrato.

R

AGAraujo:
Boa X@ndy, lina e otavio…

Deixa ser mais claro…

O que preciso é a parte teórica… o que ocorre por trás, nos bastidores? Como um objeto se comunica com outro objeto? Como ocorre essa troca de mensagem? O que é realmente esta mensagem?

E outra, não precisa estar ligado a Java. Pode ser qualquer outra linguagem OO ou pode ser genérico (para qualquer linguagem OO).


Ao meu ver, não importa como os objetos se comunicam, pelo menos em Java, isso é da própria linguagem, contanto que eles se comuniquem pra mim está ótimo. Não sei em relação as outras linguagens de programação orientada a objetos, não sei como isso funciona por trás, pelo bastidores.

Como todos comentaram acima, as mensagens entre os objetos são chamadas de métodos entre os objetos, na Java a explicação do x@ndy é a mais completa, mas é exata. :smiley:

[]´s

A

Que isto Rafael!!!
Seu comentário é para classificar e eliminar o que uma pessoa deve ou não aprender?

Se estou aqui a questionar isto é porque existe importânica, “ao meu ver”.

X

Com base em meu último post, gostaria de saber se você entendeu o conceito de mensagem antes de mais nada?

A

O Shoes da uma explica do que o ocorre nos a bastidores com um metamodelo aqui

Como eu te disse a comunicação (em java) se da pela troca de mensagens ou seja quando um objeto chama um método de outro objeto

A mensagem é justamente o que tu quer objeto faça! No exemplo o objeto relatório quer que o objeto formulário imprima uma string em determinada posição. Não interessa como o objeto formulário vai fazer isso, ele simplesmente quer seja feito então ele passa para este os dados que ele necessita que seja impresso, a posição que deve ser impresso esses dados e o alinhamento. Podemos considerar que método imprimir é o “papel da mensagem” e os parâmetros (x, y, Alinhamento, texto) são as palavras escritas nesse papel. O objeto formulário ao receber “o papel com a mensagem vai ler o que está escrito e fazer algo”, ou seja a implementação do método imprimir toma alguma ação com base nos parâmetros recebidos.
A troca de mensagens é um conceito abstrato.

Show de bola!!!
Sabes onde posso encontrar a referência bibliografica que explica isto?

A

Não é que eu não entenda dos conceitos de mensagem. É que não consegui material bibliográfico que trate deste assunto, pois o meu trabalho precisa de referência bibliográfica. Entendeu?

X

Bah, não tem uma referência bibliográfica dizendo isso tão diretamente como te expliquei, como disse é um conceito abstrato. Todos os livros que li sobre OO falam um pouco sobre isso mas o conceito de mensagem é íntrinseco nesses livros, também fiquei em dúvida até entender bem o que eles queriam dizer com “mensagem”.
Você pode ler os livros dos irmãos Deitel sobre java e c++, mas a explicação mais sucinta ainda tá na Wikipédia

X

Como disse esses livros falam sobre isso o AGAraujo falou que também leu sobre isso, e tem a Wikipédia ai também.
Qualquer livro sobre OO objetos fala sobre isso tente pegar um mais direto, que não envolva programação, como o Aplicando UML e Padrões do Larman.

C

AGAraujo

O Java não se comporta 100% orientado à objetos como no SmallTalk.
Java também é uma LINGUAGEM IMPERATIVA onde os comandos são parte fundamental da linguagem.

No java um método de um objeto vai chamar ( isso mesmo ) um método de outro objeto através de um ponteiro e esse novo método será empilhado no stack. Nada muito diferente do que acontece em C ou C++.

No SmallTalk que é 100% orientado a objetos não existe essa história de chamar/invocar nada… pois TUDO é objeto, portanto os objetos ficam trocando mensagens entre eles.

Em smallTalk o primeiro ‘1’ é um objeto que está recebendo uma mensagem ‘+’ e como parâmetro está recebendo um outro objeto ‘1’.

Eu vou procurar algum material de referência pra você… mas saiba que o java não tem essa mágia de “Troca de Mensagem”.

A

Bom, obrigado X@ndy…

o meu maior problema é encontrar algo fundamentado…
os conceitos encontrei em livros diversos sobre OO, mas são muito vagos…
Encontrei até no slideshare que trata bem melhor disso, mas ainda sim não é considerado como fundamentação para o estudo…

Ou seja, na internet encontrei explicações melhores que nos livros que pesquisei, mas não consigo fundamentar pois blogs e wikis não são aceitos como referencia válida de conteúdo (aqui).

Se lembrar de alguma referência que trate melhor do assunto agradeço.

A

Cofor:
AGAraujo

O Java não se comporta 100% orientado à objetos como no SmallTalk.
Java também é uma LINGUAGEM IMPERATIVA onde os comandos são parte fundamental da linguagem.

No java um método de um objeto vai chamar ( isso mesmo ) um método de outro objeto através de um ponteiro e esse novo método será empilhado no stack. Nada muito diferente do que acontece em C ou C++.

No SmallTalk que é 100% orientado a objetos não existe essa história de chamar/invocar nada… pois TUDO é objeto, portanto os objetos ficam trocando mensagens entre eles.

Em smallTalk o primeiro ‘1’ é um objeto que está recebendo uma mensagem ‘+’ e como parâmetro está recebendo um outro objeto ‘1’.

Eu vou procurar algum material de referência pra você… mas saiba que o java não tem essa mágia de “Troca de Mensagem”.

Show de bola cara!!!
É disso que estou falando. Veja ai qual o material possui estas explicações.

Aguardo e, desde já, agradeço!!!

C

http://www.inf.ufsc.br/poo/smalltalk/ibm/

http://www.mactech.com/articles/mactech/Vol.10/10.10/LearningSmalltalk/

Eu não sei os detalhes por debaixo da teoria, desculpe, mas o que acontece em linguagens puras OO os métodos estão definidos na classe e o que chega pra elas é a mensagem acompanhada ou não de algum parâmetro para que o método seja executado.

Eu tinha algumas referências no moodle do mackenzie… mas já faz tempo pra caceta, vou ver se lembro se tinha algum livro.

A

Você acha que em C# é possível encontrar esta teoria sobre “Troca de Mensagem”?

E

Ambas as linguagens tem “troca de mensagens”, ou seja, um objeto chamar um método de outro objeto. Isso é basicamente o mínimo que qualquer plataforma OO precisa oferecer.

Quando se fala o objeto A manda uma mensagem para o objeto B é o mesmo que dizer que durante a execução de algum método do objeto A você chama um método do objeto B.

Um pseudo script para ilustrar:

class A { public m1() { var b = new B(); b.m2(); } }
Quando o método m1 for invocado, o objeto do tipo A irá enviar uma mensagem a um objeto do tipo B. Tão simples quanto isso.

A

esmiralha:
Ambas as linguagens tem “troca de mensagens”, ou seja, um objeto chamar um método de outro objeto. Isso é basicamente o mínimo que qualquer plataforma OO precisa oferecer.

Quando se fala o objeto A manda uma mensagem para o objeto B é o mesmo que dizer que durante a execução de algum método do objeto A você chama um método do objeto B.

Um pseudo script para ilustrar:

class A {

public m1() {

var b = new B();

b.m2();

}

}

Quando o método m1 for invocado, o objeto do tipo A irá enviar uma mensagem a um objeto do tipo B. Tão simples quanto isso.

É eu sei!! No próprio Sebesta trata disso. O problema é que nenhum explica como isto ocorre nos bastidores…
Veja bem… eu até já tenho material que trata bem sobre o assunto, mas nenhum é de livros… minha preocupação é encontrar bibliografias que expliquem isto (em detalhes).
Vocês tem algo?

Valeu!

C

Mas o java faz isso só em teoria, só quando você está no seu arquivo .java é que voce ainda tem essa ilusão…
A JVM traduz o programa como um programa C/C++ onde um método ( digamos main(String args[]) do TESTE.java ) é empilhado no stack e dentro dele tem um pointer que está apontando pro Heap ( tentando invocar System.out.println ) .
Quando ele chega na localização do ponteiro ele descobre que aquilo é uma instrução que precisa ser empilhada na pilha também. Assim ele vai empilhar tudo que precisa e tudo está bem, porque sempre foi assim e nós achamos a coisa mais normal do mundo.

No smalltalk a implementação não garante que seja assim… cada objetinho é como se fosse uma mini máquina pronta pra executar o que lhe foi pedido. E não é garantida a execução do pedido!
Quando voce tem diversos métodos empilhados você tem a garantia de que quando um terminar o outro vai continuar, saca?

A própria wiki tem uma frase muito boa que me inspirei :

http://en.wikipedia.org/wiki/Object-oriented_programming

AGAraujo , eu não tenho mais acesso ao material ( ficava online e já passei de semestre a um bom tempo ) … mas te aconselho a procurar tanto pela Teoria da OO quanto pela implementação do SmallTalk. Isso vai fazer você enxergar o contraste que existe com o que a JVM faz ( que é tão mais simples e amplamente usado que a galera nem se dá conta :lol: ).

A

AGAraujo , eu não tenho mais acesso ao material ( ficava online e já passei de semestre a um bom tempo ) … mas te aconselho a procurar tanto pela Teoria da OO quanto pela implementação do SmallTalk. Isso vai fazer você enxergar o contraste que existe com o que a JVM faz ( que é tão mais simples e amplamente usado que a galera nem se dá conta :lol: ).

É o que estou tentando. Só que por enquanto só li livros de paradigmas ou POO em Java e C++, vou ver se encontro algo mais especifico.

Vlw

C

O Sebesta que você citou é bom… mas tem esse também que pode ajudar

E

Cofor,

Do ponto de vista de linguagem é essencialmente igual.

As plataformas implementam cada uma a seu modo.

Porém, ambas as plataformas implementam um modelo síncrono de passagem de mensagens. E em ambas todos os argumentos passados na mensagem são avaliados antes que o receptor receba a mensagem (exceto blocos no smalltalk). A diferença mais clara é que Smalltalk oferece um método default que será chamada caso uma mensagem desconhecida seja enviada. Você pode sobrescrever esse método.

R

AGAraujo:

Que isto Rafael!!!
Seu comentário é para classificar e eliminar o que uma pessoa deve ou não aprender?

Se estou aqui a questionar isto é porque existe importânica, “ao meu ver”.


Não pow… não foi isso que eu quis dizer…

Desculpe se me interpretei mal, mas como eu disse e outros também disseram os objetos se comunicam através de mensagens, mas não sei como isso se comporta internamente…

E também interpretei mal a sua dúvida, pois pelo que entendi, você queria saber como o Java trata isso, não imaginei que quisesse o fundamento disso…

Bom, obrigado pelo conteúdo que todos tem postado, e desculpem pelo mal entendido xD

C

esmiralha:
Cofor,

Do ponto de vista de linguagem é essencialmente igual.

As plataformas implementam cada uma a seu modo.

Porém, ambas as plataformas implementam um modelo síncrono de passagem de mensagens. E em ambas todos os argumentos passados na mensagem são avaliados antes que o receptor receba a mensagem (exceto blocos no smalltalk). A diferença mais clara é que Smalltalk oferece um método default que será chamada caso uma mensagem desconhecida seja enviada. Você pode sobrescrever esse método.

Bacana não sabia que no final das contas todas garantem que seja síncrono. Lembro do professor ter dito algo sobre não ser garantida a resposta da mensagem passada. Posso ter entendido mal.

E

Não garante resposta porque você pode passar qualquer mensagem para qualquer objeto. O receptor pode não entender a mensagem e delegar para o método “does not understand” (que você pode sobrescrever).

Criado 10 de janeiro de 2011
Ultima resposta 11 de jan. de 2011
Respostas 28
Participantes 8