Posts: 5278 Location: Al otro lado de la pantalla
Friday, 09 February 2018, 10:13
Julio:
En tu ejemplo usabas una función en la rutina principal en la que usabas polimorfismo.
Public Sub mostrar(per As Personal)
Print "********************************************************"
Print "Usando una función que recibe cualquier clase de persona"
Print "********************************************************"
per.Consultar()
End
Hice un ejemplo parecido en Python. Y encontré la posibilidad de hacerlo de dos formas distintas.
Una es usando una función como la de arriba y pasandole como parámetro un objeto que herede de la clase padre.
Pero hay otra forma que en
gambas no he podido lograr. Creé una clase padre trabajador por llamarla de alguna forma
y en ella se aplica el polimorfismo.
Esta clase padre Trabajador tiene un método "Consultar" en la que se llama al método común
"InformeTrabajador" de las clases hijas. Me ha sido imposible hacer algo parecido en Gambas.
Ya que la clase padre Trabajador carece del método "InformeTrabajador".
#!/usr/bin/python3
# Herencia entre clases
class Trabajador:
def __init__(self, nombre, sueldomensual):
self.nombre = nombre
self.sueldomensual = sueldomensual
def getnombre(self):
return self.nombre
def getsueldomensual(self):
return self.sueldomensual
def Consultar(self):
self.InformeTrabajador()
class Personal(Trabajador):
def InformeTrabajador(self):
print ('Consultar datos...')
print ('Nombre: {0}'.format(self.getnombre()))
print ('Salario: {0}€'.format(self.getsueldomensual()))
class Administrativo(Trabajador):
def __init__(self, nombre, sueldomensual, area):
super().__init__(nombre, sueldomensual)
self.area = area
def getarea(self):
return self.area
def InformeTrabajador(self):
print ('Consultar datos...')
print ('Nombre: {0}'.format(self.getnombre()))
print ('Salario: {0}€'.format(self.getsueldomensual()))
print ('Area: {0}'.format(self.getarea()))
def main():
pedro = Personal(nombre = 'Pedro', sueldomensual = '600')
pedro.Consultar()
print ('---------')
maria = Administrativo(nombre = 'Maria', sueldomensual = '800', area = 'Administración general')
maria.Consultar()
if __name__=='__main__': main()
No sé si es posible en
gambas lograr hacer eso de alguna manera.
De todas formas también he visto en Python usar el sistema de la función.
Así que puede que según la versión de este haya cambiado la forma.
¿ Has visto en Java esa posibilidad ?.
El self de Python es una referencia a la instancia del objeto dentro del método.
Saludos