@icarusmx/creta 0.10.0 → 0.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/creta.js +30 -0
- package/lessons/lesson1-system-decomposition.js +188 -165
- package/package.json +1 -1
package/bin/creta.js
CHANGED
|
@@ -817,6 +817,20 @@ async function startEnunciadosSelectorInteractive() {
|
|
|
817
817
|
console.log("\n🚀 ¡Lección disponible! Iniciando sesión de estudio dirigida...")
|
|
818
818
|
await new Promise(resolve => setTimeout(resolve, 1500)) // Brief pause
|
|
819
819
|
|
|
820
|
+
try {
|
|
821
|
+
const lesson1 = new Lesson1SystemDecomposition()
|
|
822
|
+
await lesson1.start()
|
|
823
|
+
} catch (error) {
|
|
824
|
+
console.error("\n❌ Error al ejecutar la lección:", error.message)
|
|
825
|
+
console.log("\n🚀 Próximamente:")
|
|
826
|
+
console.log("- Sesiones de estudio dirigidas basadas en este enunciado")
|
|
827
|
+
console.log("- Ejercicios prácticos que ilustren el concepto")
|
|
828
|
+
console.log("- Proyectos específicos para internalizar la idea")
|
|
829
|
+
}
|
|
830
|
+
} else if (enunciadoSeleccionado.id === 1) {
|
|
831
|
+
console.log("\n🚀 ¡Lección disponible! Iniciando sesión de estudio dirigida...")
|
|
832
|
+
await new Promise(resolve => setTimeout(resolve, 1500)) // Brief pause
|
|
833
|
+
|
|
820
834
|
try {
|
|
821
835
|
const lesson1 = new Lesson1SystemDecomposition()
|
|
822
836
|
await lesson1.start()
|
|
@@ -915,6 +929,22 @@ async function startEnunciadosSelectorFallback() {
|
|
|
915
929
|
rl.close()
|
|
916
930
|
await new Promise(resolve => setTimeout(resolve, 1500)) // Brief pause
|
|
917
931
|
|
|
932
|
+
try {
|
|
933
|
+
const lesson1 = new Lesson1SystemDecomposition()
|
|
934
|
+
await lesson1.start()
|
|
935
|
+
} catch (error) {
|
|
936
|
+
console.error("\n❌ Error al ejecutar la lección:", error.message)
|
|
937
|
+
console.log("\n🚀 Próximamente:")
|
|
938
|
+
console.log("- Sesiones de estudio dirigidas basadas en este enunciado")
|
|
939
|
+
console.log("- Ejercicios prácticos que ilustren el concepto")
|
|
940
|
+
console.log("- Proyectos específicos para internalizar la idea")
|
|
941
|
+
}
|
|
942
|
+
return
|
|
943
|
+
} else if (enunciadoSeleccionado.id === 1) {
|
|
944
|
+
console.log("\n🚀 ¡Lección disponible! Iniciando sesión de estudio dirigida...")
|
|
945
|
+
rl.close()
|
|
946
|
+
await new Promise(resolve => setTimeout(resolve, 1500)) // Brief pause
|
|
947
|
+
|
|
918
948
|
try {
|
|
919
949
|
const lesson1 = new Lesson1SystemDecomposition()
|
|
920
950
|
await lesson1.start()
|
|
@@ -14,16 +14,11 @@ export class Lesson1SystemDecomposition {
|
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
async start() {
|
|
17
|
-
console.log("
|
|
17
|
+
console.log("LECCIÓN 1: Descomposición de Sistemas")
|
|
18
18
|
console.log("=" .repeat(50))
|
|
19
|
-
console.log("
|
|
20
|
-
console.log("\n💡 ¿Por qué es la parte difícil?")
|
|
21
|
-
console.log("- Pasar de una idea abstracta a objetos concretos")
|
|
22
|
-
console.log("- Decidir dónde están los límites entre objetos")
|
|
23
|
-
console.log("- Definir cómo estos objetos van a interactuar")
|
|
24
|
-
console.log("- Balancear teoría y práctica en el diseño")
|
|
19
|
+
console.log("Concepto: La parte difícil del diseño orientado a objetos es descomponer un sistema como un conjunto de objetos que interactúan entre sí.")
|
|
25
20
|
|
|
26
|
-
await this.waitForEnter("\nPresiona Enter para comenzar
|
|
21
|
+
await this.waitForEnter("\nPresiona Enter para comenzar...")
|
|
27
22
|
|
|
28
23
|
await this.practicalExercise()
|
|
29
24
|
await this.conclusion()
|
|
@@ -33,176 +28,203 @@ export class Lesson1SystemDecomposition {
|
|
|
33
28
|
|
|
34
29
|
async practicalExercise() {
|
|
35
30
|
console.clear()
|
|
36
|
-
console.log("
|
|
37
|
-
console.log("=" .repeat(50))
|
|
38
|
-
console.log("🎯 Objetivo: Entender dos definiciones de sistema y su descomposición")
|
|
39
|
-
console.log("\nComenzaremos con dos definiciones de sistema y posteriormente")
|
|
31
|
+
console.log("Comenzaremos con dos definiciones de sistema y posteriormente")
|
|
40
32
|
console.log("ejemplificaremos la descomposición en objetos.")
|
|
41
33
|
|
|
42
|
-
await this.waitForEnter("\nPresiona Enter para
|
|
34
|
+
await this.waitForEnter("\nPresiona Enter para continuar...")
|
|
43
35
|
|
|
44
36
|
await this.step1_SystemDefinitions()
|
|
45
37
|
await this.step2_ApplyDefinitions()
|
|
46
|
-
await this.
|
|
47
|
-
await this.step4_ObjectIdentification()
|
|
38
|
+
await this.step3_ObjectIdentification()
|
|
48
39
|
}
|
|
49
40
|
|
|
50
41
|
async step1_SystemDefinitions() {
|
|
51
42
|
console.clear()
|
|
52
|
-
console.log("
|
|
53
|
-
console.log("
|
|
54
|
-
console.log("Antes de descomponer, debemos entender qué ES un sistema:")
|
|
43
|
+
console.log("DEFINICIÓN 1:")
|
|
44
|
+
console.log("El sistema es una totalidad deductiva de discurso")
|
|
55
45
|
|
|
56
|
-
console.log("\
|
|
57
|
-
console.log("
|
|
58
|
-
console.log("")
|
|
59
|
-
console.log("• Enfoque: Estructura lógica y coherencia conceptual")
|
|
60
|
-
console.log("• Pregunta clave: ¿Qué reglas gobiernan este dominio?")
|
|
61
|
-
console.log("• Ejemplo: Las leyes matemáticas que definen la geometría")
|
|
46
|
+
console.log("\nDEFINICIÓN 2:")
|
|
47
|
+
console.log("El sistema es un conjunto de cosas que relacionadas")
|
|
48
|
+
console.log("entre sí ordenadamente contribuyen a un determinado propósito")
|
|
62
49
|
|
|
63
|
-
|
|
64
|
-
console.log("\"El sistema es un conjunto de cosas que relacionadas")
|
|
65
|
-
console.log("entre sí ordenadamente contribuyen a un determinado propósito\"")
|
|
66
|
-
console.log("")
|
|
67
|
-
console.log("• Enfoque: Componentes colaborando hacia un objetivo")
|
|
68
|
-
console.log("• Pregunta clave: ¿Qué partes trabajan juntas para qué fin?")
|
|
69
|
-
console.log("• Ejemplo: Motor, ruedas, frenos trabajando para transportar")
|
|
70
|
-
|
|
71
|
-
await this.waitForEnter("\n💭 ¿Ves cómo ambas son válidas pero muy diferentes? Presiona Enter para aplicarlas...")
|
|
50
|
+
await this.waitForEnter("\nPresiona Enter para ver la biblioteca digital...")
|
|
72
51
|
}
|
|
73
52
|
|
|
74
53
|
async step2_ApplyDefinitions() {
|
|
75
54
|
console.clear()
|
|
76
|
-
console.log("
|
|
77
|
-
console.log("=" .repeat(
|
|
78
|
-
console.log("Vamos a analizar una \"Biblioteca Digital\" desde ambos enfoques:")
|
|
55
|
+
console.log("🏛️ EJEMPLO: Biblioteca Digital")
|
|
56
|
+
console.log("=" .repeat(40))
|
|
79
57
|
|
|
80
|
-
console.log("\n
|
|
81
|
-
console.log("
|
|
82
|
-
|
|
83
|
-
console.log("• Un libro puede estar disponible o prestado")
|
|
84
|
-
console.log("• Un usuario puede tener máximo N libros prestados")
|
|
85
|
-
console.log("• Un préstamo tiene fecha de inicio y vencimiento")
|
|
86
|
-
console.log("• Solo usuarios registrados pueden solicitar préstamos")
|
|
87
|
-
console.log("• Un libro prestado no puede prestarse a otro usuario")
|
|
88
|
-
console.log("• Los préstamos vencidos generan multas")
|
|
58
|
+
console.log("\n📚 DEFINICIÓN 1 - Totalidad deductiva de discurso:")
|
|
59
|
+
console.log("Partiendo de 'Biblioteca Digital', ¿qué se deduce naturalmente?")
|
|
60
|
+
await this.waitForEnter("\nPresiona Enter para ver la primera deducción...")
|
|
89
61
|
|
|
90
|
-
|
|
62
|
+
console.log("\n🔍 Primera deducción:")
|
|
63
|
+
console.log("• De 'Biblioteca' → contiene LIBROS")
|
|
64
|
+
console.log("• De 'Digital' → acceso remoto por USUARIOS")
|
|
91
65
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
console.log("")
|
|
95
|
-
console.log("•
|
|
96
|
-
console.log("•
|
|
97
|
-
console.log("
|
|
98
|
-
console.log("
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
await this.waitForEnter("\n🤔 Ambas describen lo mismo, pero ¿cómo las convertimos en objetos? Presiona Enter...")
|
|
103
|
-
}
|
|
66
|
+
await this.waitForEnter("\nPresiona Enter para ver la deducción clave...")
|
|
67
|
+
|
|
68
|
+
console.log("\n⚡ Deducción clave:")
|
|
69
|
+
console.log("• LIBROS + USUARIOS → deben INTERACTUAR")
|
|
70
|
+
console.log("• ¿Cómo? → préstamos, búsquedas, devoluciones")
|
|
71
|
+
console.log("\n💡 Conclusión: De 'biblioteca digital' se deduce naturalmente")
|
|
72
|
+
console.log(" un conjunto de libros y usuarios interactuando")
|
|
73
|
+
|
|
74
|
+
await this.waitForEnter("\nPresiona Enter para la segunda definición...")
|
|
104
75
|
|
|
105
|
-
async step3_DecompositionChallenge() {
|
|
106
76
|
console.clear()
|
|
107
|
-
console.log("
|
|
108
|
-
console.log("
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
console.log("
|
|
112
|
-
console.log("•
|
|
113
|
-
console.log("•
|
|
114
|
-
console.log("•
|
|
115
|
-
|
|
116
|
-
console.log("
|
|
117
|
-
console.log("
|
|
118
|
-
|
|
119
|
-
console.log("\n
|
|
120
|
-
console.log("
|
|
121
|
-
console.log("
|
|
122
|
-
console.log("
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
await this.waitForEnter("\nPresiona Enter para ver cómo abordar esta descomposición...")
|
|
77
|
+
console.log("🎯 DEFINICIÓN 2 - Conjunto de cosas con propósito:")
|
|
78
|
+
console.log("¿Qué elementos relacionados contribuyen al propósito?")
|
|
79
|
+
|
|
80
|
+
console.log("\n📖 Elementos del sistema:")
|
|
81
|
+
console.log("• LIBROS - recursos que se prestan")
|
|
82
|
+
console.log("• USUARIOS - quienes solicitan préstamos")
|
|
83
|
+
console.log("• PRÉSTAMOS - relación temporal entre libro y usuario")
|
|
84
|
+
console.log("• BIBLIOTECA - coordina todo el proceso")
|
|
85
|
+
|
|
86
|
+
console.log("\n🎯 Propósito determinado:")
|
|
87
|
+
console.log("Facilitar el acceso organizado a recursos bibliográficos")
|
|
88
|
+
|
|
89
|
+
console.log("\n🔗 Relaciones ordenadas:")
|
|
90
|
+
console.log("• Usuario solicita → Biblioteca evalúa → Préstamo se crea")
|
|
91
|
+
console.log("• Libro cambia estado → Usuario recibe acceso → Plazo se establece")
|
|
92
|
+
console.log("• Vencimiento llega → Usuario devuelve → Libro se libera")
|
|
93
|
+
|
|
94
|
+
await this.waitForEnter("\nPresiona Enter para ver la descomposición en objetos...")
|
|
126
95
|
}
|
|
127
96
|
|
|
128
|
-
async
|
|
97
|
+
async step3_ObjectIdentification() {
|
|
129
98
|
console.clear()
|
|
130
|
-
console.log("
|
|
131
|
-
|
|
132
|
-
console.log("
|
|
133
|
-
|
|
134
|
-
console.log("
|
|
135
|
-
console.log("
|
|
99
|
+
console.log("Descomposición en objetos:")
|
|
100
|
+
|
|
101
|
+
console.log("\nclass Book {")
|
|
102
|
+
console.log(" constructor(title, author, isbn) {")
|
|
103
|
+
console.log(" this.title = title")
|
|
104
|
+
console.log(" this.author = author")
|
|
105
|
+
console.log(" this.isbn = isbn")
|
|
106
|
+
console.log(" this.isLoaned = false")
|
|
107
|
+
console.log(" }")
|
|
136
108
|
console.log("")
|
|
137
|
-
console.log("
|
|
138
|
-
console.log("
|
|
139
|
-
console.log("
|
|
140
|
-
console.log("
|
|
109
|
+
console.log(" isAvailable() {")
|
|
110
|
+
console.log(" return !this.isLoaned")
|
|
111
|
+
console.log(" }")
|
|
112
|
+
console.log("")
|
|
113
|
+
console.log(" markAsLoaned() {")
|
|
114
|
+
console.log(" this.isLoaned = true")
|
|
115
|
+
console.log(" }")
|
|
116
|
+
console.log("")
|
|
117
|
+
console.log(" markAsReturned() {")
|
|
118
|
+
console.log(" this.isLoaned = false")
|
|
119
|
+
console.log(" }")
|
|
120
|
+
console.log("}")
|
|
141
121
|
|
|
142
|
-
await this.waitForEnter("\nPresiona Enter para ver
|
|
122
|
+
await this.waitForEnter("\nPresiona Enter para ver User...")
|
|
143
123
|
|
|
144
|
-
console.log("\
|
|
145
|
-
console.log("(
|
|
124
|
+
console.log("\nclass User {")
|
|
125
|
+
console.log(" constructor(name, email, maxLoans = 3) {")
|
|
126
|
+
console.log(" this.name = name")
|
|
127
|
+
console.log(" this.email = email")
|
|
128
|
+
console.log(" this.maxLoans = maxLoans")
|
|
129
|
+
console.log(" this.currentLoans = []")
|
|
130
|
+
console.log(" }")
|
|
131
|
+
console.log("")
|
|
132
|
+
console.log(" canBorrow() {")
|
|
133
|
+
console.log(" return this.currentLoans.length < this.maxLoans")
|
|
134
|
+
console.log(" }")
|
|
146
135
|
console.log("")
|
|
147
|
-
console.log("
|
|
148
|
-
console.log("
|
|
149
|
-
console.log("
|
|
150
|
-
console.log("
|
|
136
|
+
console.log(" addLoan(loan) {")
|
|
137
|
+
console.log(" this.currentLoans.push(loan)")
|
|
138
|
+
console.log(" }")
|
|
139
|
+
console.log("")
|
|
140
|
+
console.log(" removeLoan(loan) {")
|
|
141
|
+
console.log(" const index = this.currentLoans.indexOf(loan)")
|
|
142
|
+
console.log(" if (index > -1) this.currentLoans.splice(index, 1)")
|
|
143
|
+
console.log(" }")
|
|
144
|
+
console.log("}")
|
|
151
145
|
|
|
152
|
-
await this.waitForEnter("\nPresiona Enter para ver
|
|
146
|
+
await this.waitForEnter("\nPresiona Enter para ver Loan...")
|
|
153
147
|
|
|
154
|
-
console.log("\
|
|
148
|
+
console.log("\nclass Loan {")
|
|
149
|
+
console.log(" constructor(user, book, durationDays = 14) {")
|
|
150
|
+
console.log(" this.user = user")
|
|
151
|
+
console.log(" this.book = book")
|
|
152
|
+
console.log(" this.startDate = new Date()")
|
|
153
|
+
console.log(" this.dueDate = new Date(Date.now() + durationDays * 24 * 60 * 60 * 1000)")
|
|
154
|
+
console.log(" this.returned = false")
|
|
155
|
+
console.log(" }")
|
|
155
156
|
console.log("")
|
|
156
|
-
console.log("
|
|
157
|
-
console.log("
|
|
158
|
-
console.log("
|
|
159
|
-
console.log(" markAsLoaned() → void")
|
|
160
|
-
console.log("}")
|
|
157
|
+
console.log(" isOverdue() {")
|
|
158
|
+
console.log(" return !this.returned && new Date() > this.dueDate")
|
|
159
|
+
console.log(" }")
|
|
161
160
|
console.log("")
|
|
162
|
-
console.log("
|
|
163
|
-
console.log("
|
|
164
|
-
console.log("
|
|
165
|
-
console.log("
|
|
166
|
-
console.log("}")
|
|
161
|
+
console.log(" calculateFine() {")
|
|
162
|
+
console.log(" if (!this.isOverdue()) return 0")
|
|
163
|
+
console.log(" const daysLate = Math.ceil((new Date() - this.dueDate) / (24 * 60 * 60 * 1000))")
|
|
164
|
+
console.log(" return daysLate * 5 // $5 por día")
|
|
165
|
+
console.log(" }")
|
|
167
166
|
console.log("")
|
|
168
|
-
console.log("
|
|
169
|
-
console.log("
|
|
170
|
-
console.log("
|
|
171
|
-
console.log("
|
|
167
|
+
console.log(" returnBook() {")
|
|
168
|
+
console.log(" this.returned = true")
|
|
169
|
+
console.log(" this.book.markAsReturned()")
|
|
170
|
+
console.log(" this.user.removeLoan(this)")
|
|
171
|
+
console.log(" }")
|
|
172
172
|
console.log("}")
|
|
173
|
+
|
|
174
|
+
await this.waitForEnter("\nPresiona Enter para ver Library...")
|
|
175
|
+
|
|
176
|
+
console.log("\nclass Library {")
|
|
177
|
+
console.log(" constructor() {")
|
|
178
|
+
console.log(" this.books = []")
|
|
179
|
+
console.log(" this.users = []")
|
|
180
|
+
console.log(" this.loans = []")
|
|
181
|
+
console.log(" }")
|
|
182
|
+
console.log("")
|
|
183
|
+
console.log(" lendBook(user, book) {")
|
|
184
|
+
console.log(" if (!user.canBorrow()) return null")
|
|
185
|
+
console.log(" if (!book.isAvailable()) return null")
|
|
186
|
+
console.log("")
|
|
187
|
+
console.log(" const loan = new Loan(user, book)")
|
|
188
|
+
console.log(" book.markAsLoaned()")
|
|
189
|
+
console.log(" user.addLoan(loan)")
|
|
190
|
+
console.log(" this.loans.push(loan)")
|
|
191
|
+
console.log(" return loan")
|
|
192
|
+
console.log(" }")
|
|
173
193
|
console.log("")
|
|
174
|
-
console.log("
|
|
175
|
-
console.log("
|
|
176
|
-
console.log("
|
|
177
|
-
console.log("
|
|
194
|
+
console.log(" returnBook(loan) {")
|
|
195
|
+
console.log(" loan.returnBook()")
|
|
196
|
+
console.log(" return loan.calculateFine()")
|
|
197
|
+
console.log(" }")
|
|
198
|
+
console.log("")
|
|
199
|
+
console.log(" getOverdueLoans() {")
|
|
200
|
+
console.log(" return this.loans.filter(loan => loan.isOverdue())")
|
|
201
|
+
console.log(" }")
|
|
178
202
|
console.log("}")
|
|
179
203
|
|
|
180
|
-
await this.waitForEnter("\nPresiona Enter para ver
|
|
204
|
+
await this.waitForEnter("\nPresiona Enter para ver la interacción...")
|
|
181
205
|
|
|
182
206
|
console.clear()
|
|
183
|
-
console.log("
|
|
184
|
-
console.log("
|
|
185
|
-
console.log("
|
|
186
|
-
console.log("
|
|
187
|
-
console.log("
|
|
188
|
-
console.log("
|
|
189
|
-
console.log("
|
|
190
|
-
console.log("
|
|
191
|
-
|
|
192
|
-
console.log("
|
|
193
|
-
console.log("
|
|
194
|
-
console.log("
|
|
195
|
-
console.log("
|
|
196
|
-
console.log("
|
|
197
|
-
|
|
198
|
-
console.log("
|
|
199
|
-
console.log("
|
|
200
|
-
console.log("
|
|
201
|
-
console.log("
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
await this.waitForEnter("\nPresiona Enter para continuar con la conclusión...")
|
|
207
|
+
console.log("Ejemplo de uso:")
|
|
208
|
+
console.log("")
|
|
209
|
+
console.log("const library = new Library()")
|
|
210
|
+
console.log("const book = new Book('1984', 'George Orwell', '978-0451524935')")
|
|
211
|
+
console.log("const user = new User('Ana García', 'ana@email.com')")
|
|
212
|
+
console.log("")
|
|
213
|
+
console.log("// Los objetos interactúan entre sí")
|
|
214
|
+
console.log("const loan = library.lendBook(user, book)")
|
|
215
|
+
console.log("console.log(book.isAvailable()) // false")
|
|
216
|
+
console.log("console.log(user.canBorrow()) // true (2 préstamos disponibles)")
|
|
217
|
+
console.log("")
|
|
218
|
+
console.log("// Simular libro vencido")
|
|
219
|
+
console.log("loan.dueDate = new Date(Date.now() - 24 * 60 * 60 * 1000)")
|
|
220
|
+
console.log("console.log(loan.isOverdue()) // true")
|
|
221
|
+
console.log("console.log(loan.calculateFine()) // 5")
|
|
222
|
+
console.log("")
|
|
223
|
+
console.log("// Devolver libro")
|
|
224
|
+
console.log("const fine = library.returnBook(loan)")
|
|
225
|
+
console.log("console.log(book.isAvailable()) // true")
|
|
226
|
+
|
|
227
|
+
await this.waitForEnter("\nPresiona Enter para la conclusión...")
|
|
206
228
|
}
|
|
207
229
|
|
|
208
230
|
async conclusion() {
|
|
@@ -210,33 +232,34 @@ export class Lesson1SystemDecomposition {
|
|
|
210
232
|
console.log("🎓 CONCLUSIÓN: La Descomposición de Sistemas")
|
|
211
233
|
console.log("=" .repeat(50))
|
|
212
234
|
console.log("🎯 Hemos demostrado que:")
|
|
213
|
-
|
|
214
|
-
console.log("
|
|
215
|
-
console.log("
|
|
216
|
-
console.log("
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
console.log("
|
|
220
|
-
console.log("•
|
|
221
|
-
console.log("•
|
|
222
|
-
|
|
223
|
-
console.log("
|
|
235
|
+
|
|
236
|
+
console.log("\n1️⃣ SISTEMA como totalidad deductiva:")
|
|
237
|
+
console.log(" • De 'biblioteca digital' se deduce naturalmente: libros + usuarios")
|
|
238
|
+
console.log(" • Esta deducción revela la interacción fundamental del sistema")
|
|
239
|
+
|
|
240
|
+
console.log("\n2️⃣ SISTEMA como conjunto con propósito:")
|
|
241
|
+
console.log(" • Elementos identificados: Book, User, Loan, Library")
|
|
242
|
+
console.log(" • Relaciones ordenadas: solicitud → evaluación → préstamo → devolución")
|
|
243
|
+
console.log(" • Propósito determinado: acceso organizado a recursos")
|
|
244
|
+
|
|
245
|
+
console.log("\n⚡ LA PARTE DIFÍCIL:")
|
|
246
|
+
console.log("¿Cómo decidimos que necesitábamos exactamente estos 4 objetos?")
|
|
247
|
+
console.log("¿Por qué no 3? ¿Por qué no 10? ¿Cuál es el criterio?")
|
|
248
|
+
|
|
249
|
+
console.log("\n🔍 Criterio de descomposición:")
|
|
250
|
+
console.log("• Book - responsabilidad de estado propio")
|
|
251
|
+
console.log("• User - responsabilidad de sus límites")
|
|
252
|
+
console.log("• Loan - responsabilidad de la relación temporal")
|
|
253
|
+
console.log("• Library - responsabilidad de coordinación")
|
|
224
254
|
|
|
225
255
|
console.log("\n📚 Conexión con lecciones siguientes:")
|
|
226
|
-
console.log("• Lección 2:
|
|
227
|
-
console.log("• Lección 3:
|
|
228
|
-
console.log("• Lección 4-6: Cómo definir esas interacciones
|
|
229
|
-
|
|
230
|
-
console.log("\n💭 Reflexión
|
|
231
|
-
console.log("
|
|
232
|
-
console.log("
|
|
233
|
-
console.log("• ¿Qué propósito debe cumplir este sistema?")
|
|
234
|
-
console.log("• ¿Qué objetos pueden satisfacer ambos aspectos?")
|
|
235
|
-
console.log("• ¿Cómo van a interactuar para mantener la coherencia del sistema?")
|
|
236
|
-
|
|
237
|
-
console.log("\n🏆 ¡Has comprendido por qué la descomposición es la parte difícil!")
|
|
238
|
-
console.log("Ahora entiendes que no es solo dividir código en clases,")
|
|
239
|
-
console.log("sino encontrar la estructura que honre tanto la lógica como el propósito.")
|
|
256
|
+
console.log("• Lección 2: Los objetos interactúan a través de solicitudes")
|
|
257
|
+
console.log("• Lección 3: Las solicitudes son la única forma de ejecutar operaciones")
|
|
258
|
+
console.log("• Lección 4-6: Cómo definir esas interacciones correctamente")
|
|
259
|
+
|
|
260
|
+
console.log("\n💭 Reflexión:")
|
|
261
|
+
console.log("La descomposición en objetos es difícil porque requiere identificar")
|
|
262
|
+
console.log("las responsabilidades naturales que se deducen del sistema.")
|
|
240
263
|
|
|
241
264
|
await this.waitForEnter("\n✨ ¡Lección 1 completada! Presiona Enter para salir...")
|
|
242
265
|
}
|