FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Cita:
Saludos. |
#2
|
||||
|
||||
Al González,
Cita:
Cita:
Saludos, Nelson. |
#3
|
||||
|
||||
Cita:
Pero me extraña ver tantas disertaciones sobre herencia múltiple con todos los contras que tiene, y casi ninguna mención a la redefinición de clases (o "herencia insertada"), en lenguajes populares como Delphi, C#, etc. Por otra parte, mamcx, he notado que haces mucho hincapié en las dificultades para reutilizar código cuando éste se encuentra en métodos de clases y sólo necesitamos uno de esos métodos o parte de él, y no toda la jerarquía de clases que arrastra. Me pregunto si habrás mirado con detenimiento en GH Freebrary, donde hay más de 40 clases y la mayor parte del código fuente que éstas emplean se encuentra separado en cientos de funciones independientes. Así el programador tiene la libertad de usar una clase de esta biblioteca o solamente las funciones que necesita, según sea su objetivo. Y es que yo me tomo muy en serio lo del aprovechamiento y reutilización del código, sin caer en aquella tristemente exitosa trampa conceptual de que "encapsular" es meter todo el código fuente en los métodos. Un saludo. |
#4
|
||||
|
||||
No conozco GH Freebrary, llevo un rato desconectado de trabajo serio en Delphi (). Por lo que describes, estas empleando el concepto de "Composicion sobre herencia", que fue desarrollado precisamente entre los lenguajes OO, tal como explica el link de wikipedia. Me parece que eventualmente todo programador experimentado en OO llega, aun sin darse cuenta y de forma informal, a la idea puramente porque es una forma mas sana de trabajar.
__________________
El malabarista. |
#5
|
||||
|
||||
Cita:
Composicion sobre herencia. Luego de muchos años de hacer OO, es claro que la herencia es la forma *errada* de lograr la reutilizacion de codigo: http://raganwald.com/2014/03/31/clas...t-do-that.html http://javarevisited.blogspot.sg/201...ps-design.html No solo porque arrastran todo el edificio cuando solo necesito prestado un martillo, sino porque hacen rigido el esquema del código y complican jodidamente el poder reusar el codigo. Hay 2 formas que serian mucho mejor, pero seria complicado retro-corregir un lenguaje como Delphi/Java. El metodo mas practico (desde el punto de vista del acostumbrado a OO) y parecido es el de GO: http://www.onebigfluke.com/2014/04/g...-behavior.html El segundo son los multi-metodos: http://nice.sourceforge.net/visitor.html (Implementado en NICE, un lenguaje parecido a Java) Y en Julia, que es mas funcional: http://julia.readthedocs.org/en/latest/manual/methods/ ---- El asunto del porque la herencia es la solucion herrada (no siempre, pero muchas veces) es que es una violacion de la idea de http://users.ece.utexas.edu/~adnan/pike.html Cita:
Cita:
Como se soluciona tipicamente? Pues tienes que tener un IndyHTTP o un SinapseHTTP, heredar de eso, y implementar el metodo(s) que REALMENTE es necesario, pero ademas, probablemente reimplementar un monton de otros. Y como se arrastra TODA la jerarquia, no siempre es claro que hay que reimplementar (no saben cuantas veces se ignora reimplementar metodos como el de hash, igualdad y otros). En cambio, tomando a GO por ejemplo, si quieres que tu codigo sea un servidor web (ilustrando con un ejemplo bastardizado de pascal): Este codigo: Declara que conforma con la interface de un servidor web, define su implementacion y se encarga de pasar los param de request/response. Noten que esta totalmente desacoplado, es testeable, no hay que "montarlo" sobre puertos, Es irrelevante el porque rayos mi clase de manejos de clientes de un momento a otro puede ser un servidor web, es totalmente compatible con cualquier codigo que acepte esa interface. Un monton de cosas, y a la vez: No hay herencia, no se traen tropocientos metodos inutiles, no trae codigo inutil, no importa si la implementacion de sockets es Synapse o Indy o lo que sea, no importa que Clientes no es una libreria exclusiva de servidores web... No hay que crear una subclase. No hay que reimplementar nada. No hay que pensar cual de los tropocientos metodos y campos son o no importante. No se puede, por error o brutalidad, llamar a un metodo o campo del padre que no tiene importancia, es inutil o hace un desastre. Y se puede hacer herencia, algunas veces... P.D: Una forma de lograr lo que se quiere de la herencia multiple, sin traer sus problemas y promover el desacoople es permite re-abrir funcionalidad de una clase, una forma de como se ve esto: https://developer.apple.com/library/...xtensions.html Pascal bastardizado: El cambio es localizado, no hay herencia (plus), se pude jalar lo necesario de otras clases(s)/funciones (incluso de varias) y no se "contamina" toda la clase de forma universal.
__________________
El malabarista. Última edición por mamcx fecha: 10-08-2014 a las 05:16:23. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Encuesta de la ONU | fidel | Humor | 4 | 03-06-2013 10:20:03 |
Embarcadero lanza nueva estrategia de mercadeo para Delphi | movorack | La Taberna | 8 | 04-05-2013 02:03:18 |
Encuesta | cacu | La Taberna | 4 | 14-12-2011 18:20:17 |
Nueva encuesta Reunión Delphi en el DF | egostar | Debates | 34 | 21-10-2008 17:04:27 |
Embarcadero Technologies libera nueva versión de Interbase | poliburro | Noticias | 5 | 28-09-2008 20:55:02 |
|