Skip to content

Commit 5d2da70

Browse files
authored
Merge pull request #8965 from mhayhem/main
#27-Python
2 parents d0f9cf1 + 58cc494 commit 5d2da70

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# @Author daniel Grande (Mhayhem)
2+
3+
# EJERCICIO:
4+
# Explora el "Principio SOLID Abierto-Cerrado (Open-Close Principle, OCP)"
5+
# y crea un ejemplo simple donde se muestre su funcionamiento
6+
# de forma correcta e incorrecta.
7+
8+
# INCORRECTO
9+
class CalculateArea:
10+
def calculate_area(self, shape: str, **kwargs):
11+
if shape == "circulo":
12+
return 3.14 * kwargs['radio'] ** 2
13+
elif shape == "cuadrado":
14+
return kwargs['width'] * kwargs['height']
15+
16+
""" para añadir triangulo tendriamos que modificar la clase"""
17+
18+
19+
20+
# CORRECTO
21+
22+
class GeometricShape:
23+
def calculate_area(self):
24+
raise NotImplementedError("Debes inplementar calculate_area")
25+
26+
class Circle(GeometricShape):
27+
def __init__(self, radio: float):
28+
self.radio = radio
29+
30+
def calculate_area(self) -> float:
31+
return 3.14 * self.radio ** 2
32+
33+
class Square(GeometricShape):
34+
def __init__(self, width: float, height: float):
35+
self.width = width
36+
self.height = height
37+
38+
def calculate_area(self) -> float:
39+
return self.width * self.height
40+
41+
""" ahora si queremos incorporar el triangulo solo debemos crear otra clase """
42+
43+
class Triangle(GeometricShape):
44+
def __init__(self, base: float, height: float):
45+
self.base = base
46+
self.height = height
47+
48+
def calculate_area(self) -> float:
49+
return (self.base * self.height) / 2
50+
51+
52+
53+
# DIFICULTAD EXTRA (opcional):
54+
# Desarrolla una calculadora que necesita realizar diversas operaciones matemáticas.
55+
# Requisitos:
56+
# - Debes diseñar un sistema que permita agregar nuevas operaciones utilizando el OCP.
57+
# Instrucciones:
58+
# 1. Implementa las operaciones de suma, resta, multiplicación y división.
59+
# 2. Comprueba que el sistema funciona.
60+
# 3. Agrega una quinta operación para calcular potencias.
61+
# 4. Comprueba que se cumple el OCP.
62+
63+
64+
class Calculator:
65+
def __init__(self, n1: float, n2: float):
66+
self.n1 = n1
67+
self.n2 = n2
68+
69+
def operation(self):
70+
pass
71+
72+
class Add(Calculator):
73+
def operation(self):
74+
return self.n1 + self.n2
75+
76+
class Subtract(Calculator):
77+
def operation(self):
78+
return self.n1 - self.n2
79+
80+
class Multiply(Calculator):
81+
def operation(self):
82+
return self.n1 * self.n2
83+
84+
class Division(Calculator):
85+
def operation(self):
86+
if self.n2 == 0:
87+
raise ValueError("No se puede dividir por cero")
88+
return self.n1 / self.n2
89+
90+
class Raised(Calculator):
91+
def operation(self):
92+
return self.n1 ** self.n2
93+
94+
95+
add = Add(3, 5)
96+
print(add.operation())

0 commit comments

Comments
 (0)