Páginas

domingo, 28 de septiembre de 2014

Gambas3: Me y Super. Ejemplo de uso

Gambas3: Me y Super. Ejemplo de uso

En este artículos  hablaremos del uso de ME y de SUPER. En la documentación oficial explica que son:

ME

Devuelve una referencia al objeto actual.
ME es obligatorio cuando quiere llamar a un método heredado, o acceder a una propiedad o heredada.


SUPER

Devuelve una referencia al objeto actual que empleará la implementación de los símbolos de la clase padre.

Como veis con ME hacemos referencia al objeto actual. Si estamos en el código del formulario, y lo queremos cerrar, usamos esta orden:

me.close()

De esta forma,  estamos cerrando el formulario actual.

Ejemplo:
Os dejo un ejemplo de uso de Super y Me.

Se trata de tener dos clases, una clase padre llamada Soldado y otra que le herede llamado "SoldadoAmetralladora"


Código de la clase Soldado:
' gambas class file

Public Sub dispara()

Print "me prepararo para disparar...."

Me.dibujadisparo()

End

Public Sub dibujadisparo()

Print "---- dibuja una piedra volando por la pantalla -------"

End


Código de la clase SoldadoAmetralladora:
' gambas class file

Inherits Soldado
' gambas class file
Private arma As String = "ametralladora"

Public Sub dispara()

Print "me prepararo para disparar...."

Me.dibujadisparo()

End

Public Sub dibujadisparo()

If arma = "ametralladora" Then
Print "---- dibuja disparando una ametralladora -------"
Else
Super.dibujadisparo()
Endif

End

Public Sub quitoarma()

arma = "sin ametralladora"

End


Y el programa principal:
Public Sub Form_Open()

Dim soldadotmp As New Soldado
Dim soldadoAmetralladora As New SoldadoAmetralladora

Print soldadotmp
soldadotmp.dispara()

Print SoldadoAmetralladora
SoldadoAmetralladora.dispara()

Print "--------Quito arma -----"
soldadoAmetralladora.quitoarma()

soldadoAmetralladora.dispara()

End

Lo que hace la aplilcación es crear un la clase Soldado (soldadotmp), y luego crear otra del tipo SolddoAmetralladora (que hereda de la clase Soldado).

Cuando ejecutamos el método SoldadoAmetralladora.dispara(), ejecuta las ordenes que tiene el método dispara(). Este método llama a "dibujadisparo". Que según un el valor de la variable arma, escribe "dibuja dispara  una ametralladora" o hace la llamada al método dibujadisparo() de la clase padre, usando SUPER


Resultado:
El resultado de la aplicación es este:
(Soldado 0x8879b54)
me prepararo para disparar....
---- dibuja una piedra volando por la pantalla -------
(soldadoAmetralladora 0x8879c14)
me prepararo para disparar....
---- dibuja disparando una ametralladora -------
--------Quito arma -----
me prepararo para disparar....
---- dibuja una piedra volando por la pantalla -------

Enlace de descarga del ejemplo: enlace de descarga a box.com


Para más información:
http://gambaswiki.org/wiki/lang/me?l=es
http://gambaswiki.org/wiki/lang/super?l=es
http://gambaswiki.org/wiki/cat/object?l=es
Foro Gambas-es.org: Un Detalle De La Herencia Entre Clases Y Prioridad De Uso De Métodos