Skip to content

Commit 802697b

Browse files
authored
Merge pull request #4827 from Nikorasu-d/main
#28 - Python
2 parents b0bf11d + 178d50d commit 802697b

File tree

1 file changed

+243
-0
lines changed

1 file changed

+243
-0
lines changed
Lines changed: 243 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,243 @@
1+
from abc import ABC, abstractmethod
2+
3+
"""
4+
Principio de sustitucion de Liskov
5+
6+
Cada clase que hereda de otra puede usarse como su padre sin necesidad de conocer las diferencias entre ellas.
7+
8+
"""
9+
10+
11+
# El siguiente ejemplo es un ejemplo erroneo donde no se cumple el principio
12+
13+
class ProductoWrong(ABC):
14+
15+
def __init__(self, marca):
16+
self.marca = marca
17+
18+
@abstractmethod
19+
def comer(self):
20+
print("Comiendo: " + self.marca)
21+
22+
class PolloAsadoWrong(ProductoWrong):
23+
24+
def __init__(self, marca, calories):
25+
self.calories = calories
26+
self.marca = marca
27+
28+
def comer(self):
29+
return super().comer()
30+
31+
class LejiaWrong(ProductoWrong):
32+
def __init__(self, marca, liters):
33+
self.liters = liters
34+
self.marca = marca
35+
36+
def comer(self):
37+
raise ValueError("No puedes comer Lejia")
38+
39+
40+
# A continuacion se deja expreso una version del mismo codigo pero que cumple el principio de sustitucion de liskov
41+
42+
class Producto(ABC):
43+
44+
def __init__(self, name ,marca, price, categoria):
45+
self.name = name
46+
self.marca = marca
47+
self.price = price
48+
self.categoria =categoria
49+
50+
@abstractmethod
51+
def comprar(self):
52+
print (f"Comprando {self.name} \nMarca: {self.marca} \nCategoria {self.categoria} \nPrecio ${self.price}")
53+
pass
54+
55+
56+
class ProductoDeAseo(Producto):
57+
58+
def __init__(self, name ,marca, price, categoria, porcentajeAccionDesinfectante):
59+
super().__init__(name ,marca, price, categoria)
60+
self.porcentajeAccionDesinfectante = porcentajeAccionDesinfectante
61+
62+
def comprar (self):
63+
super().comprar()
64+
print(f"Accion desinfectante al %{self.porcentajeAccionDesinfectante}")
65+
66+
def asear (self):
67+
print(f"Aseando con {self.name} al %{self.porcentajeAccionDesinfectante}")
68+
69+
class Comida(Producto):
70+
71+
def __init__(self, name ,marca, price, categoria, calories):
72+
super().__init__(name ,marca, price, categoria)
73+
self.calories = calories
74+
75+
def comprar(self):
76+
super().comprar()
77+
print(f"Calorias por porcion: {self.calories}\n")
78+
79+
def comer(self):
80+
print(f"Comiendo {self.name} que aporta {self.calories} calorias por porción")
81+
82+
83+
polloAsado = Comida("Pollo Asado 1 Kilo","Ariztia",5000,"Platos Preparados","800 Calorias")
84+
pure = Comida("Pure Rustico con Bistec","Genial",3490,"Platos Preparados","600 Calorias")
85+
abrillantadorPisoFlotante = ProductoDeAseo("Abrillantador de Piso Flotante","Brillantina",3200,"Pisos", 0)
86+
87+
"""
88+
print("\n")
89+
polloAsado.comprar()
90+
print("\n")
91+
pure.comprar()
92+
print("\n")
93+
abrillantadorPisoFlotante.comprar()
94+
95+
print("\n")
96+
polloAsado.comer()
97+
print("\n")
98+
abrillantadorPisoFlotante.asear()
99+
print("\n")
100+
pure.comer()
101+
"""
102+
103+
104+
105+
106+
"""
107+
Ejercicio Extra:
108+
109+
Crea una jerarquía de vehículos. Todos ellos deben poder acelerar y frenar, así como
110+
* cumplir el LSP.
111+
* Instrucciones:
112+
* 1. Crea la clase Vehículo.
113+
* 2. Añade tres subclases de Vehículo.
114+
* 3. Implementa las operaciones "acelerar" y "frenar" como corresponda.
115+
* 4. Desarrolla un código que compruebe que se cumple el LSP.
116+
117+
"""
118+
119+
class Vehiculo:
120+
def __init__(self, name, marca, category):
121+
self.name = name
122+
self.marca = marca
123+
self.category= category
124+
125+
def frenar(self):
126+
print (f"Frenando: {self.name}")
127+
pass
128+
129+
def acelerar(self):
130+
print(f"Acelerando: {self.name} ")
131+
pass
132+
133+
134+
135+
class VehiculoManual(Vehiculo):
136+
137+
def __init__(self, name, marca, category, maxWeight, minimumAge):
138+
super().__init__(name, marca, category)
139+
self.maxWeight = maxWeight
140+
self.minimumAge = minimumAge
141+
142+
def acelerar(self):
143+
print("Moviendo los pies muy rapido")
144+
super().acelerar()
145+
146+
def frenar(self):
147+
print("Dejando de Acelerar y tratar de poner los pies en el piso")
148+
super().frenar()
149+
150+
def subirAlVehiculo(self, weight, age):
151+
if(weight >= self.maxWeight):
152+
print("Atencion el vehiculo lleva mucho peso!")
153+
if(age < self.minimumAge):
154+
print(f"Eres muy pequeño para este Vehiculo")
155+
elif(age >= self.minimumAge and weight < self.maxWeight):
156+
print(f"Eres adecuado para este vehiculo, siga movilizandose! :)")
157+
158+
159+
class VehiculoACombustion(Vehiculo):
160+
161+
def __init__(self, name, marca, category, cilinders, fuelType):
162+
super().__init__(name, marca, category)
163+
self.cilinders = cilinders
164+
self.fuel = fuelType
165+
166+
def acelerar(self):
167+
print("Pisando el Acelerador!")
168+
self.subirMarchas()
169+
super().acelerar()
170+
171+
def frenar(self):
172+
print("Presionar el Pedal de freno y Lentamente el Embrague")
173+
self.bajarMarchas()
174+
super().frenar()
175+
176+
def subirMarchas(self):
177+
print("Subiendo Marchas")
178+
179+
def bajarMarchas(self):
180+
print("Bajando Marchas")
181+
182+
183+
184+
class VehiculoElectrico(Vehiculo):
185+
186+
def __init__(self, name, marca, category, electricMotorsQuantity, fastCharge):
187+
super().__init__(name, marca, category)
188+
self.electricMotorsQuantity = electricMotorsQuantity
189+
self.fastCharge = fastCharge
190+
191+
def acelerar(self):
192+
print("Pisando el Acelerador de forma Cool!")
193+
super().acelerar()
194+
195+
def frenar(self):
196+
print("Presionando el Freno igual de Cool!")
197+
super().frenar()
198+
199+
def cargarEnElPoste(self):
200+
print("Cargando el Vehiculo electrico de una forma muy Cool!")
201+
if(self.fastCharge): print("Wow!, tenemos Fast Charging!!!")
202+
203+
204+
205+
bicicleta = VehiculoManual("Bicicleta BMX","Oddysey","Deporte Extremo", 80, 15)
206+
skate = VehiculoManual("Skate","Plan B","Deporte Extremo", 80, 5)
207+
208+
motocicleta = VehiculoACombustion("Motocicleta", "Honda", "City", 1, "Gasolina" )
209+
auto = VehiculoACombustion("Skyline", "Nissan", "Sportcar", 8, "Gasolina")
210+
211+
tesla = VehiculoElectrico("Model S","Tesla","Cool Electric Car", 4, True)
212+
213+
print("Bicicleta BMX")
214+
bicicleta.subirAlVehiculo(90,13)
215+
bicicleta.acelerar()
216+
bicicleta.frenar()
217+
218+
print("\nSkate PlanB")
219+
skate.subirAlVehiculo(75, 15)
220+
skate.acelerar()
221+
skate.frenar()
222+
223+
print("\nMotocicleta Honda")
224+
motocicleta.acelerar()
225+
motocicleta.frenar()
226+
print("\nNissan Skyline")
227+
auto.acelerar()
228+
auto.frenar()
229+
230+
231+
print("\nTesla Model S")
232+
tesla.cargarEnElPoste()
233+
tesla.acelerar()
234+
tesla.frenar()
235+
236+
237+
238+
239+
240+
241+
242+
243+

0 commit comments

Comments
 (0)