Skip to content

Commit c7de20b

Browse files
authored
Merge pull request #8122 from raynerpv2022/main
#28- Python
2 parents 8299413 + 305bf2d commit c7de20b

File tree

2 files changed

+306
-0
lines changed

2 files changed

+306
-0
lines changed
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
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+
9+
10+
class Figura:
11+
def __init__(self ):
12+
pass
13+
14+
15+
def Area(self):
16+
pass
17+
18+
19+
20+
class Rectangle(Figura):
21+
def __init__(self, x, y):
22+
if x<= 0 and y <= 0:
23+
raise ValueError("Valores deben ser mayores q que 0")
24+
self.x = x
25+
self.y = y
26+
27+
28+
29+
30+
def Area(self):
31+
32+
return self.x*self.y
33+
34+
35+
36+
37+
class Square(Figura):
38+
def __init__(self, x):
39+
if x <= 0 :
40+
raise ValueError("Valores deben ser mayoresq que 0")
41+
self.x = x
42+
43+
44+
def Area(self):
45+
return self.x ** 2
46+
47+
48+
class Circle(Figura):
49+
def __init__(self, r):
50+
if r <= 0 :
51+
raise ValueError("Valores deben ser mayores q que 0")
52+
self.r = r
53+
54+
def Area(self):
55+
return 3.14*self.r ** 2
56+
57+
58+
59+
def Calcular_Area(f: Figura):
60+
print(f.Area())
61+
62+
R = Rectangle(12,14)
63+
S = Square(7)
64+
65+
C = Circle(10)
66+
67+
68+
69+
70+
Figurillas = [R,S,C]
71+
for i in Figurillas:
72+
Calcular_Area(i)
73+
74+
75+
# * DIFICULTAD EXTRA (opcional):
76+
# * Crea una jerarquía de vehículos. Todos ellos deben poder acelerar y frenar, así como
77+
# * cumplir el LSP.
78+
# * Instrucciones:
79+
# * 1. Crea la clase Vehículo.
80+
# * 2. Añade tres subclases de Vehículo.
81+
# * 3. Implementa las operaciones "acelerar" y "frenar" como corresponda.
82+
# * 4. Desarrolla un código que compruebe que se cumple el LSP.
83+
# */
84+
85+
class Vehiculo:
86+
def __init__(self, speed = 0):
87+
self.speed = speed
88+
89+
def acelerar(self, i):
90+
self.speed += i
91+
92+
def frenar(self, d):
93+
self.speed -= d
94+
if self.speed <= 0 :
95+
self.speed = 0
96+
97+
98+
99+
class carricoche(Vehiculo):
100+
def __init__(self, speed=0):
101+
super().__init__(speed)
102+
103+
def acelerar(self,i):
104+
super().acelerar(i)
105+
return f" Carricoche ACELERAR Velocidad {self.speed}"
106+
107+
def frenar(self,d):
108+
super().frenar(d)
109+
return f" Carricoche FRENO Velocidad {self.speed}"
110+
111+
112+
class riquimbili(Vehiculo):
113+
def __init__(self, speed=0):
114+
super().__init__(speed)
115+
116+
def acelerar(self, i):
117+
super().acelerar(i)
118+
return f" Rikimbili ACELERAR Velocidad {self.speed}"
119+
120+
def frenar(self,d):
121+
super().frenar(d)
122+
return f" Rikimbili FRENO Velocidad {self.speed}"
123+
124+
C = carricoche()
125+
R = riquimbili()
126+
V = [C,R]
127+
128+
def test_LSP(v: Vehiculo):
129+
print(v.acelerar(100))
130+
print(v.acelerar(12))
131+
print(v.acelerar(1))
132+
print(v.acelerar(45))
133+
print(v.frenar(34))
134+
135+
136+
137+
print("EXTRA")
138+
139+
140+
test_LSP(C)
141+
test_LSP(R )
142+
test_LSP(C )
143+
test_LSP(C )
144+
test_LSP(R )
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
# /*
2+
# * EJERCICIO:
3+
# * Explora el "Principio SOLID de Segregación de Interfaces (Interface Segregation Principle, ISP)"
4+
# * y crea un ejemplo simple donde se muestre su funcionamiento de forma correcta e incorrecta.
5+
# *
6+
7+
8+
9+
# Viola el principio de segregacion ..
10+
from abc import ABC,abstractmethod
11+
12+
class Worker(ABC):
13+
@abstractmethod
14+
def sleep(self):
15+
pass
16+
17+
@abstractmethod
18+
def work(self):
19+
pass
20+
21+
@abstractmethod
22+
def eat(self):
23+
pass
24+
25+
class Robot(Worker):
26+
def work(self):
27+
print("Robot is working...")
28+
29+
def sleep(self):
30+
pass
31+
32+
def eat(self):
33+
pass
34+
35+
class Human (Worker):
36+
def sleep(self):
37+
print("Human is sleeping...")
38+
def work(self):
39+
print("Human is working...")
40+
def eat(self):
41+
print("Human is eating..")
42+
43+
print("Whitout iSP")
44+
R = Robot()
45+
R.work()
46+
H = Human()
47+
H.work()
48+
H.eat()
49+
H.sleep()
50+
51+
# aplicando principio de segregacion
52+
53+
class WorkInterface(ABC):
54+
@abstractmethod
55+
def work(self):
56+
pass
57+
58+
class EatINterface(ABC):
59+
@abstractmethod
60+
def eat(self):
61+
pass
62+
63+
class SleepInterface(ABC):
64+
@abstractmethod
65+
def sleep(self):
66+
pass
67+
68+
class Human(WorkInterface,SleepInterface,EatINterface):
69+
70+
def work(self):
71+
print("HUman is working...")
72+
73+
def sleep(self):
74+
print("HUman is sleeping")
75+
76+
def eat(self):
77+
print("Human is eating")
78+
79+
class Robot(WorkInterface):
80+
def work(self):
81+
print("Robot is workiing...")
82+
83+
84+
print("ISP")
85+
Ro = Robot()
86+
Ro.work()
87+
Hu = Human()
88+
Hu.sleep()
89+
Hu.work()
90+
Hu.eat()
91+
92+
93+
# EXTRA
94+
95+
# * DIFICULTAD EXTRA (opcional):
96+
# * Crea un gestor de impresoras.
97+
# * Requisitos:
98+
# * 1. Algunas impresoras sólo imprimen en blanco y negro.
99+
# * 2. Otras sólo a color.
100+
# * 3. Otras son multifunción, pueden imprimir, escanear y enviar fax.
101+
# * Instrucciones:
102+
# * 1. Implementa el sistema, con los diferentes tipos de impresoras y funciones.
103+
# * 2. Aplica el ISP a la implementación.
104+
# * 3. Desarrolla un código que compruebe que se cumple el principio.
105+
# */
106+
107+
108+
class Scaninterface(ABC):
109+
@abstractmethod
110+
def Scan(self):
111+
pass
112+
113+
class FAXinterface(ABC):
114+
@abstractmethod
115+
def Fax(self):
116+
pass
117+
118+
class PrintetInterface(ABC):
119+
@abstractmethod
120+
def Print(self):
121+
pass
122+
123+
124+
class ColorPrintInterface(ABC):
125+
@abstractmethod
126+
def Print_color(self):
127+
pass
128+
129+
class Printer (PrintetInterface):
130+
def Print(self):
131+
print("IMpresora solo imprime white and black")
132+
133+
134+
class PrinterColor(ColorPrintInterface):
135+
def Print_color(self):
136+
print("Impresora a Color...")
137+
138+
class MultiFunction(PrintetInterface,ColorPrintInterface,Scaninterface,FAXinterface):
139+
def Print(self):
140+
print("Multifuncion Printing white and Black...")
141+
142+
def Print_color(self):
143+
print("Multifuncion Printing in color...")
144+
145+
146+
def Scan(self):
147+
print("Mutifunction Scanning...")
148+
149+
def Fax(self):
150+
print("MultiFunction Faxing...")
151+
print("PRINTER")
152+
153+
printer_wb = Printer()
154+
printer_wb.Print()
155+
printer_c = PrinterColor()
156+
printer_c.Print_color()
157+
158+
multi = MultiFunction()
159+
multi.Print()
160+
multi.Print_color()
161+
multi.Scan()
162+
multi.Fax()

0 commit comments

Comments
 (0)