Uno de los capítulos del curso de gambas de nuestro compañero Jsbsan trata sobre la herencia, Me y el método super.
Herencia, Me, Super
He modificado el ejemplo, tengo una clase padre soldado y dos clases hijas, fusilero y ametrallador
Tanto la clase hija fusilero y ametrallador heredan todos los métodos de la clase padre soldado.
Con la variación de que el arma (propiedad) puede ser un fusil o una ametralladora.
En cada clase hija el método efectuardisparo es propio de cada clase hija, en este caso son parecidos.
Tenemos la clase padre soldado:
Private $arma As String
Property arma As String
Private $desarmado As Boolean
Property desarmado As Boolean
Public Sub Dispara()
Print "Me preparo para disparar con.. " & Me.arma
'EfectuarDisparo()
Me.EfectuarDisparo()
End
Public Sub EfectuarDisparo()
Print "Se ha disparado " & Me.arma
End
Public Sub QuitarArma()
Me.desarmado = True
Me.arma = "piedra"
Print "Está desarmado"
End
Private Function arma_Read() As String
Return $arma
End
Private Sub arma_Write(Value As String)
$arma = Value
End
Private Function desarmado_Read() As Boolean
Return $desarmado
End
Private Sub desarmado_Write(Value As Boolean)
$desarmado = Value
End
Property arma As String
Private $desarmado As Boolean
Property desarmado As Boolean
Public Sub Dispara()
Print "Me preparo para disparar con.. " & Me.arma
'EfectuarDisparo()
Me.EfectuarDisparo()
End
Public Sub EfectuarDisparo()
Print "Se ha disparado " & Me.arma
End
Public Sub QuitarArma()
Me.desarmado = True
Me.arma = "piedra"
Print "Está desarmado"
End
Private Function arma_Read() As String
Return $arma
End
Private Sub arma_Write(Value As String)
$arma = Value
End
Private Function desarmado_Read() As Boolean
Return $desarmado
End
Private Sub desarmado_Write(Value As Boolean)
$desarmado = Value
End
La clase hija ametrallador:
Y la clase hija fusilero:
En el modulo principal vamos a crear dos objetos de la clase fusilero y ametrallador.
Y haremos que disparen. En el caso del ametrallador, vamos a desarmarlo y tendrá que disparar con una piedra.
( Vaaaale, tendría que haber dicho lanzar..)
No me di cuenta y puse un nombre parecido al nombre de la clase, pero como está en minúscula ha colado.
La salida del código es:
Citar:
Este es el código equivalente en Python3:
#!/usr/bin/python3
class soldado():
def __init__(self,arma,desarmado = False):
self.arma = arma
self.desarmado = desarmado
def dispara(self):
print ('Me preparo para disparar con.. ' + self.arma)
self.efectuardisparo()
def efectuardisparo(self):
print ('Se ha disparado ' + self.arma)
def quitarArma(self):
self.desarmado = True
self.arma = 'piedra'
print ('Está desarmado')
class fusilero(soldado):
def __init__(self):
super().__init__(arma = 'fusil')
def efectuardisparo(self):
if not self.desarmado:
print ('Se ha disparado un solo disparo.')
else:
super(fusilero,self).efectuardisparo()
class ametrallador(soldado):
def __init__(self):
super().__init__(arma = 'ametralladora')
def efectuardisparo(self):
if not self.desarmado:
print ('Se ha disparado a rafagas.')
else:
super(ametrallador,self).efectuardisparo()
def main():
escopetero = fusilero()
print (escopetero)
asalto = ametrallador()
escopetero.dispara()
print (asalto)
asalto.dispara()
asalto.quitarArma()
asalto.dispara()
if __name__=='__main__': main()
class soldado():
def __init__(self,arma,desarmado = False):
self.arma = arma
self.desarmado = desarmado
def dispara(self):
print ('Me preparo para disparar con.. ' + self.arma)
self.efectuardisparo()
def efectuardisparo(self):
print ('Se ha disparado ' + self.arma)
def quitarArma(self):
self.desarmado = True
self.arma = 'piedra'
print ('Está desarmado')
class fusilero(soldado):
def __init__(self):
super().__init__(arma = 'fusil')
def efectuardisparo(self):
if not self.desarmado:
print ('Se ha disparado un solo disparo.')
else:
super(fusilero,self).efectuardisparo()
class ametrallador(soldado):
def __init__(self):
super().__init__(arma = 'ametralladora')
def efectuardisparo(self):
if not self.desarmado:
print ('Se ha disparado a rafagas.')
else:
super(ametrallador,self).efectuardisparo()
def main():
escopetero = fusilero()
print (escopetero)
asalto = ametrallador()
escopetero.dispara()
print (asalto)
asalto.dispara()
asalto.quitarArma()
asalto.dispara()
if __name__=='__main__': main()
Y aquí tenéis el código para bajarlo en Gambas:
Saludos
HerenciaSoldado2.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | HerenciaSoldado2.tar.gz | |
Tamaño: | 5.5 KB | |
Descargado: | 27 veces |
HerenciaSoldado2.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | HerenciaSoldado2.tar.gz | |
Tamaño: | 5.5 KB | |
Descargado: | 27 veces |
HerenciaSoldado2.tar.gz | ||
Descripción: | Descargar |
|
Nombre del archivo: | HerenciaSoldado2.tar.gz | |
Tamaño: | 5.5 KB | |
Descargado: | 27 veces |