Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-12-2014
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Agrego: En este par de artículos no se advierte sobre la supuesta prohibición de que una clase hoja "no debe" o "no puede" tener subclases.
https://docs.oracle.com/cd/B14099_19...3.htm#i1142056
http://eclipse.org/eclipselink/docum...1.htm#CHEEDJEH

Yo creo que es lógico decir que una clase hoja es sencillamente la que no tiene clases hijas (aunque normalmente sí tiene padre), pero que nada impide que esa hoja se convierta luego en rama si llega a definírsele una clase derivada.

Por otra parte, en la POO moderna se ha venido usando la palabra sellada (sealed) para indicar el impedimento de derivación. Por lo tanto, creo que podemos ir acuñando ya una distinción clara entre lo que es clase hoja: que no tiene subclases, y una clase sellada: que no puede tener subclases. Vaya, en términos de reproducción, que no es lo mismo inmadurez que esterilidad.

Última edición por Al González fecha: 11-12-2014 a las 00:07:53.
Responder Con Cita
  #2  
Antiguo 11-12-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.941
Poder: 27
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por Al González Ver Mensaje
Agrego: En este par de artículos no se advierte sobre la supuesta prohibición de que una clase hoja "no debe" o "no puede" tener subclases.
No es una prohibición, es solo una recomendación. Nota ademas que en https://en.wikipedia.org/wiki/Leaf_c...er_programming) se marca el articulo como "Sin referencias ni fuentes" y como un "Stub = Incompleto". De solo mirarlo es claro que no es una fuente muy autoritaria sobre el tema.

La recomendación no tiene contexto, pero se deduce de la idea de que es preferible "composición sobre herencia", "plano sobre anidado" y simple y llano sentido común ("es mejor menos que mas!"), junto a "explicito sobre implicito". Si una clase no tiene subclases, porque no dejar eso claro? Aunque algunos lo usan como una tecnica de optimizaron, yo diria que es mas un asunto de hacer claro la intención: Porfa no hereden de esto, este es el final de esta rama del árbol.

Un sistema mejor estructurado (y si el lenguaje ayuda) se desliga de la idea de la OO "tradicional" y combina programacion por componentes , modulos, uso de POCO, funciones y estructuras/tuplas/arrays/listas/records o similar. La idea es que los OO son mas flexibles si se usan al estilo como el creador de smaltalk los visiono y que modernamente esta implementado el modelo de Actor.

Que es otra forma muy sofisticada de decir que es buena idea aplanar el arbol de herencia, pensar bien como se combinan las clases y usar funciones/datos (y tipos, si el lenguaje lo da) si es posible para reducir la necesidad de crear muchas clases.

Cita:
Empezado por Al González Ver Mensaje
Por otra parte, en la POO moderna se ha venido usando la palabra sellada (sealed) para indicar el impedimento de derivación. Por lo tanto, creo que podemos ir acuñando ya una distinción clara entre lo que es clase hoja: que no tiene subclases, y una clase sellada: que no puede tener subclases. Vaya, en términos de reproducción, que no es lo mismo inmadurez que esterilidad.
Volviendo a "como nombro esto?"

Veo al buscar que es claro que un Leaf Class es una clase sin hijos. Lo de que "no deberia" es una recomendación de diseño, pero no altera que igual esta no tiene hijos. Si el codigo solo lo ve tu libreria da igual, pero si esto lo ve un programador X, creo que es mas claro decir "NoChilds" que "LeafClass". Nunca hay que dudar que la mayoria no esta empapado de la terminologia tecnica de todo esto.

No se como se llaman las otras clases (la de si tiene hijos y no se que mas) como para ver que "estilo" o tema tienes al nombrar las cosas, para mantener la simetria.

Puede ser ListLeafClasses o ListNoChildClasses...

P.D: Por otro lado, si la idea es tener una lista de clases, no veo porque hay que crear una clase que diga "esto es una lista de clases sin hijos". Me parece mas simple tener 1 funcion que me devuelva una Lista/Array y ya.
__________________
El malabarista.

Última edición por mamcx fecha: 11-12-2014 a las 04:10:22.
Responder Con Cita
  #3  
Antiguo 11-12-2014
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.610
Poder: 32
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Gracias, Mario.

Está claro todo lo que dices, si bien tengo algunas reservas. Pero qué bueno que vamos aclarando lo de la famosa prohibición: tienes razón, debemos tomarla más bien como una mera recomendación o idea de quienes escribieron eso. Esto me gusta porque se va asentando la diferencia entre clase hoja y clase sellada.

Mis clases y funciones (intento que esto forme parte de GH Freebrary), usan nombres cortos pero formales, empleando términos bien definidos o acuñados. Si bien tengo una larga lista de abreviaciones y no me gustan demasiado los artículos, las preposiciones y las negaciones en los identificadores, he de decir que trato de cuidar el orden, género, tiempo, número y persona de las palabras, acorde a la lengua de Mark Twain. El "ListLeafClasses" que sugieres sería más bien LeafClassList, contracción de leaf class list, que en castellano sería lista de clases hoja.

Volviendo a la justificación de crear la nueva clase. Primero diría que me resulta sumamente interesante crear una clase lista de clases "genérica" —con parámetro de tipo— derivada de la nativa TList genérica, la cual admita sólo clases de una rama en particular (los genéricos en Delphi lo simplifican mucho). Creo que sería útil en muchos casos, además de contar con algunos métodos auxiliares para el tratamiento específico de items clase.

Ahora, en esa misma clase lista podría incluir la funcionalidad de que sólo admita clases hojas. Pero estarás de acuerdo en que, si así fuera, tal característica tendría que ser opcional, y la clase estar preparada para trabajar (e incluso ajustar el contenido actual) según esa opción esté activa o no. Lo anterior pega directo en el punto que señalas de no hacer complejo lo que puede ser simple. Así que en lugar de agregar complejidad a una clase lista, agregándole esta funcionalidad extra opcional, mejor le derivo una subclase donde la funcionalidad quede circunscrita, llana, simple y con menos requerimientos de control. Cierto, no parece que vaya a haber muchos casos de uso, pero al menos yo ya tengo uno, y, como se trata de una biblioteca pública, puede que a alguien más le sirva luego también.

OK, queda la opción de ponerlo como una función suelta. Eso tendría la ventaja de poder operar con varios tipos de listas, pero creo que tendría yo que agregar código y validaciones adicionales para considerar particularidades de esas otras listas (más complejidad). Consideraciones que no tendría que tener con una lista cuyo comportamiento y datos estén perfectamente encapsulados (además hoy en día es trivial copiar el contenido de una lista a otra). Un argumento más a favor es que el método virtual Notify queda perfecto para hacer las revisiones necesarias, cada vez que se agregue una nueva clase a la lista.

Por los anteriores razonamientos es que le encuentro sentido a la lista especializada. Parece poca y rara cosa, pero queda bien en forma de clase de propósito específico.

Salvo que algo más me convenza de lo contrario...
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
La "CASTA" politica retratada en sólo 30 segundos Casimiro Noteví La Taberna 13 08-09-2012 04:50:55
Necesito llamar a métodos de clases "hija" desde su clase "padre" Flecha OOP 17 20-04-2007 00:03:53
Uso y abuso del elemento "lista de opciones" papulo HTML, Javascript y otros 9 12-01-2006 17:34:24
La lista completa de los "papers" de Borcon! mamcx Noticias 1 14-04-2005 13:01:59
Lista preliminar "Que hay de nuevo" en diamonback/D9 mamcx Noticias 5 17-09-2004 21:12:38


La franja horaria es GMT +2. Ahora son las 08:10:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi