Skip to content

Commit 07820d6

Browse files
authored
Merge pull request mouredev#7074 from caterinarodriguezdev/29-javascript
#29-javascript
2 parents 0df8431 + 86cbdd9 commit 07820d6

File tree

1 file changed

+159
-0
lines changed

1 file changed

+159
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
/*
2+
* EJERCICIO:
3+
* Explora el "Principio SOLID de Segregación de Interfaces
4+
* (Interface Segregation Principle, ISP)", y crea un ejemplo
5+
* simple donde se muestre su funcionamiento de forma correcta e incorrecta.
6+
*
7+
* DIFICULTAD EXTRA (opcional):
8+
* Crea un gestor de impresoras.
9+
* Requisitos:
10+
* 1. Algunas impresoras sólo imprimen en blanco y negro.
11+
* 2. Otras sólo a color.
12+
* 3. Otras son multifunción, pueden imprimir, escanear y enviar fax.
13+
* Instrucciones:
14+
* 1. Implementa el sistema, con los diferentes tipos de impresoras y funciones.
15+
* 2. Aplica el ISP a la implementación.
16+
* 3. Desarrolla un código que compruebe que se cumple el principio.
17+
*/
18+
19+
// INCORRECTA
20+
21+
class Empleado {
22+
constructor() {
23+
if (this.constructor === Empleado) {
24+
throw new Error('No puedes instanciar una interfaz');
25+
}
26+
}
27+
calcularSalario() {
28+
throw new Error('Debe implementar el método calcular salario')
29+
}
30+
31+
programarReunion() {
32+
throw new Error('Debe implementar el método programar reunión')
33+
}
34+
}
35+
36+
37+
class Obrero extends Empleado {
38+
39+
calcularSalario() {
40+
return 1000;
41+
}
42+
}
43+
44+
const empleado = new Obrero();
45+
console.log(empleado.calcularSalario());
46+
console.log(empleado.programarReunion());
47+
48+
// CORRECTA
49+
class CalculadoraSalario {
50+
calcularSalario() {}
51+
}
52+
53+
class ProgramadorReuniones {
54+
programarReunion(){}
55+
}
56+
57+
class ObreroISP extends CalculadoraSalario {
58+
calcularSalario() {}
59+
}
60+
61+
const empleadoISP = new ObreroISP();
62+
console.log(empleadoISP.calcularSalario());
63+
64+
65+
console.log('---------DIFICULTAD EXTRA-------------');
66+
67+
// * DIFICULTAD EXTRA (opcional):
68+
// * Crea un gestor de impresoras.
69+
// * Requisitos:
70+
// * 1. Algunas impresoras sólo imprimen en blanco y negro.
71+
// * 2. Otras sólo a color.
72+
// * 3. Otras son multifunción, pueden imprimir, escanear y enviar fax.
73+
// * Instrucciones:
74+
// * 1. Implementa el sistema, con los diferentes tipos de impresoras y funciones.
75+
// * 2. Aplica el ISP a la implementación.
76+
// * 3. Desarrolla un código que compruebe que se cumple el principio.
77+
// */
78+
79+
80+
class GestorImpresorasBN {
81+
constructor() {
82+
if (this.constructor === GestorImpresorasBN) {
83+
throw Error('No puede instanciar una interfaz');
84+
}
85+
}
86+
87+
imprimirBN() {
88+
throw Error('Debe implementar imprimirBN')
89+
}
90+
}
91+
92+
class GestorImpresorasColor {
93+
constructor() {
94+
if (this.constructor === GestorImpresorasColor) {
95+
throw Error('No puede instanciar una interfaz');
96+
}
97+
}
98+
99+
imprimirColor() {
100+
throw Error('Debe implementar imprimirColor')
101+
}
102+
}
103+
104+
class GestorImpresorasMulti {
105+
constructor() {
106+
if (this.constructor === GestorImpresorasMulti) {
107+
throw Error('No puede instanciar una interfaz');
108+
}
109+
}
110+
111+
imprimir() {
112+
throw Error('Debe implementar imprimir')
113+
}
114+
115+
escanear() {
116+
throw Error('Debe implementar escanear')
117+
}
118+
119+
enviarFax() {
120+
throw Error('Debe implementar enviarFax')
121+
}
122+
}
123+
124+
class ImpresoraBN extends GestorImpresorasBN {
125+
imprimirBN() {
126+
console.log('imprimiendo en bn');
127+
}
128+
}
129+
130+
class ImpresoraColor extends GestorImpresorasColor {
131+
imprimirColor() {
132+
console.log('imprimiendo en color');
133+
}
134+
}
135+
136+
class ImpresoraMulti extends GestorImpresorasMulti {
137+
imprimir() {
138+
console.log('imprimiendo');
139+
}
140+
141+
escanear() {
142+
console.log('escaneando');
143+
}
144+
145+
enviarFax() {
146+
console.log('enviando fax');
147+
}
148+
}
149+
150+
const impresoraBN = new ImpresoraBN();
151+
impresoraBN.imprimirBN();
152+
153+
const impresoraColor = new ImpresoraColor();
154+
impresoraColor.imprimirColor();
155+
156+
const impresoraMulti = new ImpresoraMulti();
157+
impresoraMulti.imprimir();
158+
impresoraMulti.escanear();
159+
impresoraMulti.enviarFax();

0 commit comments

Comments
 (0)