Java é uma OO baseada em protótipo?

7 respostas
B

Galera, vcs saberiam me dizer se Java é uma linguagem orientada a objeto baseada em protótipo?

Segue uma fonte onde tem informações sobre linguagem OO baseada em protótipo:
http://www.milfont.org/tech/2008/01/05/heranca-no-javascript/

7 Respostas

feharaujo

Não sei se voce sabe, mas Java e javascrip são coisas diferentes…

B

Sim eu sei. Por isso mesmo a pergunta.

Obrigada.

sergiotaborda

Babaloo:
Galera, vcs saberiam me dizer se Java é uma linguagem orientada a objeto baseada em protótipo?

Segue uma fonte onde tem informações sobre linguagem OO baseada em protótipo:
http://www.milfont.org/tech/2008/01/05/heranca-no-javascript/

Não. Java é baseado em classes ( que são metadados que são usados para criar os objetos).
Javascript é baseado em prototipos ( que são dados que são usados para “clonar” novos objetos)

Embora o nome a sintaxe semelhante, java não tem nada que ver com javascript.

B

Gente, eu não estou falando que as duas são iguais. É que em Java pode-se herdar as características de uma classe e em JavaScript pode-se herdar as características de um objeto, portanto eu pensei: se em Java eu crio uma classe e instancio um objeto, será que também posso instanciar um objeto de um objeto e assim os objetos filhos poderiam herdar as características do pai e ainda poderiam também alterar os métodos do pai, sem alterar a classe em que foi instanciado o pai?

Entenderam?

E

Babaloo:
Gente, eu não estou falando que as duas são iguais. É que em Java pode-se herdar as características de uma classe e em JavaScript pode-se herdar as características de um objeto, portanto eu pensei: se em Java eu crio uma classe e instancio um objeto, será que também posso instanciar um objeto de um objeto e assim os objetos filhos poderiam herdar as características do pai e ainda poderiam também alterar os métodos do pai, sem alterar a classe em que foi instanciado o pai?

Entenderam?

A resposta é não; e pior, isso é “chumbado” na JVM (ou seja, para implementar um comportamento semelhante ao do JavaScript em uma linguagem que rode sob a JVM, é necessário fazer um monte de mágica em vez de usar as capacidades padrão da máquina virtual Java. ) Linguagens que têm esse recurso e que devam ser compiladas para bytecodes normalmente têm implementações bem complexas desse recurso. A partir do Java 7 existe um novo opcode (invokedynamic) na JVM mas não sei se ele é útil para implementar esse recurso de forma menos “deselegante”.

sergiotaborda

Babaloo:
Gente, eu não estou falando que as duas são iguais. É que em Java pode-se herdar as características de uma classe e em JavaScript pode-se herdar as características de um objeto, portanto eu pensei: se em Java eu crio uma classe e instancio um objeto, será que também posso instanciar um objeto de um objeto e assim os objetos filhos poderiam herdar as características do pai e ainda poderiam também alterar os métodos do pai, sem alterar a classe em que foi instanciado o pai?

Entenderam?

O que vc quer saber é : è Possivel implementar o padrão Prototy com java ?

Sim. Mas em partes. ( vou discordar ligeiramente do entanglement :slight_smile:

Com java vc precisa criar uma classe e depois instanciar o objeto. Feito isso vc pode criar outros objetos “clonando” o objeto original. Só que vc não pode adicionar propriedades ou métodos nesse objeto. Portanto, vc pode herdar, mas não pode extender.
Se não pode estender , não é útil.

Agora, entenda que vc pode usar mais do que uma classe e objeto para simular o mesmo comportamento. Para isso vc precisa cria classes que representam metodos e atributos e classes e a estrutrua em si, para que depois vc possa implementar o padrão Prototype em cima disso. é prático ? não. É possível ? sim. ( é o que as linguagens que correm na jvm e são dinâmicas, fazem : groovy, jruby, etc… mas com uma ajudinha leve de byte-code re-write).

Contudo, a clonagem de objetos apenas para ter cópias da mesma estrutura é mais comum do que parece. Por isso que existe a interface Clonable e o método protegido clone() em Object. Mas não confundir Conable com Prototype. Prototype permite vc alterar a estrutrua ( adicinar métodos e propriedades) , Clonable simplesmente faz cópias de objetos.

B

Muito obrigada pelas repostas.

Foram muito esclarecedoras.

Entendi o/

Criado 6 de março de 2013
Ultima resposta 7 de mar. de 2013
Respostas 7
Participantes 4