Skip to content

Commit bd310f2

Browse files
authored
Merge pull request mouredev#6944 from victor-Casta/[email protected]
#27 - JavaScript
2 parents 6c3885c + 7309e00 commit bd310f2

File tree

1 file changed

+160
-0
lines changed

1 file changed

+160
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
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

Comments
 (0)