Ver Mensaje Individual
  #15  
Antiguo 12-01-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 25
Delphius Va camino a la fama
Se que ya sea comentado al respecto y se ha dado una posible solución. Esta es la 4ta o 5ta vez que leo el hilo y sigue habiendo algo que no me queda claro.

Cita:
Empezado por elcolo83 Ver Mensaje
Hola a todos... quiesiera saber como puedo ocultar algunas propiedades de la herencia. El tema es que estoy haciendo un componente derivado del TListBox y quisiera que por ejemplo "itmes" no lo vea el programador ya que lo administra el mismo componente... de esa forma evique que me agreguen items a la lista... como se hace????
El ListBox está para ello para agregar, eliminar items. Es su FUNCION y propósito como objeto. ¿Que finalidad tiene derivar de él si no se desea contar con el propósito con el que ha sido diseñado?
Esto va por lo que ya Neftali recalcó:

Cita:
Empezado por Neftali Ver Mensaje
Otra cosa es que te plantees si es correcto o no. Es decir, que si a un componente A que deriva de otro B, debes ocultarle propiedades, tal vez sea porque A no deberia derivar de B (sólo piénsalo antes de continuar).
Es cierto que como dice muchos que el TCustomListBox ofrece una buena alternativa... Al menos para mi, y teniendo como punto de partida la simple descripción del problema, me resultaría más práctico y ventajoso emplear un descendiente de TCustomListBox. Es la mejor clase candidata.

Considero que elcolo83 nos explicase mejor su situación. Con haber dicho esas cortas frases no somos capaces de saber si es realmente beneficioso que implemente dicho truco ¿Cúal es el verdadero objetivo que te planteas elcolo83?

El diseño de nuevos componentes que sirvan para propósitos generales no es una actividad que pueda tomarse a la ligera... Considero, y casi siempre hago llamar la atención, a que se haga un mejor y profundo análisis antes de optar por alguna alternativa.

Al comienzo, en las primeras lecturas que hice del hilo, estuve pensando que se trata de un caso de Adaptador... que la clase oculte el comportamiento de un TListBox pero.... ahora decanto que sea ventajoso una alternativa como ésta. Sobre todo por el hecho de que me hice una simple pregunta ¿Y de que clase debe heredar el Adaptador? Al menos de lo que yo comprendo sobre el patrón adaptador se puede conseguir de estas formas:

1. Con la herencia:

Código Delphi [-]
TAdaptador = class(TAdaptado);
....
end;

TAdaptador.HacerCosa(Algo: TAlgo);
begin
   inherithed HacerCosa;
end;

2. Con el encapsulamiento:

Código Delphi [-]
TAdaptador = class(????);
private
   Adaptado: TListBox; 
   { No lo mostramos.... el usuario de la clase no tiene porque saber
     que internamente posee un TListBox y éste hará lo que deba hacer }
end;

TAdaptador.HacerAlgoUnPocoDistintoACosa(Algo: TipoAlgo);
begin
  .... 
  Adaptado.HacerCosa(Algo);
  ...
end;

Hay algo que no me ha dejado tranquilo y siento que algo se me escapa...
Me gustaría que alguien me explicase que finalidad tendría hacer algo como lo del truco. Yo siento que se trata de un error de diseño (o mejor dicho de una comprensión erronea del dominio).

Sabemos que el mundo POO está impregnado de la subjetividad (y personamlente es eso lo que lo hace grandioso, desafiante e interesante) pero me encantaría que tanto elcolo83 como los demás que han participado del hilo compartan su comprensión del tema aqui expuesto.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita