hombre, poder encadenar mensajes no es una cosa de OO, sino de cómo funcione por debajo el lenguaje...
si tu lenguaje no te permite tener objetos anónimos, o los métodos que usas no devuelven una referencia al propio objeto (llamado self, this, me, y de otras maneras según el lugar donde pazas) no podrás hacer
a.dameObjetoDeTipoB().metodoDeObjetoB()
independientemente del modelo de programación que tengas debajo. pero esto es debido a que el objeto (a.dameObjetoB()) no existe en el momento en que quieras enviarle el mensaje .metodoObjetoB() (bien porque es un Factory de otros tipos de objetos y no pueden ser anónimos, porque no hay una jerarquía hacia arriba por la que subir para pasar ese mensaje, o simplemente porque el método anterior no devuelve una referencia al objeto, así que no tienes a nadie a quien enviar el mensajito de marras).
ni que esto fuera un invento de java, vamos... la OO de Java es, de hecho, bastante limitada (por diseño, vamos), por eso hay que hacerse la picha un lío con chopocientos patrones, y para leer una línea de un fichero de texto e imprimirla había que escribir casi medio Kb de código. Ahora es más fácil, pero sólo porque es otro java, y ni siquiera es el que utilizan BEA, o WebSphere o JavaONE (JES, o como quieran que lo llamen ahora [nota: ¿cuántos productos sobrevivirían a tantos cambios de nombre durante tanto tiempo?]). Me parece bien, que conste, me gusta más que antes...
PHP ya tiene objetos temporales anónimos (o que devuelvan una referencia a sí mismo, o que el parser es más listo...), bien por ellos... pero decir que por eso es más parecido a java... lo de encadenar mensajes a objetos temporales a partir de un objeto de verdad (aunque sea a partir de un new) no es nada nuevo: se llama composición matemática, y todos los lenguajes de programación funcional (incluso C hace medio millón de años, por no hablar de los lenguajes realmente primitivos), ya permitían hacer esto: donde antes las "firmas" de las funciones tenían que cuadrar para poder hacer f( g( h( foo( a ) ) ) ), ahora tienen que cuadrar las interfaces de los objetos intermedios a.foo().h().g().f() ...
esto no es OO... Python tiene una OO tan buena como Java, Ruby incluso mejor (dado que tiene tanto de SmallTalk con otro nombre, y eso se tenía que notar en muchas cosas), [nota: joer, incluso Perl permite hacer cosas que Java no puede ni soñar, y la OO de Perl es... mmm... "muy suya" (eh, a mí me gusta, pero para gustos, colores)] y no se puede comparar con la potencia de sistemas más sofisticados y poderosos como los de Self (o el mismo pobcito, vilipendiado JavaScript, basado en delegación) o el CLOS (Common Lisp Object System), basado en... bueno, en todo, creo.
O sea, que nos vamos por las ramas. el estudio ese es una chorrada, porque 400 programadores de EMEA son, pues no sé, así a ojo de buen cubero, ¿el 0.01% de los programadores de EMEA? desde luego que esos usen menos los lenguajes dinámicos frente a lenguajes como java, c# o c++... depende de a qué se dediquen (¿programan juegos o webs cutres?), políticas de empresa, posibilidades técnicas, etc...
Mark Twain dijo "hay mentiras, putas mentiras y estadísticas" (más o menos)... ni caso, y a programar, que hay mucho que aprender...
Re:No son comparables
(Puntos:2, Informativo)( http://barrapunto.com )
si tu lenguaje no te permite tener objetos anónimos, o los métodos que usas no devuelven una referencia al propio objeto (llamado self, this, me, y de otras maneras según el lugar donde pazas) no podrás hacer
a.dameObjetoDeTipoB().metodoDeObjetoB()
independientemente del modelo de programación que tengas debajo. pero esto es debido a que el objeto (a.dameObjetoB()) no existe en el momento en que quieras enviarle el mensaje .metodoObjetoB() (bien porque es un Factory de otros tipos de objetos y no pueden ser anónimos, porque no hay una jerarquía hacia arriba por la que subir para pasar ese mensaje, o simplemente porque el método anterior no devuelve una referencia al objeto, así que no tienes a nadie a quien enviar el mensajito de marras).
ni que esto fuera un invento de java, vamos... la OO de Java es, de hecho, bastante limitada (por diseño, vamos), por eso hay que hacerse la picha un lío con chopocientos patrones, y para leer una línea de un fichero de texto e imprimirla había que escribir casi medio Kb de código. Ahora es más fácil, pero sólo porque es otro java, y ni siquiera es el que utilizan BEA, o WebSphere o JavaONE (JES, o como quieran que lo llamen ahora [nota: ¿cuántos productos sobrevivirían a tantos cambios de nombre durante tanto tiempo?]). Me parece bien, que conste, me gusta más que antes...
PHP ya tiene objetos temporales anónimos (o que devuelvan una referencia a sí mismo, o que el parser es más listo...), bien por ellos... pero decir que por eso es más parecido a java... lo de encadenar mensajes a objetos temporales a partir de un objeto de verdad (aunque sea a partir de un new) no es nada nuevo: se llama composición matemática, y todos los lenguajes de programación funcional (incluso C hace medio millón de años, por no hablar de los lenguajes realmente primitivos), ya permitían hacer esto: donde antes las "firmas" de las funciones tenían que cuadrar para poder hacer f( g( h( foo( a ) ) ) ), ahora tienen que cuadrar las interfaces de los objetos intermedios a.foo().h().g().f() ...
esto no es OO... Python tiene una OO tan buena como Java, Ruby incluso mejor (dado que tiene tanto de SmallTalk con otro nombre, y eso se tenía que notar en muchas cosas), [nota: joer, incluso Perl permite hacer cosas que Java no puede ni soñar, y la OO de Perl es... mmm... "muy suya" (eh, a mí me gusta, pero para gustos, colores)] y no se puede comparar con la potencia de sistemas más sofisticados y poderosos como los de Self (o el mismo pobcito, vilipendiado JavaScript, basado en delegación) o el CLOS (Common Lisp Object System), basado en... bueno, en todo, creo.
O sea, que nos vamos por las ramas. el estudio ese es una chorrada, porque 400 programadores de EMEA son, pues no sé, así a ojo de buen cubero, ¿el 0.01% de los programadores de EMEA? desde luego que esos usen menos los lenguajes dinámicos frente a lenguajes como java, c# o c++... depende de a qué se dediquen (¿programan juegos o webs cutres?), políticas de empresa, posibilidades técnicas, etc...
Mark Twain dijo "hay mentiras, putas mentiras y estadísticas" (más o menos)... ni caso, y a programar, que hay mucho que aprender...
un saludo