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