This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
wiki:pid [2024/08/26 00:45] – created admin | wiki:pid [2024/08/28 23:15] (current) – admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Principio de Inversión de Dependencias ====== | ====== Principio de Inversión de Dependencias ====== | ||
+ | |||
+ | Este principio recomienda que una clase cliente establezca dependencias prioritariamente con abstracciones y no con implementaciones concretas, ya que las abstracciones (es decir, interfaces) son más estables que las implementaciones concretas (es decir, clases). La idea es, entonces, intercambiar (o invertir) las dependencias: | ||
+ | |||
+ | Para detallar la idea del principio, supongamos que existe una interfaz '' | ||
+ | |||
+ | **Ejemplo 1**: El siguiente código ilustra el escenario que acabamos de describir. En este código, el mismo Cliente puede trabajar con objetos concretos de las clases '' | ||
+ | |||
+ | <code java> | ||
+ | interface I { ... } | ||
+ | |||
+ | class C1 implements I { | ||
+ | ... | ||
+ | } | ||
+ | class C2 implements I { | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | <code java> | ||
+ | class Cliente { | ||
+ | |||
+ | I i; | ||
+ | |||
+ | Cliente (I i) { | ||
+ | this.i = i; | ||
+ | ... | ||
+ | } ... | ||
+ | } | ||
+ | </ | ||
+ | <code java> | ||
+ | class Main { | ||
+ | |||
+ | void main () { | ||
+ | C1 c1 = new C1(); | ||
+ | new Cliente(c1); | ||
+ | ... | ||
+ | C2 c2 = new C2(); | ||
+ | new Cliente(c2); | ||
+ | ... | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Ejemplo 2**: Ahora, mostramos un ejemplo de código que sigue el Principio de Inversión de Dependencias. Este principio justifica la elección de '' | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | void f() { | ||
+ | ... | ||
+ | Proyector proyector = new ProyectorLG(); | ||
+ | ... | ||
+ | g(proyector); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code java> | ||
+ | void g(Proyector proyector) { | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Ejemplo 3**: Como ejemplo final, supongamos un paquete de estructuras de datos que ofrece una interfaz '' | ||