Page 1 of 1

Metodos heredados de una clase

Posted: Fri Oct 21, 2005 11:18 pm
by miarcod
¿Como puedo acceder al método padre de una clase cuando se encuentra redefinido?
Hace tiempo leí algo al respecto, pero por más que busco no lo encuentro.

Por ejemplo

Code: Select all

      CLASS UNO
             METHOD nombre()  INLINE "ESUNO"
          END CLASS

         CLASS DOS FROM UNO
            METHOD nombre()  INLINE "ESDOS"
         ENDCLASS

         CLASS TRES FROM DOS
            METHOD nombre()   INLINE "ESTRES"
        ENDCLASS

Si en mi función main() creo un objeto O1 de la clase TRES y ejecuto el método nombre() obtengo ESTRES,

Como obtengo el "ESDOS" y el "ESUNO"

Re: Metodos heredados de una clase

Posted: Sat Oct 22, 2005 12:03 am
by Hernan Diego Ceccarelli
miarcod wrote:¿Como puedo acceder al método padre de una clase cuando se encuentra redefinido?
Hace tiempo leí algo al respecto, pero por más que busco no lo encuentro.

Por ejemplo

Code: Select all

      CLASS UNO
             METHOD nombre()  INLINE "ESUNO"
          END CLASS

         CLASS DOS FROM UNO
            METHOD nombre()  INLINE "ESDOS"
         ENDCLASS

         CLASS TRES FROM DOS
            METHOD nombre()   INLINE "ESTRES"
        ENDCLASS

Si en mi función main() creo un objeto O1 de la clase TRES y ejecuto el método nombre() obtengo ESTRES,

Como obtengo el "ESDOS" y el "ESUNO"
Caso de Herancia Simple:
Super:<Metodo> --> Metodo del Padre :-)

Super proviene de SUPERTIPO, En objetos las jerarquías se habla de subtipo o especialización de un supertipo o generalización. . Los subtipos (niveles inferiores de la jerarquía) heredan las características de sus supertipos, además, cada instancia de un tipo de objeto lo es también de sus supertipos.

Caso de Herencia Multiple:
Super devolvera el objeto primero, aunque la clase que hereda a uno o mas objetos tiene variables de instancia o exportadas cuyos nombres son los de la clase que se pretende heredar. Esto es aplicable a Objects y el motor de Objetos de Harbour.


Salu2
Hernan :)

Posted: Sun Oct 23, 2005 6:39 pm
by jlcapel
Hola Hernán, Miarcod,

Utilizando el motor de objetos de (x)Harbour, según veo en el código de Miarcod, si hacemos super:Nombre() devolverá "ESDOS" por que el padre de la clase TRES es DOS.

A nivel PRG, si lo que interesa es acceder a la clase 'padre' de una jerarquía de clases debería hacerse de una forma parecida a esta:

Code: Select all

CLASS UNO
         METHOD nombre()  INLINE "ESUNO"
END CLASS

CLASS DOS FROM UNO
           METHOD nombre()  Super:Nombre()
ENDCLASS

CLASS TRES FROM DOS
           METHOD nombre()   Super:Nombre()
ENDCLASS
Con esto te aseguras siempre que la llamada al método Nombre dará como resultado el que hay en la case padre.

Saludos,
José Luis Capel