PDA

Ver la Versión Completa : Como ocultar metodos


seba_cipo
31-01-2006, 13:33:25
buenas a todos!
estoy empezando a trabajar con el tema de la POO y tengo un problema q no se como resolver:

TClase1=class(TObject)
private
public
procedure Hola;
end;


TClase5=class(TClase1)
private
public
procedure Chau;
end;

bien, la pregunta es si la Tclase5 hereda de TClase1, cuando haga

var:=tclase5.create;
var.chau; // este permitido
var.hola //NO este visible aunque este declarado en public

es decir ocultar algunos metodos de clases superiores ,, pero solo los q yo quiera..
la verdad no se si es posible,,
desde ya muchas gracias

jmariano
31-01-2006, 13:42:33
Si las clases son tuyas y necesitas acceder a los métodos de las clases padre en la implementación de las clases hijas, entonces, pon dichos métodos en la sección protected (sólo podrán acceder clases hijas pero nunca fuera de la misma clase). Ahora, si las clases son de terceros y no tuvieras el código fuente, entonces, nada se podrá hacer :( (no se pueden ocultar métodos public, al igual que tampoco se pueden ocultar propiedades published)

Saludos!

piccolo2101
31-01-2006, 13:47:58
Hola,
yo diría que no es posible por la propia idiosicracia de la POO.

PD: Vaya escribí la repuesta al tiempo que jmariano.

Un saludo.

seba_cipo
31-01-2006, 13:57:30
en realidad lo q quiero hacer es ocultar algun metodo de la clase (Tlist)
quiero ocultar el metodo add de Tlist ya q en mi clase lo voy a utilizar con algunas modificaciones

tclasse5=class(Tlist)
public
procedure add;
end;

Neftali [Germán.Estévez]
31-01-2006, 14:01:40
Éste hilo (http://www.clubdelphi.com/foros/showthread.php?t=14999) de hace un tiempo trata sobre el tema.

seba_cipo
31-01-2006, 14:44:49
ok,, comprendido el tema,,, muchas gracias a todos por su tiempo
saludos!!

delphi.com.ar
31-01-2006, 15:01:42
estoy empezando a trabajar con el tema de la POO y tengo un problema q no se como resolver:

TClase1=class(TObject)
private
public
procedure Hola;
end;

TClase5=class(TClase1)
private
public
procedure Chau;
end;

bien, la pregunta es si la Tclase5 hereda de TClase1, cuando haga

var:=tclase5.create;
var.chau; // este permitido
var.hola //NO este visible aunque este declarado en public

es decir ocultar algunos metodos de clases superiores ,, pero solo los q yo quiera..
la verdad no se si es posible,,
desde ya muchas gracias

Ahi tienes un problema de diseño que no se soluciona "ocultando métodos". Si la clase TClase5 no puede acceder al método Hola, o bien este método no tiene que pertenecer a la clase, o no tiene que estar visible, o a lo sumo sobreescrito. Yo te sugiriría pensar en clases intermedias.


en realidad lo q quiero hacer es ocultar algun metodo de la clase (Tlist)
quiero ocultar el metodo add de Tlist ya q en mi clase lo voy a utilizar con algunas modificaciones

tclasse5=class(Tlist)
public
procedure add;
end;
No puedes ocultar un método publicado, en la lógica esto sería simplemente violado si utilizas polimorfismo y tratas a tu clase como su ancestro. Particularmente en el caso del TList, muchas clases de la VCL que manejan listas dinámicas, por ejemplo TCollection, en lugar de heredar de TList lo utilizan como internamente y redefinen solo los métodos necesarios para la clase.

Saludos!