1
+ /** #29 - JavaScript -> Jesus Antonio Escamilla */
2
+
3
+ /**
4
+ * El ISP establece que una clase no debe estar obligada a implementar interfaces que no utiliza.
5
+ * En otras palabras, es mejor tener interfaces más pequeñas y específicas que interfaces grandes y generales.
6
+ */
7
+
8
+ //---EJERCIÓ---
9
+ // INCORRECTO
10
+ // Interfaz general
11
+ class IWorker {
12
+ work ( ) {
13
+ throw new Error ( "Method not implemented" ) ;
14
+ }
15
+
16
+ attendMeeting ( ) {
17
+ throw new Error ( "Method not implemented" ) ;
18
+ }
19
+
20
+ writeCode ( ) {
21
+ throw new Error ( "Method not implemented" ) ;
22
+ }
23
+ }
24
+
25
+ // Clase que implementa interfaz general
26
+ class Manager__ extends IWorker {
27
+ work ( ) {
28
+ console . log ( "Manager working on project management" ) ;
29
+ }
30
+
31
+ attendMeeting ( ) {
32
+ console . log ( "Manager attending a meeting" ) ;
33
+ }
34
+
35
+ writeCode ( ) {
36
+ throw new Error ( "Manager does not write code" ) ;
37
+ }
38
+ }
39
+
40
+ class Developer__ extends IWorker {
41
+ work ( ) {
42
+ console . log ( "Developer working on coding" ) ;
43
+ }
44
+
45
+ attendMeeting ( ) {
46
+ throw new Error ( "Developer does not attend meetings" ) ;
47
+ }
48
+
49
+ writeCode ( ) {
50
+ console . log ( "Developer writing code" ) ;
51
+ }
52
+ }
53
+
54
+ // Uso Incorrecto de ISP
55
+ const basicPrinter__ = new Manager__ ( ) ;
56
+ basicPrinter__ . work ( ) ;
57
+ basicPrinter__ . attendMeeting ( ) ;
58
+
59
+ const advancedPrinter = new Developer__ ( ) ;
60
+ advancedPrinter . work ( ) ;
61
+ advancedPrinter . writeCode ( ) ;
62
+
63
+
64
+ // CORRECTO
65
+ // Interfaz general
66
+ class IWork {
67
+ work ( ) {
68
+ throw new Error ( "Method not implemented" ) ;
69
+ }
70
+ }
71
+
72
+ class IAttendMeeting {
73
+ attendMeeting ( ) {
74
+ throw new Error ( "Method not implemented" ) ;
75
+ }
76
+ }
77
+
78
+ class IWriteCode {
79
+ writeCode ( ) {
80
+ throw new Error ( "Method not implemented" ) ;
81
+ }
82
+ }
83
+
84
+ // Clase que implementa interfaz general
85
+ class Manager extends IWork {
86
+ work ( ) {
87
+ console . log ( "Manager working on project management" ) ;
88
+ }
89
+ }
90
+
91
+ class ManagerMeeting extends IAttendMeeting {
92
+ attendMeeting ( ) {
93
+ console . log ( "Manager attending a meeting" ) ;
94
+ }
95
+ }
96
+
97
+ class Developer extends IWriteCode {
98
+ work ( ) {
99
+ console . log ( "Developer working on coding" ) ;
100
+ }
101
+ }
102
+
103
+ class DeveloperCoding extends IWriteCode {
104
+ writeCode ( ) {
105
+ console . log ( "Developer writing code" )
106
+ }
107
+ }
108
+
109
+ // Uso Correcto de ISP
110
+ const manager = new Manager ( ) ;
111
+ manager . work ( ) ;
112
+
113
+ const managerMeeting = new ManagerMeeting ( ) ;
114
+ managerMeeting . attendMeeting ( ) ;
115
+
116
+ const developer = new Developer ( ) ;
117
+ developer . work ( ) ;
118
+
119
+ const developerCoding = new DeveloperCoding ( ) ;
120
+ developerCoding . writeCode ( ) ;
121
+
122
+
123
+
124
+ /**-----DIFICULTAD EXTRA-----*/
125
+
126
+ // Pendiente
127
+
128
+ /**-----DIFICULTAD EXTRA-----*/
0 commit comments