forked from mouredev/roadmap-retos-programacion
-
Notifications
You must be signed in to change notification settings - Fork 0
/
mouredev.py
159 lines (97 loc) · 2.67 KB
/
mouredev.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
"""
Ejercicio
"""
from abc import ABC, abstractmethod
# Sin ISP
class WorkerInterface(ABC):
@abstractmethod
def work(self):
pass
@abstractmethod
def eat(self):
pass
class Human(WorkerInterface):
def work(self):
print("Trabajando")
def eat(self):
print("Comiendo")
class Robot(WorkerInterface):
def work(self):
print("Trabajando")
def eat(self):
# Los robots no comen
pass
human = Human()
human.work()
human.eat()
robot = Robot()
robot.work()
robot.eat() # error
# Con ISP
class WorkInterface(ABC):
@abstractmethod
def work(self):
pass
class EatInterface(ABC):
@abstractmethod
def eat(self):
pass
class Human(WorkInterface, EatInterface):
def work(self):
print("Trabajando")
def eat(self):
print("Comiendo")
class Robot(WorkInterface):
def work(self):
print("Trabajando")
human = Human()
human.work()
human.eat()
robot = Robot()
robot.work()
"""
Extra
"""
class PrinterInterface(ABC):
@abstractmethod
def print(self, document: str):
pass
class ColorPrinterInterface(ABC):
@abstractmethod
def print_color(self, document: str):
pass
class ScannerInterface(ABC):
@abstractmethod
def scan(self, document: str) -> str:
pass
class FaxInterface(ABC):
@abstractmethod
def send_fax(self, document: str):
pass
class Printer(PrinterInterface):
def print(self, document: str):
print(f"Imprimiendo en blanco y negro el documento {document}.")
class ColorPrinter(ColorPrinterInterface):
def print_color(self, document: str):
print(f"Imprimiendo a color el documento {document}.")
class MultifunctionPrinter(PrinterInterface, ColorPrinterInterface, ScannerInterface, FaxInterface):
def print(self, document: str):
print(f"Imprimiendo en blanco y negro el documento {document}.")
def print_color(self, document: str):
print(f"Imprimiendo a color el documento {document}.")
def scan(self, document: str) -> str:
print(f"Escaneando el documento {document}.")
return f"Documento {document} escaneado."
def send_fax(self, document: str):
print(f"Enviando por fax el documento {document}.")
def test_printers():
printer = Printer()
color_printer = ColorPrinter()
multifunction_printer = MultifunctionPrinter()
printer.print("doc.pdf")
color_printer.print_color("doc.pdf")
multifunction_printer.print("doc.pdf")
multifunction_printer.print_color("doc.pdf")
multifunction_printer.scan("doc.pdf")
multifunction_printer.send_fax("doc.pdf")
test_printers()