Skip to content

Commit a05ef6c

Browse files
authored
Merge pull request mouredev#4821 from bytecodesky/main
#28 - Python
2 parents c67d007 + 3cf943a commit a05ef6c

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
#28 SOLID: PRINCIPIO DE SUSTITUCIÓN DE LISKOV (LSP)
2+
3+
# * EJERCICIO:
4+
# * Explora el "Principio SOLID de Sustitución de Liskov (Liskov Substitution Principle, LSP)"
5+
# * y crea un ejemplo simple donde se muestre su funcionamiento
6+
# * de forma correcta e incorrecta.
7+
8+
#El principio LSP establece que los objetos de un programa deben ser reemplazables por instancias de sus subtipos sin alterar la corrección del programa.
9+
#En otras palabras, si S es un subtipo de T, entonces los objetos de tipo T en un programa pueden ser reemplazados por objetos de tipo S sin alterar el comportamiento del programa.
10+
11+
12+
# Ejemplo de código que viola el principio LSP:
13+
14+
class Bird :
15+
def __init__(self, name):
16+
self.name = name
17+
18+
def fly(self):
19+
print(f"{self.name} is flying")
20+
21+
class Ostrich(Bird):
22+
def fly(self):
23+
raise Exception("Ostriches can't fly")
24+
25+
def make_bird_fly(bird):
26+
bird.fly()
27+
28+
bird = Bird("Bird")
29+
ostrich = Ostrich("Ostrich")
30+
31+
make_bird_fly(bird)
32+
make_bird_fly(ostrich)
33+
#En este ejemplo, el método fly() de la clase Ostrich viola el principio LSP, ya que el método fly() de la clase Bird lanza una excepción en lugar de volar.
34+
#Por lo tanto, el objeto de tipo Ostrich no puede reemplazar al objeto de tipo Bird sin alterar el comportamiento del programa.
35+
36+
# Ejemplo de código que cumple con el principio LSP:
37+
38+
class Bird:
39+
def __init__(self, name):
40+
self.name = name
41+
42+
def fly(self):
43+
print(f"{self.name} is flying")
44+
45+
class Ostrich:
46+
def __init__(self, name):
47+
self.name = name
48+
49+
def fly(self):
50+
print(f"{self.name} can't fly")
51+
52+
def make_bird_fly(bird):
53+
bird.fly()
54+
55+
bird = Bird("Bird")
56+
ostrich = Ostrich("Ostrich")
57+
58+
make_bird_fly(bird)
59+
make_bird_fly(ostrich)
60+
#En este ejemplo, el método fly() de la clase Ostrich no viola el principio LSP, ya que el método fly() de la clase Ostrich simplemente imprime que el avestruz no puede volar.
61+
#Por lo tanto, el objeto de tipo Ostrich puede reemplazar al objeto de tipo Bird sin alterar el comportamiento del programa.
62+
63+
# * DIFICULTAD EXTRA (opcional):
64+
# * Crea una jerarquía de vehículos. Todos ellos deben poder acelerar y frenar, así como
65+
# * cumplir el LSP.
66+
# * Instrucciones:
67+
# * 1. Crea la clase Vehículo.
68+
# * 2. Añade tres subclases de Vehículo.
69+
# * 3. Implementa las operaciones "acelerar" y "frenar" como corresponda.
70+
# * 4. Desarrolla un código que compruebe que se cumple el LSP.
71+
72+
class Vehicle:
73+
def __init__(self, name):
74+
self.name = name
75+
76+
def accelerate(self):
77+
raise NotImplementedError
78+
79+
def brake(self):
80+
raise NotImplementedError
81+
82+
class Car(Vehicle):
83+
def accelerate(self):
84+
print(f"{self.name} is accelerating")
85+
86+
def brake(self):
87+
print(f"{self.name} is braking")
88+
89+
class Bicycle(Vehicle):
90+
def accelerate(self):
91+
print(f"{self.name} is pedaling faster")
92+
93+
def brake(self):
94+
print(f"{self.name} is braking")
95+
96+
class Plane(Vehicle):
97+
def accelerate(self):
98+
print(f"{self.name} is taking off")
99+
100+
def brake(self):
101+
print(f"{self.name} is landing")
102+
103+
def operate_vehicle(vehicle):
104+
vehicle.accelerate()
105+
vehicle.brake()
106+
107+
car = Car("Car")
108+
bicycle = Bicycle("Bicycle")
109+
plane = Plane("Plane")
110+
111+
operate_vehicle(car)
112+
operate_vehicle(bicycle)
113+
operate_vehicle(plane)
114+
115+
#En este ejemplo, la clase Vehicle define los métodos accelerate() y brake() como métodos abstractos que deben ser implementados por las subclases. Las clases Car, Bicycle y Plane implementan estos métodos de acuerdo con el comportamiento esperado de cada vehículo. Por lo tanto, el principio LSP se cumple en este caso, ya que los objetos de las subclases pueden reemplazar a los objetos de la superclase sin alterar el comportamiento del programa.

0 commit comments

Comments
 (0)