Skip to content

Commit 8acf97f

Browse files
authoredJul 23, 2024
Merge pull request #5046 from ASJordi/main
#30 - Java
2 parents af001e3 + 84b3c80 commit 8acf97f

File tree

1 file changed

+130
-0
lines changed

1 file changed

+130
-0
lines changed
 
+130
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
/*
2+
El Principio de Inversión de Dependencia (DIP) establece que las clases de alto nivel no deben depender de clases de bajo nivel.
3+
Es decir, se deben fabricar abstracciones mediante interfaces y clases abstractas para asegurarse de que dos módulos
4+
que deben interactuar entre sí solo se comuniquen a través de estas mismas, y de esta manera para esconder sus implementaciones concretas.
5+
*/
6+
7+
public class Main {
8+
9+
public static void main(String[] args) {
10+
Email email = new Email();
11+
Push push = new Push();
12+
SMS sms = new SMS();
13+
14+
SistemaNotificaciones snEmail = new SistemaNotificaciones(email);
15+
SistemaNotificaciones snPush = new SistemaNotificaciones(push);
16+
SistemaNotificaciones snSMS = new SistemaNotificaciones(sms);
17+
18+
snEmail.n.notificar();
19+
snPush.n.notificar();
20+
snSMS.n.notificar();
21+
}
22+
23+
// Ejemplo Incorrecto (Violación del DIP)
24+
/*
25+
Se tiene una clase Impresora que recibe una Factura, lo cual hace que la clase Impresora dependa de la clase Factura.
26+
Esto viola el DIP, ya que la clase de alto nivel (Impresora) depende de una clase de bajo nivel (Factura).
27+
En caso de que se quiera para una clase Carta o cualquier otro tipo de documento, se tendría que modificar la clase Impresora.
28+
*/
29+
static class Factura {
30+
// Atributos
31+
// Constructor
32+
// Métodos
33+
}
34+
35+
static class Impresora {
36+
Factura f;
37+
38+
public Impresora(Factura f) {
39+
this.f = f;
40+
}
41+
}
42+
43+
// Ejemplo Correcto (Aplicación del DIP)
44+
/*
45+
Se tiene una interfaz Imprimible que define un método imprimir(), y una clase Impresora que recibe un objeto que implemente la interfaz Imprimible.
46+
De esta forma, la clase Impresora no depende de una clase concreta, sino de una interfaz, lo cual cumple con el DIP.
47+
*/
48+
49+
interface Imprimible {
50+
void imprimir();
51+
}
52+
53+
static class FacturaDIP implements Imprimible {
54+
// Atributos
55+
// Constructor
56+
// Métodos
57+
58+
@Override
59+
public void imprimir() {
60+
// Imprimir la factura
61+
}
62+
}
63+
64+
static class CartaDIP implements Imprimible {
65+
// Atributos
66+
// Constructor
67+
// Métodos
68+
69+
@Override
70+
public void imprimir() {
71+
// Imprimir la carta
72+
}
73+
}
74+
75+
static class ImpresoraDIP {
76+
Imprimible i;
77+
78+
public ImpresoraDIP(Imprimible i) {
79+
this.i = i;
80+
}
81+
}
82+
83+
/*
84+
DIFICULTAD EXTRA (opcional):
85+
Crea un sistema de notificaciones.
86+
Requisitos:
87+
1. El sistema puede enviar Email, PUSH y SMS (implementaciones específicas).
88+
2. El sistema de notificaciones no puede depender de las implementaciones específicas.
89+
Instrucciones:
90+
1. Crea la interfaz o clase abstracta.
91+
2. Desarrolla las implementaciones específicas.
92+
3. Crea el sistema de notificaciones usando el DIP.
93+
4. Desarrolla un código que compruebe que se cumple el principio.
94+
*/
95+
96+
interface Notificable {
97+
void notificar();
98+
}
99+
100+
static class Email implements Notificable {
101+
@Override
102+
public void notificar() {
103+
System.out.println("Enviando notificación por email");
104+
}
105+
}
106+
107+
static class Push implements Notificable {
108+
@Override
109+
public void notificar() {
110+
System.out.println("Enviando notificación por push");
111+
}
112+
}
113+
114+
static class SMS implements Notificable {
115+
@Override
116+
public void notificar() {
117+
System.out.println("Enviando notificación por SMS");
118+
}
119+
}
120+
121+
static class SistemaNotificaciones {
122+
Notificable n;
123+
124+
public SistemaNotificaciones(Notificable n) {
125+
this.n = n;
126+
}
127+
}
128+
129+
130+
}

0 commit comments

Comments
 (0)
Please sign in to comment.