Skip to content

Commit 311eab5

Browse files
authored
Merge pull request #9027 from AnaLauDB/reto-29-java
#29 - Java
2 parents d624c9d + faab9ac commit 311eab5

File tree

1 file changed

+322
-0
lines changed

1 file changed

+322
-0
lines changed
Lines changed: 322 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,322 @@
1+
public class AnaLauDB {
2+
3+
// ==========================================================================
4+
// IMPLEMENTACIÓN QUE CUMPLE EL PRINCIPIO DE SEGREGACIÓN DE INTERFACES (ISP)
5+
// ==========================================================================
6+
7+
// 1. INTERFACES ESPECÍFICAS (SEGREGADAS)
8+
// ==========================================================================
9+
10+
// Interfaz para funcionalidad de impresión básica
11+
interface Imprimible {
12+
void imprimir(String documento);
13+
}
14+
15+
// Interfaz para funcionalidad de impresión en color
16+
interface ImprimibleColor {
17+
void imprimirColor(String documento);
18+
}
19+
20+
// Interfaz para funcionalidad de escaneado
21+
interface Escaneable {
22+
String escanear();
23+
}
24+
25+
// Interfaz para funcionalidad de fax
26+
interface EnviadorFax {
27+
void enviarFax(String numero, String documento);
28+
}
29+
30+
// ==========================================================================
31+
// 2. IMPLEMENTACIONES DE DIFERENTES TIPOS DE IMPRESORAS
32+
// ==========================================================================
33+
34+
// Impresora que solo imprime en blanco y negro
35+
static class ImpresoraBlancoNegro implements Imprimible {
36+
private String modelo;
37+
38+
public ImpresoraBlancoNegro(String modelo) {
39+
this.modelo = modelo;
40+
}
41+
42+
@Override
43+
public void imprimir(String documento) {
44+
System.out.println("[" + modelo + "] Imprimiendo en blanco y negro: " + documento);
45+
// Simular tiempo de impresión
46+
try {
47+
Thread.sleep(500);
48+
} catch (InterruptedException e) {
49+
Thread.currentThread().interrupt();
50+
}
51+
System.out.println("[" + modelo + "] Documento impreso en B&N.");
52+
}
53+
54+
public String getModelo() {
55+
return modelo;
56+
}
57+
}
58+
59+
// Impresora que solo imprime a color
60+
static class ImpresoraColor implements ImprimibleColor {
61+
private String modelo;
62+
63+
public ImpresoraColor(String modelo) {
64+
this.modelo = modelo;
65+
}
66+
67+
@Override
68+
public void imprimirColor(String documento) {
69+
System.out.println("[" + modelo + "] Imprimiendo a todo color: " + documento);
70+
// Simular tiempo de impresión (más lento por el color)
71+
try {
72+
Thread.sleep(1000);
73+
} catch (InterruptedException e) {
74+
Thread.currentThread().interrupt();
75+
}
76+
System.out.println("[" + modelo + "] Documento impreso a color.");
77+
}
78+
79+
public String getModelo() {
80+
return modelo;
81+
}
82+
}
83+
84+
// Impresora multifunción completa
85+
static class ImpresoraMultifuncion implements Imprimible, ImprimibleColor, Escaneable, EnviadorFax {
86+
private String modelo;
87+
88+
public ImpresoraMultifuncion(String modelo) {
89+
this.modelo = modelo;
90+
}
91+
92+
@Override
93+
public void imprimir(String documento) {
94+
System.out.println("[" + modelo + "] Imprimiendo en blanco y negro: " + documento);
95+
try {
96+
Thread.sleep(400);
97+
} catch (InterruptedException e) {
98+
Thread.currentThread().interrupt();
99+
}
100+
System.out.println("[" + modelo + "] Documento impreso en B&N.");
101+
}
102+
103+
@Override
104+
public void imprimirColor(String documento) {
105+
System.out.println("[" + modelo + "] Imprimiendo a todo color: " + documento);
106+
try {
107+
Thread.sleep(800);
108+
} catch (InterruptedException e) {
109+
Thread.currentThread().interrupt();
110+
}
111+
System.out.println("[" + modelo + "] Documento impreso a color.");
112+
}
113+
114+
@Override
115+
public String escanear() {
116+
System.out.println("[" + modelo + "] Escaneando documento...");
117+
try {
118+
Thread.sleep(600);
119+
} catch (InterruptedException e) {
120+
Thread.currentThread().interrupt();
121+
}
122+
String documentoEscaneado = "documento_escaneado_" + System.currentTimeMillis() + ".pdf";
123+
System.out.println("[" + modelo + "] Documento escaneado: " + documentoEscaneado);
124+
return documentoEscaneado;
125+
}
126+
127+
@Override
128+
public void enviarFax(String numero, String documento) {
129+
System.out.println("[" + modelo + "] Enviando fax a " + numero + ": " + documento);
130+
try {
131+
Thread.sleep(2000);
132+
} catch (InterruptedException e) {
133+
Thread.currentThread().interrupt();
134+
}
135+
System.out.println("[" + modelo + "] Fax enviado exitosamente a " + numero);
136+
}
137+
138+
public String getModelo() {
139+
return modelo;
140+
}
141+
}
142+
143+
// Impresora básica con escáner (sin fax ni color)
144+
static class ImpresoraConEscaner implements Imprimible, Escaneable {
145+
private String modelo;
146+
147+
public ImpresoraConEscaner(String modelo) {
148+
this.modelo = modelo;
149+
}
150+
151+
@Override
152+
public void imprimir(String documento) {
153+
System.out.println("[" + modelo + "] Imprimiendo en blanco y negro: " + documento);
154+
try {
155+
Thread.sleep(450);
156+
} catch (InterruptedException e) {
157+
Thread.currentThread().interrupt();
158+
}
159+
System.out.println("[" + modelo + "] Documento impreso en B&N.");
160+
}
161+
162+
@Override
163+
public String escanear() {
164+
System.out.println("[" + modelo + "] Escaneando documento...");
165+
try {
166+
Thread.sleep(550);
167+
} catch (InterruptedException e) {
168+
Thread.currentThread().interrupt();
169+
}
170+
String documentoEscaneado = "scan_" + System.currentTimeMillis() + ".pdf";
171+
System.out.println("[" + modelo + "] Documento escaneado: " + documentoEscaneado);
172+
return documentoEscaneado;
173+
}
174+
175+
public String getModelo() {
176+
return modelo;
177+
}
178+
}
179+
180+
// ==========================================================================
181+
// 3. GESTOR DE IMPRESORAS
182+
// ==========================================================================
183+
184+
static class GestorImpresoras {
185+
186+
// Método para manejar impresión básica
187+
public static void realizarImpresion(Imprimible impresora, String documento) {
188+
System.out.println("\nIniciando impresión básica...");
189+
impresora.imprimir(documento);
190+
}
191+
192+
// Método para manejar impresión a color
193+
public static void realizarImpresionColor(ImprimibleColor impresora, String documento) {
194+
System.out.println("\nIniciando impresión a color...");
195+
impresora.imprimirColor(documento);
196+
}
197+
198+
// Método para manejar escaneado
199+
public static String realizarEscaneo(Escaneable escaner) {
200+
System.out.println("\nIniciando escaneado...");
201+
return escaner.escanear();
202+
}
203+
204+
// Método para enviar fax
205+
public static void enviarFax(EnviadorFax fax, String numero, String documento) {
206+
System.out.println("\nIniciando envío de fax...");
207+
fax.enviarFax(numero, documento);
208+
}
209+
210+
// Método que demuestra el polimorfismo respetando ISP
211+
public static void procesamientoAvanzado(Object impresora, String documento) {
212+
System.out.println("\nProcesamiento automático según capacidades...");
213+
214+
// Solo usar las interfaces que la impresora implementa
215+
if (impresora instanceof Imprimible) {
216+
((Imprimible) impresora).imprimir(documento);
217+
}
218+
219+
if (impresora instanceof ImprimibleColor) {
220+
((ImprimibleColor) impresora).imprimirColor(documento + "_color");
221+
}
222+
223+
if (impresora instanceof Escaneable) {
224+
String archivoEscaneado = ((Escaneable) impresora).escanear();
225+
System.out.println("Archivo generado: " + archivoEscaneado);
226+
}
227+
228+
if (impresora instanceof EnviadorFax) {
229+
((EnviadorFax) impresora).enviarFax("555-1234", documento);
230+
}
231+
}
232+
}
233+
234+
// ==========================================================================
235+
// 4. CÓDIGO DE VERIFICACIÓN DEL ISP
236+
// ==========================================================================
237+
238+
public static void main(String[] args) {
239+
System.out.println("=== DEMOSTRACIÓN DEL PRINCIPIO DE SEGREGACIÓN DE INTERFACES (ISP) ===");
240+
241+
// Crear diferentes tipos de impresoras
242+
ImpresoraBlancoNegro impresoraBN = new ImpresoraBlancoNegro("HP LaserJet Pro");
243+
ImpresoraColor impresoraColor = new ImpresoraColor("Canon PIXMA");
244+
ImpresoraMultifuncion multifuncion = new ImpresoraMultifuncion("Epson WorkForce Pro");
245+
ImpresoraConEscaner impresoraEscaner = new ImpresoraConEscaner("Brother DCP-L2550");
246+
247+
System.out.println("\n1. VERIFICANDO CUMPLIMIENTO DEL ISP:");
248+
System.out.println("ImpresoraBlancoNegro solo implementa Imprimible");
249+
System.out.println("ImpresoraColor solo implementa ImprimibleColor");
250+
System.out.println("ImpresoraMultifuncion implementa todas las interfaces necesarias");
251+
System.out.println("ImpresoraConEscaner implementa Imprimible y Escaneable");
252+
System.out.println("Ninguna clase implementa métodos que no necesita");
253+
254+
// 2. Probar funcionalidades específicas
255+
System.out.println("\n2. PROBANDO FUNCIONALIDADES ESPECÍFICAS:");
256+
257+
// Impresora B&N - solo puede imprimir
258+
GestorImpresoras.realizarImpresion(impresoraBN, "Informe_Anual.pdf");
259+
260+
// Impresora Color - solo puede imprimir a color
261+
GestorImpresoras.realizarImpresionColor(impresoraColor, "Presentacion_Marketing.pdf");
262+
263+
// Multifunción - puede hacer todo
264+
GestorImpresoras.realizarImpresion(multifuncion, "Documento_Oficial.pdf");
265+
GestorImpresoras.realizarImpresionColor(multifuncion, "Folleto_Promocional.pdf");
266+
String archivoEscaneado = GestorImpresoras.realizarEscaneo(multifuncion);
267+
GestorImpresoras.enviarFax(multifuncion, "555-9876", "Contrato.pdf");
268+
269+
// Impresora con escáner - puede imprimir y escanear
270+
GestorImpresoras.realizarImpresion(impresoraEscaner, "Manual_Usuario.pdf");
271+
GestorImpresoras.realizarEscaneo(impresoraEscaner);
272+
273+
// 3. Demostrar procesamiento polimórfico respetando ISP
274+
System.out.println("\n3. PROCESAMIENTO POLIMÓRFICO CON ISP:");
275+
276+
Object[] impresoras = { impresoraBN, impresoraColor, multifuncion, impresoraEscaner };
277+
278+
for (Object imp : impresoras) {
279+
System.out.println("\n--- Procesando: " + imp.getClass().getSimpleName() + " ---");
280+
GestorImpresoras.procesamientoAvanzado(imp, "TestDocument");
281+
}
282+
283+
// 4. Verificar que ISP previene violaciones
284+
System.out.println("\n4. VERIFICACIÓN FINAL DEL ISP:");
285+
286+
// Intentar usar solo las capacidades que cada impresora tiene
287+
System.out.println("\nVerificando que cada impresora solo expone métodos relevantes:");
288+
289+
// Esta impresora NO puede hacer color, escanear o enviar fax
290+
if (!(impresoraBN instanceof ImprimibleColor)) {
291+
System.out.println("ImpresoraBN correctamente NO implementa ImprimibleColor");
292+
}
293+
294+
if (!(impresoraBN instanceof Escaneable)) {
295+
System.out.println("ImpresoraBN correctamente NO implementa Escaneable");
296+
}
297+
298+
if (!(impresoraBN instanceof EnviadorFax)) {
299+
System.out.println("ImpresoraBN correctamente NO implementa EnviadorFax");
300+
}
301+
302+
// Esta impresora NO puede hacer B&N, escanear o enviar fax
303+
if (!(impresoraColor instanceof Imprimible)) {
304+
System.out.println("ImpresoraColor correctamente NO implementa Imprimible básico");
305+
}
306+
307+
// Verificar que multifunción SÍ tiene todas las capacidades
308+
if (multifuncion instanceof Imprimible &&
309+
multifuncion instanceof ImprimibleColor &&
310+
multifuncion instanceof Escaneable &&
311+
multifuncion instanceof EnviadorFax) {
312+
System.out.println("Multifunción correctamente implementa todas las interfaces");
313+
}
314+
315+
System.out.println("\nCONCLUSIÓN ISP:");
316+
System.out.println("- Cada interfaz es pequeña y específica");
317+
System.out.println("- Las clases solo implementan las interfaces que necesitan");
318+
System.out.println("- No hay métodos forzados o innecesarios");
319+
System.out.println("- El sistema es flexible y extensible");
320+
System.out.println("- Los clientes no dependen de funcionalidades que no usan");
321+
}
322+
}

0 commit comments

Comments
 (0)