Troca de Mensagem entre Objetos

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.

[quote=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.
[/quote]

É 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!

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: ).

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: ).

[/quote]

É 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

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

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.

[quote=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”.[/quote]
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

[quote=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.[/quote]

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.

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).