Red de conocimiento informático - Material del sitio web - Cómo entender y aprender orientado a objetos en javascript

Cómo entender y aprender orientado a objetos en javascript

Varios conceptos en orientación a objetos:

Todo es un objeto

Los objetos tienen las características de encapsulación y herencia

Entre objetos y objetos Utilizan comunicación de mensajes, y cada uno tiene información oculta

Con base en estos tres puntos, C++ es un lenguaje semi-orientado a objetos y semi-procedimental, porque aunque implementa encapsulación de clases, herencia y polimorfismo, Hay funciones y variables globales que no son objetos. Java y C# son lenguajes completamente orientados a objetos. Organizan funciones y variables en forma de clases para que no puedan existir sin objetos. Pero aquí la función en sí es un proceso, simplemente adjunto a una determinada clase.

Sin embargo, la orientación a objetos es sólo un concepto o idea de programación, y no debe depender de un determinado lenguaje para su existencia. Por ejemplo, Java utiliza el pensamiento orientado a objetos para construir su lenguaje e implementa mecanismos como clases, herencia, derivación, polimorfismo e interfaces. Sin embargo, estos mecanismos son sólo un medio para implementar la programación orientada a objetos, no son necesarios. En otras palabras, un lenguaje puede elegir una forma adecuada de implementar la orientación a objetos en función de sus propias características. Por lo tanto, dado que la mayoría de los programadores aprenden o utilizan por primera vez lenguajes compilados de alto nivel como Java y C++ (aunque Java está semicompilado y semiinterpretado, generalmente se explica como un lenguaje compilado), aceptan preconcebidamente el término "clase". ". Método de implementación orientado a objetos, por lo que al aprender un lenguaje de secuencias de comandos, se acostumbra utilizar los conceptos en lenguajes orientados a objetos basados ​​​​en clases para juzgar si el lenguaje es un lenguaje orientado a objetos o si tiene orientación a objetos. características. Esta es también una de las razones importantes que impide que los programadores aprendan y dominen JavaScript en profundidad.

De hecho, el lenguaje JavaScript implementa la programación orientada a objetos mediante un método llamado prototipo. La diferencia entre los métodos orientados a objetos basados ​​en clases y los métodos orientados a objetos basados ​​en prototipos en la forma en que construyen el mundo objetivo.

Comparación entre métodos orientados a objetos basados ​​en clases y métodos orientados a objetos basados ​​en prototipos

En los métodos orientados a objetos basados ​​en clases, los objetos son generados por clases. En el enfoque orientado a objetos basado en prototipos, los objetos se construyen utilizando constructores y prototipos. Dé un ejemplo del mundo objetivo para ilustrar la diferencia entre las dos formas de cognición. Por ejemplo, cuando una fábrica fabrica un automóvil, por un lado, los trabajadores deben consultar un dibujo de ingeniería y el diseño estipula cómo se debe fabricar el automóvil. Los dibujos de ingeniería aquí son como clases en el lenguaje, y los automóviles se fabrican de acuerdo con esta clase, por otro lado, los trabajadores y las máquinas (equivalentes a los constructores) utilizan diversas partes como motores, neumáticos, el volante (equivalente a cada atributo de; el prototipo) construye el coche.

De hecho, todavía hay debate sobre cuál de los dos métodos expresa más a fondo las ideas orientadas a objetos. Sin embargo, el autor cree que el prototipo orientado a objetos es un enfoque más completo orientado a objetos por las siguientes razones:

En primer lugar, la creación de objetos en el mundo objetivo es el resultado de la construcción de otros. objetos físicos, mientras que los "dibujos" abstractos no pueden producir "autos", es decir, una clase es un concepto abstracto más que una entidad, y la producción de un objeto es la producción de una entidad;

En segundo lugar, según el principio más básico de que todo es un objeto. Según las reglas orientadas a objetos, la clase en sí no es un objeto. Sin embargo, el constructor y el prototipo en el método prototipo son en sí mismos objetos construidos por otros objetos a través del prototipo. método.

Nuevamente, en un lenguaje orientado a objetos basado en clases, el estado de un objeto lo mantiene la instancia del objeto, y el método de comportamiento del objeto lo mantiene la clase que declara el objeto, y. solo se pueden heredar la estructura y los métodos del objeto; en el prototipo de lenguaje orientado a objetos, el comportamiento y el estado del objeto pertenecen al objeto mismo y se pueden heredar juntos (recursos de referencia), lo que también está más cerca de la realidad objetiva.

Finalmente, los lenguajes orientados a objetos basados ​​en clases como Java, para compensar el inconveniente de no poder utilizar funciones y variables globales en lenguajes orientados a procesos, permiten propiedades estáticas y Métodos estáticos que se declararán en clases. De hecho, no existe el llamado concepto estático en el mundo objetivo, ¡porque todo es un objeto! En un prototipo de lenguaje orientado a objetos, a excepción de los objetos integrados, no se permite la existencia de objetos, métodos o propiedades globales y no existe un concepto estático. Todos los elementos del lenguaje (primitivos) deben depender de los objetos para su existencia. Sin embargo, debido a las características de los lenguajes funcionales, los objetos de los que dependen los elementos del lenguaje cambian con los cambios en el contexto de tiempo de ejecución, lo que se refleja específicamente en los cambios en este puntero. Es esta característica la que se acerca más a la visión natural de que "todo pertenece a algo y el universo es la base para la supervivencia de todas las cosas".