Skip to content

Commit f389174

Browse files
authored
Merge pull request mouredev#4740 from rantamhack/main
#27-python
2 parents 000f28e + e614de4 commit f389174

File tree

1 file changed

+130
-0
lines changed

1 file changed

+130
-0
lines changed
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
2+
3+
print("\n\n=======================================EJERCICIO=======================================\n\n")
4+
5+
"""
6+
* EJERCICIO:
7+
* Explora el "Principio SOLID Abierto-Cerrado (Open-Close Principle, OCP)"
8+
* y crea un ejemplo simple donde se muestre su funcionamiento
9+
* de forma correcta e incorrecta.
10+
"""
11+
12+
from abc import ABC, abstractmethod
13+
14+
class Area(ABC):
15+
def __init__(self, base: float, height: float):
16+
self.base = base
17+
self.height = height
18+
19+
@abstractmethod
20+
def calculate_area(self):
21+
pass
22+
23+
class Triangle(Area):
24+
25+
def calculate_area(self):
26+
result = (self.base * self.height) / 2
27+
return result
28+
29+
class Square(Area):
30+
def __init__(self, side):
31+
self.side = side
32+
super().__init__(side, side)
33+
34+
def calculate_area(self):
35+
result = self.side ** 2
36+
return result
37+
38+
"""
39+
* SI AHORA QUISIERAMOS AÑADIR MAS POLIGONOS A LOS QUE CALCULAR EL AREA NO TENDRIAMOS QUE TOCAR NADA DE LO ESCRITO
40+
* SOLAMENTE AÑADIR LAS NUEVAS SUBCLASES COMO POR EJEMPLO LA SUBCLASE "RECTANGULO"
41+
"""
42+
43+
class Rectangle(Area):
44+
45+
def calculate_area(self):
46+
result = self.base * self.height
47+
return result
48+
49+
50+
my_triangle = Triangle(3 ,5)
51+
print(f"\n[+] El area del triangulo es: {my_triangle.calculate_area()}")
52+
53+
my_square = Square(9)
54+
print(f"\n[+] El area del triangulo es: {my_square.calculate_area()}")
55+
56+
my_rectangle = Rectangle(7, 5)
57+
print(f"\n[+] El area del triangulo es: {my_rectangle.calculate_area()}\n")
58+
59+
print("\n\n=======================================DIFICULTAD EXTRA=======================================\n\n")
60+
61+
62+
"""
63+
* DIFICULTAD EXTRA (opcional):
64+
* Desarrolla una calculadora que necesita realizar diversas operaciones matemáticas.
65+
* Requisitos:
66+
* - Debes diseñar un sistema que permita agregar nuevas operaciones utilizando el OCP.
67+
* Instrucciones:
68+
* 1. Implementa las operaciones de suma, resta, multiplicacion y division.
69+
* 2. Comprueba que el sistema funciona.
70+
* 3. Agrega una quinta operacion para calcular potencias.
71+
* 4. Comprueba que se cumple el OCP.
72+
"""
73+
74+
class Calculator(ABC):
75+
def __init__(self, num1: float, num2: float):
76+
self.num1 = num1
77+
self.num2 = num2
78+
79+
@abstractmethod
80+
def solution(self):
81+
pass
82+
83+
class Add(Calculator):
84+
85+
def solution(self):
86+
return (self.num1 + self.num2)
87+
88+
89+
class Subtract(Calculator):
90+
91+
def solution(self):
92+
return (self.num1 - self.num2)
93+
94+
95+
96+
class Multiply(Calculator):
97+
98+
def solution(self):
99+
return self.num1 * self.num2
100+
101+
102+
class Division(Calculator):
103+
104+
def solution(self):
105+
return self.num1 / self.num2
106+
107+
108+
109+
my_add = Add(5.2, 7)
110+
print(f"\n[+] El resultado de la suma es: {my_add.solution()}")
111+
112+
my_subtract = Subtract(12, 7)
113+
print(f"\n[+] El resultado de la resta es: {my_subtract.solution()}")
114+
115+
my_multiply = Multiply(9, 7)
116+
print(f"\n[+] El resultado de la multiplicacion es: {my_multiply.solution()}")
117+
118+
my_division = Division(12, 2)
119+
print(f"\n[+] El resultado de la division es: {my_division.solution()}")
120+
121+
122+
# Ahora vamos a añadir la operacion que permite hacer potencias
123+
124+
class Pow(Calculator):
125+
126+
def solution(self):
127+
return pow(self.num1, self.num2)
128+
129+
my_pow = Pow(5, 3)
130+
print(f"\n[+] El resultado de la potencia es: {my_pow.solution()}\n")

0 commit comments

Comments
 (0)