Pregunta

¿Por qué es tan popular clase OO OO basado en lugar de prototipo basado? Qué enseñan estos últimos en las escuelas? Aunque Javascript se basa prototipo, la mayoría de las personas lo utilizan en su mayoría funcionalmente, o por medio de marcos que intentan emular un sistema basado en la clase.

Yo sé que Sun ha tenido algunas investigaciones sobre Auto - ¿hay alguna otra fuente de conocimientos sobre oo basado prototipo? de preferencia algo que es accesible para el auto aprende.

He encontrado un libro que contiene los artículos publicados: programación basada en prototipos: Conceptos, Idiomas y aplicaciones

¿Alguien ha leído?

-

Así que me dio la recompensa por la respuesta que me dio más. Aún así, no estoy realmente satisfecho. Me hubiera gustado escuchar mucho más respuestas techical. Tal vez no me explico bien a mí mismo.

¿Fue útil?

Solución

La ventaja de la herencia de prototipos es que potencialmente permite metaprogramming de fantasía de una manera sencilla, puesto que la cadena de prototipo se manipula fácilmente. Esta es una ventaja y no académica, porque metaprogramming es la respuesta equivocada 99% del tiempo. A modo de ejemplo, usted podría tener una capa de manipulación de datos de estilo Javascript valor-clave de observador en una conexión DSL transparente especial que cambia entre un soporte de SQLite local cuando fuera de línea y una tienda de servidor basado en REST cuando esté en línea a través de intercambio de prototipo. No estoy seguro de que es la mejor manera de hacer esto, pero es lo mejor que puedo llegar a esta tarde. No es el tipo de cosas que generalmente quiere hacer en el código del proyecto ya que este tipo de direccionamiento indirecto es el infierno para depurar una vez que comienza a recibir en marcha en varias capas, pero no es malo cuando usted lo guarda en una biblioteca.

Otra de las ventajas de menos ayuda es que le permite diseñar su propio sistema de clases. Yo digo menos útiles debido a que más o menos todos javascript bibliotecas tienen su propio enfoque ligeramente incompatible con la forma en 'clases' se ponen juntos.

Hay una gran cantidad de personas que respondieron que están mezclando el modelo de herencia con los lenguajes implementados en ese modelo. El hecho de que Javascript es dinámica y flexible de tipos y por lo tanto difícil de herramienta tiene nada que ver con él que es un lenguaje de prototipos.

Otros consejos

Si usted está buscando a alguien para señalar las ventajas / desventajas de cada uno como una explicación de su popularidad, creo que estás cayendo de una falacia que es por alguna razón muy común en la tecnología - que la popularidad tiene algo que ver con alguna medida absoluta de calidad.

La verdad es mucho más sosa - OO basado clase es popular porque Java utiliza OO clásico, y Sun gastó millones de dólares y un muy largo tiempo la construcción de la popularidad de Java - asegurarse de que la gente sabe que es utilizado con éxito en las empresas, impartido ampliamente en las universidades y en los exámenes AP de secundaria.

prototípico / OO clásica son sólo diferentes formas de organizar sus ideas. Se puede aplicar cualquiera de ellos en idiomas que no son compatibles de forma nativa ( Python y Java vienen a la mente, y JavaScript en el otro lado).

En OO clásica, se define una jerarquía abstracta de clases para los objetos, y luego en realidad trabaja con instancias de esas clases. En herencia de prototipos, crear una jerarquía de instancias de objetos. Aunque imagino que podría ser un poco herético en ambos campos, no veo una razón por la que no se podía mezclar los dos ...

No sé las razones exactas para esto, pero aquí están mis razones

Creo que esto argumentar es el mismo que el dinámico vs estática, una clase es la definición estática del objeto, que se puede utilizar fácilmente para saber qué esperar de un objeto, sino que también ayuda a los útiles de los lenguajes de tener el soporte adecuado intelisense y la documentación porque se puede saber fácilmente cuáles son los diferentes miembros y métodos en el objeto, otra cosa es el paradigma diferente de tener la capacidad para declarar miembros privados de la clase que no aparece en el objeto, esto no se puede hacer en el paradigma prototipo.

El paradigma prototipo es agradable, sin embargo, carece de la capacidad para proporcionar información sobre los métodos y miembros en el objeto, lo que hace más difícil el utillaje, y también tiene más sentido para la programación de tipado dinámico.

Esta pregunta me tenía intrigado así que volví y leer algunos de los artículos originales sobre el concepto. Parece haber comenzado a mediados de la década de 1980 en el mundo Smalltalk pero con el tiempo se convirtió en uno de los directores fundadores de Auto . Mucho más tarde Javascript también adoptó la misma.

El argumento que se expone en los documentos es que es más fácil de aprender. En realidad no hay beneficio técnico propuso que no sea el aprendizaje. Los papeles de todos explican cómo es tan expresivo como un lenguaje basado en clases, pero mucho más fácil de aprender. Naturalmente, la gente piensa acerca de las cosas de una manera concreta y no en abstracto. Pensamos en el elefante que vimos en el zoológico, no un "elefante" genérico. Cuando vemos a otros elefantes, los clasificamos como diferencias del primero. Un lenguaje basado en prototipos facilita esta forma de pensar. Piense en ello como la programación por diferencial.

¿Es una razón suficiente para usarlo en un idioma? Quizás. En los 25 años desde que la idea comenzó percolación, yo diría que los conceptos abstractos como OO basado en clases no ha sido muy difícil para la mayoría de las personas a aprender. Por otra parte tal vez hay una necesidad de un lenguaje de programación de cuello azul (como JavaScript) que es más fácil y esto puede ser una manera de lograrlo.

Si está interesado, puede comenzar con este documento sobre uno mismo.

La verdad es que no quiero escribir otro artículo sobre herencia de prototipos nuevo, así que sólo voy enlace a mis artículos anteriores. Eso sí, son muy largo, pero bien vale la pena leer:

  1. de herencia de prototipos más clásica?
  2. Por qué prototípicos de herencia

Creo que la diferencia está en la dinámica de poder idioma (prototipo) da a usted. Javascript, como LISP misma, da un poder casi ilimitado a un programador. Este poder sólo está limitada por la responsabilidad del programador y el nivel de confianza en sí mismo. Por lo que la discusión es tan antigua como lo es - igual que los tipos estáticos vs sin tipo. Si se tiene en cuenta su fuente de programación y la autodisciplina son lo suficientemente fuertes - ir para el estilo prototipo

.

Parafraseando un famoso dicho:

El talento hace lo que puede (léase: Clase-based), genio hace lo que quiere (es decir: prototipo de base).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top