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