Skip to content

Commit fb3b307

Browse files
committed
#28 - Python
1 parent 05cfec4 commit fb3b307

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed
+122
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
#28 SOLID: PRINCIPIO DE SUSTITUCIÓN DE LISKOV (LSP)
2+
"""
3+
/*
4+
* EJERCICIO:
5+
* Explora el "Principio SOLID de Sustitución de Liskov (Liskov Substitution Principle, LSP)"
6+
* y crea un ejemplo simple donde se muestre su funcionamiento
7+
* de forma correcta e incorrecta.
8+
*
9+
* DIFICULTAD EXTRA (opcional):
10+
* Crea una jerarquía de vehículos. Todos ellos deben poder acelerar y frenar, así como
11+
* cumplir el LSP.
12+
* Instrucciones:
13+
* 1. Crea la clase Vehículo.
14+
* 2. Añade tres subclases de Vehículo.
15+
* 3. Implementa las operaciones "acelerar" y "frenar" como corresponda.
16+
* 4. Desarrolla un código que compruebe que se cumple el LSP.
17+
*/
18+
"""
19+
20+
'''
21+
La L de SOLID alude al apellido de quien lo creó, Barbara Liskov, y dice que “las clases derivadas
22+
deben poder sustituirse por sus clases base”.
23+
'''
24+
25+
#Mal uso
26+
class Ave:
27+
def volar(self):
28+
return "El ave está volando"
29+
30+
class Pinguino(Ave):
31+
def volar(self):
32+
# Los pingüinos no pueden volar, pero al ser una subclase de Ave,
33+
# nos vemos obligados a implementar este método de una forma ilógica.
34+
raise Exception("Los pingüinos no pueden volar")
35+
36+
# Función que espera cualquier ave
37+
def mover_ave(ave: Ave):
38+
return ave.volar()
39+
40+
# Creamos un objeto de la clase Pinguino
41+
pinguino = Pinguino()
42+
43+
# Intentamos volar con el pingüino, pero causa un error
44+
print(mover_ave(pinguino)) # Error: Los pingüinos no pueden volar
45+
46+
#Buen uso
47+
class Ave:
48+
def mover(self):
49+
return "El ave se está moviendo"
50+
51+
class AveVoladora(Ave):
52+
def volar(self):
53+
return "El ave está volando"
54+
55+
class Pinguino(Ave):
56+
def mover(self):
57+
return "El pingüino está nadando"
58+
59+
class Aguila(AveVoladora):
60+
def volar(self):
61+
return "El águila está volando alto"
62+
63+
# Función que puede aceptar cualquier tipo de ave para moverse
64+
def mover_ave(ave: Ave):
65+
return ave.mover()
66+
67+
# Función específica para aves voladoras
68+
def volar_ave(ave: AveVoladora):
69+
return ave.volar()
70+
71+
# Creamos un pingüino y un águila
72+
pinguino = Pinguino()
73+
aguila = Aguila()
74+
75+
# Llamamos a la función mover para ambas aves
76+
print(mover_ave(pinguino)) # Salida: El pingüino está nadando
77+
print(mover_ave(aguila)) # Salida: El ave se está moviendo
78+
79+
# Llamamos a la función volar solo para aves voladoras
80+
print(volar_ave(aguila)) # Salida: El águila está volando alto
81+
82+
#Extra
83+
class Vehiculo:
84+
def acelerar():
85+
return f"El Vehiculo esta Acelerando"
86+
87+
def frenar():
88+
return f"El vehiculo esta Frenando"
89+
90+
class Moto(Vehiculo):
91+
def acelerar():
92+
return f"La Moto esta Acelerando"
93+
94+
def frenar():
95+
return f"La Moto esta Frenando"
96+
97+
class Carro(Vehiculo):
98+
def acelerar():
99+
return f"El Carro esta Acelerando"
100+
101+
def frenar():
102+
return f"El Carro esta Frenando"
103+
104+
class Bus(Vehiculo):
105+
def acelerar():
106+
return f"El Bus esta Acelerando"
107+
108+
def frenar():
109+
return f"El Bus esta Frenando"
110+
111+
moto = Moto
112+
carro = Carro
113+
bus = Bus
114+
115+
print(moto.acelerar())
116+
print(moto.frenar())
117+
118+
print(carro.acelerar())
119+
print(carro.frenar())
120+
121+
print(bus.acelerar())
122+
print(bus.frenar())

0 commit comments

Comments
 (0)