[Php-avanzado] Properties, busco feedback, gracias.
Gabriel Nicolás González Ferreira
gabrielinuz en gmail.com
Vie Oct 24 17:53:17 ART 2014
Hola Leo, te constesto intercalado:
On Fri, 24 Oct 2014 14:55:41 -0300
Leonardo Tadei - Pegasus Tech Supply <leonardot en pegasusnet.com.ar> wrote:
> Hola Gabriel,
>
> El vie, 24-10-2014 a las 13:13 -0300, Gabriel Nicolás González Ferreira
> escribió:
> > http://en.wikipedia.org/wiki/Property_%28programming%29
> >
> > Hola a todos, hace un tiempo que buscaba un modo de usar properties en
> > php pero sin herencia y sin tener que repetir un trozo de código en
> > cada archivo,
>
> Bueno... y cómo se supone que tenés código en común en diferentes
> Objetos si no es por Herencia o por repetir código en un archivo???
>
Eso es cierto, solo buscaba como no tener que escribirlo nuevamente en la clase que use properties.
> Respecto a las "properties", son solamente una invocación automática a
> los getter y setters de un atributo. Desde el punto de: vista del
> paradigma POO, no aporta ningún concepto nuevo.
Puede ser, pero yo no dije que aportara nada nuevo, me gustaría contarte personalmente porqué en otros lenguajes nos gusta usarlas. Hasta a veces tienen un sentido idiomático y casi estético, que para vos no debe ser importante pero como yo soy medio artista (no olvides que nací en esto como Músico, jejeje). En fin permiten que unifiquemos la forma de acceder a los attributos privados sin violar encapsulación. Pero hay otras opiniones más interesantes para vos que estoy seguro que me las vas a complementar, yo no estoy a favor o en contra de los setters y getters:
http://typicalprogrammer.com/doing-it-wrong-getters-and-setters/
http://www.javaworld.com/article/2073723/core-java/why-getter-and-setter-methods-are-evil.html
> Fijate que los lenguajes de objetos puros no implementan ningún
> mecanismo para que esto exista (los atributos son privados y se acceden
> mediante setters y getters y punto).
Claro, PHP no es un lenguaje de objetos puros.
>
> > me encontré con esto pero no se que opinan del uso de Traits en php:
> >
> > http://blog.std-io.com/2013/11/trait-property-en-php.html
> > http://pastebin.com/Yt8Tvi9n
>
>
> Los traits son un mecanismo relativamente nuevo para implementar una
> especia de herencia múltiple parcial: si usás traits, estás heredando, y
> es lo que decís que no querés hacer al principio.
Claro, es una herencia múltiple parcial que me permite evitar el problema de la herencia multiple total, quizás me equivoque en mi expresión, quiero herencia múltiple parcial, ya que el extends de PHP está limitado a herencia de implementación única.
CITO el manual de PHP:
"La semántica a la hora combinar Traits y clases se define de tal manera que reduzca su complejidad y se eviten los problemas típicos asociados a la herencia múltiple y a los Mixins."
"Un Trait es similar a una clase, pero con el único objetivo de agrupar funcionalidades muy específicas y de una manera coherente. No se puede instanciar directamente un Trait. Es por tanto un añadido a la herencia tradicional, y habilita la composición horizontal de comportamientos; es decir, permite combinar miembros de clases sin tener que usar herencia."
>
> Por otra parte, no se conoce ningún problema que para ser solucionado
> en la POO requiera herencia múltiple y por esto los lenguajes de Objetos
> puros no la implementan.
Otra vez no estoy hablando de algo en un lenguaje de programación de objetos puros. Y respecto a la herencia multiple en PHP estaba limitada a la herencia de interfaces por eso se puede usar, pasa que está oculta bajo la palabrita implements (a bajo nivel es igual a un extend de una clase con todos sus métodos virtuales igualados a 0). Yo se que vos que sos un programador con mucha experiencia y sabés que en otro lenguajes puede ser usada, te invito a buscar ejemplos de casos de uso en el libro de Bertrand Meyer que te pasé hace un año (http://en.wikipedia.org/wiki/Object-Oriented_Software_Construction si no lo encontrás avisame), pero solo como anécdota porque yo prefiero no usar herencia multiple de implementación pero si herencia multiple de interface.
http://es.wikipedia.org/wiki/Problema_del_diamante
http://es.wikipedia.org/wiki/Herencia_virtual
>
> Cómo es habitual, los lenguajes híbridos implementan cosas que permite
> violar el paradigma de la POO, bajo un lema de tinte comercial que viene
> a decir "el mercado lo pide" o "los que vienen de otro lenguaje (y hacen
> P. Estructurada) les es cómodo usarlo".
>
> PHP también implementa goto
> http://ar2.php.net/manual/en/control-structures.goto.php lo que está muy
> bien para un lenguaje.
> Se conocen desde hace décadas los efectos perjudiciales al código de
> usar saltos incondicionales.
> Lo que está muy mal es que un programador lo use!
>
Por supuesto, también el if puede ser mal utilizado, eso no significa que el if sea malo. El infame go to, no es malo en un main.cpp y utilizado una sola vez para ir a la salida, jajaja.
> > El ejemplo del muchacho no funciona por poco, así que lo modifiqué, en
> > fin adjunto el ejemplo que funciona.
> >
> > No se si esta forma de usar properties es correcta, espero feedback de
> > uds, abrazos a todos.
>
> > Para leer sobre Traits y Sobrecarga:
> > http://php.net/manual/es/language.oop5.traits.php
> > http://php.net/manual/es/language.oop5.overloading.php
>
> Yo nunca vi a nadie que comprenda y use POO, en mis 20 años en el tema,
> quejarse de tener que escribir getters y setters... que son código casi
> idéntico que uno escribe en todos las clases. En mi caso, tengo un
> generador de código que los escribe por mi, con lo que la tarea está
> completamente automatizada.
> https://github.com/PegasusTech/ClassGenerator
>
Me contaron mientras cursaba Programación III, que tanto Bjarne Stroustrup como Alan Kay leyeron el mismo paper de Simula. En el caso del primero quiso solucionar un problema que tenían en AT&T en aquellos años y agregar algunas características de POO a C, alguna vez también alguien me contó que Stroustrup dijo: "Yo quise hacer un C glorificado y no Smalltalk del hombre pobre", supongo un poco en contestación a Alan dicendo: "Yo inventé el término Orientado a Objetos, y te puedo asegurar que C++ no era en lo que estaba pensando".
No creo que Alan Kay hubiese podido implementar en la cultura de AT&T Smalltalk donde todos ya sabían C, el quería algo nuevo, puro y principalmente orgánico, no olvidemos su formación en Biología Molecular que el siempre cita (¡Genial!). Lo híbrido fue necesario, parece que los paradigmas en programación se violan todo el tiempo, si vos hacés referencia a purismo deberíamos hablar de esto en la lista de Smalltalk, no en la de PHP ;). Recuerdo un chiste de Stroustrup: "Existen dos tipos de lenguajes de programación: por un lado, aquellos de los que la gente se queja todo el tiempo; por otro, los que nadie utiliza."
Vos me mostraste este sitio una vez: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html y se nota que los lenguajes más utilizados son híbridos, eso también puede significar también que hasta ahora nadie entendió a esos genios de Xerox Parc.
>
>
> Pero todo esto es una discusión en el aire: qué problema de diseño
> estás queriendo resolver que te hace necesaria la implementación de
> properties???
>
>
El desafío de hacer properties era académico, planteado por el mismo profesor del chico (Alexander) que publicó ese código. Por supuesto que tiene sentido, varios lenguajes las tienen disponible. Pero ese sentido puede no ser importante para vos, pero para otros sí:
"Una propiedad es un miembro que proporciona un mecanismo flexible para leer, escribir o calcular el valor de un campo privado. Las propiedades pueden ser utilizadas como si fueran miembros de datos públicos, pero en realidad son métodos especiales llamados descriptores de acceso. Esto permite que los datos sean accedidos fácilmente y todavía ayuda a promover la seguridad y la flexibilidad de los métodos." http://msdn.microsoft.com/es-es/library/x9fsa0sw.aspx
¡Muchísimas gracias por todo lo que me comentaste que me hizo pensar un montón y leer más para contestarte!
¡Abrazos!
>
> --
> Leonardo Tadei
> leonardot en pegasusnet.com.ar
> Web: http://leonardo.tadei.com.ar
> Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>
> _______________________________________________
> Lista de correo: Php-avanzado
> Mensajes a la lista: Php-avanzado en pato2.fi.mdp.edu.ar
> Administración Web: http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
> Desubscripción: php-avanzado-request en pato2.fi.mdp.edu.ar?subject=unsubscribe
--
Gabriel Nicolás González Ferreira <gabrielinuz en gmail.com>
Más información sobre la lista de distribución Php-avanzado