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