Skip to content

Commit 2f6cb83

Browse files
committed
#28-python
1 parent 580f4a6 commit 2f6cb83

File tree

1 file changed

+148
-0
lines changed

1 file changed

+148
-0
lines changed
+148
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
2+
print("\n\n=======================================EJERCICIO=======================================\n\n")
3+
4+
'''
5+
* EJERCICIO:
6+
* Explora el "Principio SOLID de Sustitucion de Liskov (Liskov Substitution Principle, LSP)"
7+
* y crea un ejemplo simple donde se muestre su funcionamiento
8+
* de forma correcta e incorrecta.
9+
'''
10+
# FORMA CORRECTA
11+
'''
12+
class Bird:
13+
14+
def have_beak(self):
15+
return "Soy un pajaro y mi boca es un pico"
16+
17+
def fly(self):
18+
return "Soy un pajaro y vuelo"
19+
20+
class Hawk(Bird):
21+
pass
22+
23+
class Penguin(Bird):
24+
def fly(self):
25+
raise NotImplementedError("penguins swim not fly")
26+
27+
hawk = Hawk()
28+
penguin = Penguin()
29+
30+
print(hawk.have_beak())
31+
print(hawk.fly())
32+
print(penguin.have_beak())
33+
print(penguin.fly())
34+
'''
35+
# FORMA CORRECTA
36+
37+
from abc import ABC, abstractmethod
38+
39+
class Bird(ABC):
40+
41+
def have_beak(self):
42+
return "Soy un pajaro y mi boca es un pico"
43+
44+
class FlyingBird(Bird):
45+
@abstractmethod
46+
def fly(self):
47+
pass
48+
49+
class NonFlyingBird(Bird):
50+
pass
51+
52+
class Hawk(FlyingBird):
53+
def fly(self):
54+
return "Soy un halcon y vuelo"
55+
56+
class Penguin(NonFlyingBird):
57+
def swim(self):
58+
return "Soy un pingüino y nado, no vuelo"
59+
60+
61+
hawk = Hawk()
62+
penguin = Penguin()
63+
64+
print(hawk.have_beak())
65+
print(hawk.fly())
66+
print(penguin.have_beak())
67+
print(penguin.swim())
68+
69+
70+
71+
72+
73+
print("\n\n=======================================DIFICULTAD EXTRA=======================================\n\n")
74+
75+
'''
76+
* DIFICULTAD EXTRA (opcional):
77+
* Crea una jerarquia de vehiculos. Todos ellos deben poder acelerar y frenar, asi como
78+
* cumplir el LSP.
79+
* Instrucciones:
80+
* 1. Crea la clase Vehiculo.
81+
* 2. Añade tres subclases de Vehiculo.
82+
* 3. Implementa las operaciones "acelerar" y "frenar" como corresponda.
83+
* 4. Desarrolla un codigo que compruebe que se cumple el LSP.
84+
'''
85+
from abc import ABC, abstractmethod
86+
87+
class Vehicle(ABC):
88+
def __init__(self, name):
89+
self.name = name
90+
91+
@abstractmethod
92+
def accelerate(self):
93+
pass
94+
95+
@abstractmethod
96+
def brake(self):
97+
pass
98+
99+
100+
class EngineVehicle(Vehicle):
101+
def have_engine(self):
102+
return f"{self.name} es un vehículo de motor"
103+
104+
@abstractmethod
105+
def accelerate(self):
106+
pass
107+
108+
def brake(self):
109+
return f"{self.name} esta frenando con los discos de freno"
110+
111+
class ElectricMotor(EngineVehicle):
112+
def accelerate(self):
113+
return f"{self.name} esta acelerando con el motor electrico"
114+
115+
class GasMotor(EngineVehicle):
116+
def accelerate(self):
117+
return f"{self.name} esta acelerando con el motor de gasoil"
118+
119+
class NonEngineVehicle(Vehicle):
120+
def no_engine(self):
121+
return f"{self.name} es un vehiculo sin motor"
122+
123+
def accelerate(self):
124+
return f"{self.name} esta acelerando con los pedales"
125+
126+
def brake(self):
127+
return f"{self.name} esta frenando con las zapatas"
128+
129+
class Bicycle(NonEngineVehicle):
130+
pass
131+
132+
133+
camion = GasMotor("Camion")
134+
coche = ElectricMotor("Coche")
135+
bici = Bicycle("Bicicleta")
136+
137+
138+
print(camion.have_engine())
139+
print(camion.accelerate())
140+
print(camion.brake())
141+
142+
print(coche.have_engine())
143+
print(coche.accelerate())
144+
print(coche.brake())
145+
146+
print(bici.no_engine())
147+
print(bici.accelerate())
148+
print(bici.brake())

0 commit comments

Comments
 (0)