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