Skip to content

Commit a5ee6eb

Browse files
authored
Merge pull request mouredev#4975 from avcenal/main
#28 - Python
2 parents 966458d + ba84e30 commit a5ee6eb

File tree

1 file changed

+113
-0
lines changed

1 file changed

+113
-0
lines changed
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
"""
2+
* EJERCICIO:
3+
* Explora el "Principio SOLID de Sustitución de Liskov (Liskov Substitution Principle, LSP)"
4+
* y crea un ejemplo simple donde se muestre su funcionamiento
5+
* de forma correcta e incorrecta.
6+
"""
7+
#LSP incorrecto
8+
class Felines():
9+
def sound(self):
10+
print("roar")
11+
12+
class Cats(Felines):
13+
def sound(self):
14+
raise Exception("Los gatos no pueden rugir")
15+
16+
one_feline = Felines()
17+
one_feline.sound()
18+
one_cat = Cats()
19+
#one_cat.sound() Lanza la excepción
20+
21+
#LSP Correcto
22+
from abc import ABC,abstractmethod
23+
24+
class Feline(ABC):
25+
@abstractmethod
26+
def sound(self):
27+
pass
28+
29+
class Big_Feline(Feline):
30+
def sound(self):
31+
print("roar")
32+
33+
class Small_Feline(Feline):
34+
def sound(self):
35+
print("miau")
36+
37+
class Tiger(Big_Feline):
38+
pass
39+
40+
class Cat(Small_Feline):
41+
pass
42+
43+
my_tiger = Tiger()
44+
my_tiger.sound()
45+
46+
my_cat = Cat()
47+
my_cat.sound()
48+
49+
"""
50+
* DIFICULTAD EXTRA (opcional):
51+
* Crea una jerarquía de vehículos. Todos ellos deben poder acelerar y frenar, así como
52+
* cumplir el LSP.
53+
* Instrucciones:
54+
* 1. Crea la clase Vehículo.
55+
* 2. Añade tres subclases de Vehículo.
56+
* 3. Implementa las operaciones "acelerar" y "frenar" como corresponda.
57+
* 4. Desarrolla un código que compruebe que se cumple el LSP.
58+
"""
59+
class Vehicle(ABC):
60+
def __init__(self,speed = 0):
61+
super().__init__()
62+
self.speed = speed
63+
64+
@abstractmethod
65+
def accelerate(self):
66+
pass
67+
68+
@abstractmethod
69+
def slow_down(self):
70+
pass
71+
72+
class F1_Car(Vehicle):
73+
def accelerate(self,increment):
74+
self.speed += increment + 100
75+
return f"velocidad de {self.speed}"
76+
77+
def slow_down(self,decrement):
78+
self.speed -= decrement + 15
79+
if self.speed <= 0:
80+
self.speed = 0
81+
return f"decelera y va a una velocidad de {self.speed}"
82+
83+
class Regular_Car(Vehicle):
84+
def accelerate(self,increment):
85+
self.speed += increment + 50
86+
return f"velocidad de {self.speed}"
87+
88+
def slow_down(self,decrement):
89+
self.speed -= decrement + 10
90+
if self.speed <= 0:
91+
self.speed = 0
92+
return f"decelera y va a una velocidad de {self.speed}"
93+
94+
class Truck(Vehicle):
95+
def accelerate(self,increment):
96+
self.speed += increment + 35
97+
return f"velocidad de {self.speed}"
98+
99+
def slow_down(self,decrement):
100+
self.speed -= decrement + 5
101+
if self.speed <= 0:
102+
self.speed = 0
103+
return f"decelera y va a una velocidad de {self.speed}"
104+
105+
def show_vehicle(name:str,vehicle:Vehicle):
106+
print(f"El vehículo {name} va a una {vehicle.accelerate(20)} km/h. Después {vehicle.slow_down(15)} km/h")
107+
108+
my_f1 = F1_Car()
109+
show_vehicle(name="McLaren",vehicle=my_f1)
110+
my_car = Regular_Car()
111+
show_vehicle(name="Seat Leon",vehicle=my_car)
112+
my_truck = Truck()
113+
show_vehicle(name="Mac",vehicle=my_truck)

0 commit comments

Comments
 (0)