Pergunta

Por que a classe OO tão popular em vez de protótipo baseado OO baseada? Será que eles ensinam o último nas escolas? Embora Javascript é baseado protótipo, a maioria das pessoas usá-lo principalmente funcionalmente, ou através de estruturas que tentam emular um sistema baseado classe.

Eu sei que a Sun teve alguma pesquisa sobre Auto - há qualquer outra fonte de conhecimento sobre protótipo oo base? de preferência algo que é acessível para a auto aprendeu.

Eu encontrei um livro que contém artigos publicados: Prototype-base Programação: Conceitos, Linguagens e aplicações

Alguém já leu?

-

Então eu dei a recompensa para a resposta que mais me deu. Ainda assim, eu realmente não estou satisfeito. Eu teria gostado de ouvir respostas muito mais techical. Talvez eu não tenha me explicar bem.

Foi útil?

Solução

A vantagem da herança prototípica é que potencialmente permite fantasia metaprogramming de uma forma simples, porque a cadeia de protótipos é facilmente manipulado. Esta é uma vantagem em vez acadêmica porque metaprogramming é a resposta errada 99% do tempo. Como exemplo, você poderia ter uma camada de manipulação de dados estilo Javascript Key-Value Observer com um DSL especial que forma transparente alternado entre um suporte SQLite local quando offline e uma loja de servidor baseado descansar quando online via troca de protótipo. Eu não tenho certeza que é a melhor maneira de fazer isso, mas é o melhor que posso chegar a essa final. Não é o tipo de coisa que você geralmente quer fazer no código do projeto uma vez que este tipo de engano é o inferno para depurar uma vez que você começar a obter-lo indo em múltiplas camadas, mas não é ruim quando você mantê-lo em uma biblioteca.

Outra vantagem menos útil é que ele permite que você crie seu próprio sistema de classes. Eu digo menos útil porque mais ou menos todas as bibliotecas JavaScript têm a sua própria abordagem ligeiramente incompatível a como 'aulas' estão juntos.

Há um monte de pessoas que responderam que estão misturando o modelo de herança com as linguagens implementadas nesse modelo. O fato de que javascript é dinâmico e fracamente tipado e, portanto, difícil de ferramenta não tem nada a ver com isso sendo uma linguagem de protótipo.

Outras dicas

Se você está procurando alguém para apontar as vantagens / desvantagens de cada um como uma explicação para a sua popularidade, acho que você está caindo para uma falácia que é por algum motivo muito comum na tecnologia - que a popularidade tem algo a fazer com alguma medida absoluta de qualidade.

A verdade é muito mais branda - classe OO com base é popular porque Java usa OO clássico, e Sun gastou milhões de dólares e muito tempo construindo a popularidade de Java - garantir que as pessoas sabem que é usado com sucesso em empresas, ensinou amplamente nas universidades, e em testes de AP do ensino médio.

prototypal / OO clássica são apenas maneiras diferentes de organizar suas idéias. Você pode implementar qualquer um em idiomas que não suportam nativamente ( Python e Java vêm à mente, e JavaScript na outro lado).

Em OO clássica, você define uma hierarquia abstrata de classes para seus objetos, e então realmente trabalhar com instâncias dessas classes. Na herança prototípica, você cria uma hierarquia de instâncias de objetos. Embora eu imagino que poderia ser um herege pouco em ambos os campos, não vejo uma razão que você não pode misturar os dois ...

Eu não sei as razões exatas para isso, mas aqui estão as minhas razões

Eu acho que isso argumentam é a mesma dinâmica vs estática, uma classe é a definição estática do objeto, que pode ser usado facilmente saber o que esperar de um objeto, ele também ajuda ferramental os idiomas para ter suporte intellisense adequada e documentação, pois você pode facilmente saber quais são os diferentes membros e métodos no objeto, outra coisa é o diferente paradigma de ter a capacidade de declarar membros privados na classe que não mostra no objeto, isto não pode ser feito no paradigma protótipo.

O paradigma protótipo é bom, no entanto, ele não tem a capacidade para fornecer informações sobre os métodos e membros do objeto, o que torna as ferramentas mais difícil, e também faz mais sentido para a programação de tipagem dinâmica.

Esta questão tinha me intrigado, então fui para trás e ler alguns dos artigos originais sobre o conceito. Parece ter começado em meados dos anos 1980 no mundo Smalltalk, mas acabou se tornando um dos principais fundadores da Auto . Muito mais tarde Javascript também adotaram.

O argumento estendeu nos jornais é que é mais fácil de aprender. Há um benefício realmente nenhuma técnica proposta diferente de aprender. Os papéis todos explicar como ele é tão expressiva como uma linguagem baseada em classe, mas muito mais fácil de aprender. As pessoas naturalmente pensar sobre as coisas de uma maneira concreta, em vez de no resumo. Pensamos no elefante vimos no zoológico, e não um "elefante" genérico. Quando vemos outros elefantes, nós classificá-los como diferenças em relação ao primeiro. Uma linguagem baseada em protótipo facilita esse pensamento. Pense nisso como a programação pelo diferencial.

Isso é uma razão suficiente para usá-lo em uma linguagem? Possivelmente. Nos 25 anos desde que a idéia começou a percolação, eu diria que os conceitos abstratos como OO baseada em classe não tem sido muito difícil para a maioria das pessoas a aprender. Por outro lado, talvez, há uma necessidade de uma linguagem de programação de colarinho azul (como Javascript), que é mais fácil e isso pode ser uma maneira de conseguir isso.

Se estiver interessado, você pode começar com este artigo sobre si mesmo.

Eu realmente não quero escrever um outro artigo sobre a herança prototípica novamente, então eu vou ligá-lo aos meus artigos anteriores. Lembre-se, eles são realmente longo, mas vale a pena ler:

  1. Benefícios da herança prototípica mais clássica?
  2. Por protótipo de herança

Eu acho que a diferença está na dinâmica de poder da linguagem (protótipo) dá a você. Javascript, mesmo como LISP, dá poder quase ilimitado para um programador. Este poder é limitado apenas pela responsabilidade do programador e o nível de sua auto-confiança. Assim, a discussão é tão antiga como ele é - mesmo que typeless tipagem estática vs.. Se você considerar o seu poder de programação e auto-disciplina são forte o suficiente - ir para o estilo protótipo

.

Parafraseando um famoso ditado:

Talent faz o que pode (leia-se: class-based), gênio faz o que quer (leia-se: com base protótipo).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top