Ver Mensaje Individual
  #13 (permalink)  
Antiguo 07/05/2015, 08:45
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 7 meses
Puntos: 270
Respuesta: Duda existencial sobre el uso de "this"

Cita:
can be puzzling to programmers trained in conventional object-oriented languages
Por partes con esa frase:
1) Puzzling : Y tanto.ECMAScrript v4 es de 1999.A ver, por refrescar la memoria: PHP 4 o no habia salido, o estaba a punto de salir.Si a alguien, digamos en el año 2000/2001, le dices que JS es un lenguaje orientado a objetos, se está riendo una semana.Y tanto que puzzling.Como que se han tardado años en que se popularizara eso de los "prototipos".
Eso incluye al propio Douglas Crockford, que, si realmente se le ha leído, se ve cómo sus técnicas de creación de objetos, han ido evolucionando con el tiempo, para que, aparte de la herencia , cumpla alguno más de los requisitos de la OOP (aunque lo consiga sólo parcialmente).
De hecho, la fuente de donde la gente ha aprendido el uso de objetos en js, ha sido precisamente del trabajo de gente como Crockford.
Los documentos de Crockford son del 2001 (de 2 años después), donde describe técnicas para implementar information hiding en js.Específicamente, este documento, un must-read para cualquiera que escriba js:http://www.crockford.com/javascript/private.html.
Si se lee ese documento, hay algunas perlas:
Cita:
This pattern of public, private, and privileged members is possible because JavaScript has closures.
....
There is no book currently available on JavaScript programming that shows how to exploit it. Most don't even mention it.
Es decir, que, en aquella época, las técnicas necesarias para "simular" information hiding en JS, se basaban en características del lenguaje que casi ni se conocían.
Aún así, quizás se estaba retorciendo algo el lenguaje:
Cita:
By convention, we make a private that variable. This is used to make the object available to the private methods. This is a workaround for an error in the ECMAScript Language Specification which causes this to be set incorrectly for inner functions.
De todas formas, crockford tiene sus propias incongruencias.En este documento dice:
Cita:
This is misleading because JavaScript has more in common with functional languages like Lisp or Scheme than with C or Java. It has arrays instead of lists and objects instead of property lists
O, dicho de otra forma, en esta frase, Crockford dice que JS tiene más en común con lenguajes funcionales, que con un lenguaje orientado a objetos como Java.
Se contradice, entonces??
No
JS, como lenguaje, y como se le usaba sobre todo en esa época, era (o es) un lenguaje funcional.
Una cosa distinta es que se puedan desarrollar técnicas para hacer OOP.Igual que puedes desarrollar técnicas para hacer AOP, o igual que en C puedes desarrollar técnicas para programar casi en lo que sea.
Que existan técnicas convierte al lenguaje en un lenguaje orientado a objetos?
Java es orientado a objetos porque existen técnicas, o porque el lenguaje está diseñado para ello?
Se tardan, pongamos , 2 años desde que se diseña Java hasta que alguien empieza a implementar OOP, y unos..um..8 o 9 hasta que se populariza su uso orientado a objetos, y unos 10-11 hasta que ese uso se convierte en más o menos mainstream?
Como bien dice Crockford,
Cita:
few know that JavaScript is a very nice dynamic object-oriented general-purpose programming language. How can this be a secret? Why is this language so misunderstood?
Hay alguna posiblidad de malinterpretar y pasar por alto la OOP en Java,C++,o C#?

Y dado todo esto, se puede decir que JS es orientado a objetos, de la misma forma que Java o C++? (y eso, sin entrar en todos los temas del post anterior)
Un coche es un medio de locomoción.
Existe una técnica para clavar clavos con un coche.No muy recomendable, no la mejor forma, etc, pero poderse, se puede.

2) Si C++ es un "conventional object oriented language", js será al menos "unconventional".Si un "unconventional object oriented language" es un "object oriented language", es ya cuestión de cuánto queramos estirar la definición...