1
+ const readline = require ( 'readline' )
2
+
3
+ const rl = readline . createInterface ( {
4
+ input : process . stdin ,
5
+ output : process . stdout
6
+ } )
7
+
8
+ /*
9
+ * EJERCICIO:
10
+ * Explora el "Principio SOLID Abierto-Cerrado (Open-Close Principle, OCP)"
11
+ * y crea un ejemplo simple donde se muestre su funcionamiento
12
+ * de forma correcta e incorrecta.
13
+ */
14
+
15
+ // Funcionamiento incorrecto
16
+
17
+ /*
18
+ class ShopVehicles {
19
+ saleBus() {
20
+ console.log('Se ha vendido un Bus')
21
+ }
22
+
23
+ saleCar() {
24
+ console.log('Se ha vendido un auto')
25
+ }
26
+ }
27
+ */
28
+
29
+ // Funcionamiento correcto:
30
+
31
+ class ShopVehicles {
32
+ sale ( ) {
33
+ console . log ( 'Se ha vendido un auto' )
34
+ }
35
+ }
36
+
37
+ class saleTruck extends ShopVehicles {
38
+ sale ( ) {
39
+ console . log ( 'Se ha vendido un camión' )
40
+ }
41
+ }
42
+
43
+ class saleBus extends ShopVehicles {
44
+ sale ( ) {
45
+ console . log ( 'Se ha vendido un bus' )
46
+ }
47
+ }
48
+
49
+ const saleTruck1 = new saleTruck ( )
50
+ saleTruck1 . sale ( )
51
+
52
+ const saleBus1 = new saleBus ( )
53
+ saleBus1 . sale ( )
54
+
55
+ /*
56
+ * DIFICULTAD EXTRA (opcional):
57
+ * Desarrolla una calculadora que necesita realizar diversas operaciones matemáticas.
58
+ * Requisitos:
59
+ * - Debes diseñar un sistema que permita agregar nuevas operaciones utilizando el OCP.
60
+ * Instrucciones:
61
+ * 1. Implementa las operaciones de suma, resta, multiplicación y división.
62
+ * 2. Comprueba que el sistema funciona.
63
+ * 3. Agrega una quinta operación para calcular potencias.
64
+ * 4. Comprueba que se cumple el OCP.
65
+ */
66
+
67
+ class Calculator {
68
+ operation ( ) { return }
69
+ }
70
+
71
+ class AdditionOperation extends Calculator {
72
+ operation ( a , b ) {
73
+ return `${ a } + ${ b } = ${ a + b } `
74
+ }
75
+ }
76
+
77
+ class SubtractionOperation extends Calculator {
78
+ operation ( a , b ) {
79
+ return `${ a } - ${ b } = ${ a - b } `
80
+ }
81
+ }
82
+
83
+ class MultiplyOperation extends Calculator {
84
+ operation ( a , b ) {
85
+ return `${ a } * ${ b } = ${ a * b } `
86
+ }
87
+ }
88
+
89
+ class DivideOperation extends Calculator {
90
+ operation ( a , b ) {
91
+ if ( b === 0 ) throw new Error ( 'No se puede dividir por cero' )
92
+ return `${ a } / ${ b } = ${ a / b } `
93
+ }
94
+ }
95
+
96
+ class ExponentiationOperation extends Calculator {
97
+ operation ( a , b ) {
98
+ return `${ a } ** ${ b } = ${ a ** b } `
99
+ }
100
+ }
101
+
102
+ function MenuCalculator ( ) {
103
+ console . log ( '1 - Sumar' )
104
+ console . log ( '2 - Restar' )
105
+ console . log ( '3 - Multiplicar' )
106
+ console . log ( '4 - Dividir' )
107
+ console . log ( '5 - Potencia' )
108
+ console . log ( '0 - Salir' )
109
+
110
+ rl . question ( 'Selección: ' , ( option ) => {
111
+ if ( option == '1' ) {
112
+ rl . question ( 'Ingresa el numero A: ' , ( numberA ) => {
113
+ rl . question ( 'Ingresa el numero B: ' , ( numberB ) => {
114
+ const addition = new AdditionOperation ( )
115
+ console . log ( addition . operation ( parseInt ( numberA ) , parseInt ( numberB ) ) )
116
+ MenuCalculator ( )
117
+ } )
118
+ } )
119
+ } else if ( option == '2' ) {
120
+ rl . question ( 'Ingresa el numero A: ' , ( numberA ) => {
121
+ rl . question ( 'Ingresa el numero B: ' , ( numberB ) => {
122
+ const substraction = new SubtractionOperation ( )
123
+ console . log ( substraction . operation ( parseInt ( numberA ) , parseInt ( numberB ) ) )
124
+ MenuCalculator ( )
125
+ } )
126
+ } )
127
+ } else if ( option == '3' ) {
128
+ rl . question ( 'Ingresa el numero A: ' , ( numberA ) => {
129
+ rl . question ( 'Ingresa el numero B: ' , ( numberB ) => {
130
+ const multiply = new MultiplyOperation ( )
131
+ console . log ( multiply . operation ( parseInt ( numberA ) , parseInt ( numberB ) ) )
132
+ MenuCalculator ( )
133
+ } )
134
+ } )
135
+ } else if ( option == '4' ) {
136
+ rl . question ( 'Ingresa el numero A: ' , ( numberA ) => {
137
+ rl . question ( 'Ingresa el numero B: ' , ( numberB ) => {
138
+ const divide = new DivideOperation ( )
139
+ console . log ( divide . operation ( parseInt ( numberA ) , parseInt ( numberB ) ) )
140
+ MenuCalculator ( )
141
+ } )
142
+ } )
143
+ } else if ( option == '5' ) {
144
+ rl . question ( 'Ingresa el numero A: ' , ( numberA ) => {
145
+ rl . question ( 'Ingresa el numero B: ' , ( numberB ) => {
146
+ const exponentiation = new ExponentiationOperation ( )
147
+ console . log ( exponentiation . operation ( parseInt ( numberA ) , parseInt ( numberB ) ) )
148
+ MenuCalculator ( )
149
+ } )
150
+ } )
151
+ } else if ( option == '0' ) {
152
+ rl . close ( )
153
+ } else {
154
+ console . log ( 'Opción inválida' )
155
+ MenuCalculator ( )
156
+ }
157
+ } )
158
+ }
159
+
160
+ MenuCalculator ( )
0 commit comments