Antonio. Sobre el nombre de las Clases

Post Reply
miarcod
Posts: 172
Joined: Tue Oct 11, 2005 2:17 pm

Antonio. Sobre el nombre de las Clases

Post by miarcod »

Hola:

El problema que tengo es que si creo una clase heredando de otra ( lo estoy haciendo con btnbmp) el comportamiento de esta clase no es el mismo que el de la clase original.

Esto es debido en que algunas partes del codigo de las clases de Fivewin se controla el nombre de la clase para actuar de una u otra forma.

Creo que este comportaiento no debería depender del nombre de la clase sinó de algún otro dato que tuviese la clase, porque sino una simple modificación de una clase me obliga a modificar la clase principal window y también creo que la clase control.

Yo sólo quiero crear una clase nueva igual que la otra pero con otro nombre, en la que le agregaré una serie de datos adicionales para modificar su comportamiento.

Bueno, ahora la pregunta.

Si tengo el siguiente codigo

Code: Select all

CLASS MiBtn FROM TBNTBMP
.....
ENDCLASS

// redefino los métodos constructores para que se ejecuten los metodos del padre

O := MiBtn():New()
o:lCancel := .T.
Pues la clausula cancel no funciona

Como puedo solucionar esto sin tener que modificar la clase WINDOW, control, ... no se cuales más tendría que modificar.
¿Es posible cambiar el nombre de una clase para que tenga uno distinto al que se usó para crearla?
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Tienes toda la razón. Los nombres de las Clases no deberían usarse directamente en determinadas clases, sino usar el método que comprueba si una determinada clase es igual ó deriva de otra.

Puedes cambiar el nombre de la clase, pero busca en los PRGs donde se está usando el nombre de esa clase, y añade el tuyo tambien.
regards, saludos

Antonio Linares
www.fivetechsoft.com
miarcod
Posts: 172
Joined: Tue Oct 11, 2005 2:17 pm

Post by miarcod »

Gracias Antonio,

pero hay alguna forma para que pueda cambiar el nombre de la clase

Lo que pretendo es no tener que modificar las clases padres.


Te explico el porqué

Cuando empece a desarrollar con fivewin me encontré en la necesidad de modificar algunas clases para adaptarlas al funcionamiento que quería. El resultado final es el que yo deseaba, pero al cabo de un poco de tiempo decidí actualizar la versión de fivewin y el resultado fué que tuve que volver a modificar mis clases para poder usar las modificaciones que se se habían realizado en algunas de ellas (yo ignoraba e ignoro cuales fueron modificadas). Entonces decidí que no actualizaria la librería porque los problemas que me originaba no me conpensaba y mientras no necesitara otra cosa pues a aguantarse. Hace aproximadadamente un año decidí volver a actualizar y me volvió a pasar lo mismo, el caso es que se me hace bastante complicado el mantenimiento de las clases modificadas.

Como lo resuelvo, bueno pues decido no usar las clases que modifico y en su lugar usar clases heredadas de las originales pero con una serie de comportamientos especificos, reprogramo los metodos que me interesan y el resto los dejo. Al final obtengo una clase con cuatro o cinco métodos modificados que me es muy facil de mantener, pero

Si modifico la clase, por ejemplo Window, y actualizo la libreria no solo tengo que preocuparme de _ que afecten a las clases que yo he modificado sinoo de otras que no cambié.

Un saludo y gracias de nuevo
Juan Gálvez
Posts: 14
Joined: Fri Oct 21, 2005 10:05 am

Post by Juan Gálvez »

Quizás pueda servir algo así :

Code: Select all

CLASS MiBtn FROM TBNTBMP 
.....
   METHOD ClassName() INLINE "TBTNBMP"
..... 
ENDCLASS
Saludos
miarcod
Posts: 172
Joined: Tue Oct 11, 2005 2:17 pm

Post by miarcod »

Gracias funcionó.

Pero supongo que el nombre de la clase estará registrado en alguna parte de esta, pero no encuentro el data ni el método ClassName definido dentro de la clase.

He rebuscado en Windows y Control, pero no lo encuentro, espero que no me cause futuros problemas.

Un saludo
:shock:
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Harbour/xHarbour registran automaticamente el nombre de la clase desde la línea CLASS ...

la Clase HBObject de [x]Harbour implementa esos métodos y todas las clases heredan automaticamente de ella. Puedes revisar dicha clase en Harbour/source/rtl/tobject.prg.
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply