En el diseño orientado a objetos, el Acoplamiento se refiere al grado de conocimiento directo que un elemento tiene de otro. En otras palabras, ¿con qué frecuencia los cambios en la clase A fuerzan cambios relacionados con la clase B
? Hay dos tipos de acoplamiento:
- Acoplamiento estrecho: en general, el acoplamiento estrecho significa que las dos clases a menudo cambian juntas. En otras palabras, si A sabe más de lo que debería sobre la forma en que se implementó B, entonces A y B están estrechamente relacionados.
Ejemplo: si desea cambiar la piel, también tendría que cambiar el diseño de su cuerpo porque los dos están unidos, están estrechamente acoplados. El mejor ejemplo de acoplamiento fuerte es RMI (invocación de método remoto).// Java program to illustrate
// tight coupling concept
class
Subject {
Topic t =
new
Topic();
public
void
startReading()
{
t.understand();
}
}
class
Topic {
public
void
understand()
{
System.out.println(
"Tight coupling concept"
);
}
}
Explicación: En el programa anterior, la clase Asunto depende de la clase Tema. En el programa anterior, la clase de tema está estrechamente relacionada con la clase de tema, lo que significa que si algún cambio en la clase de tema requiere que cambie la clase de tema. Por ejemplo, si el método de comprensión() de la clase Tema cambia al método gotit(), entonces debe cambiar el método startReading() que llamará al método gotit() en lugar de llamar al método entender().
// Java program to illustrate
// tight coupling concept
class
Volume
{
public
static
void
main(String args[])
{
Box b =
new
Box(
5
,
5
,
5
);
System.out.println(b.volume);
}
}
class
Box
{
public
int
volume;
Box(
int
length,
int
width,
int
height)
{
this
.volume = length * width * height;
}
}
Producción:
125
Explicación: En el ejemplo anterior, existe una fuerte interdependencia entre ambas clases. Si hay algún cambio en la clase de Box, se refleja en el resultado del Volumen de clase.
- Acoplamiento flojo: en palabras simples, el acoplamiento flojo significa que son en su mayoría independientes. Si el único conocimiento que la clase A tiene sobre la clase B es lo que la clase B ha expuesto a través de su interfaz, entonces se dice que la clase A y la clase B están débilmente acopladas. Para superar los problemas de acoplamiento estrecho entre objetos, Spring Framework utiliza un mecanismo de inyección de dependencia con la ayuda del modelo POJO/POJI y, a través de la inyección de dependencia, es posible lograr un acoplamiento flexible.
Ejemplo: si te cambias la camisa, entonces no estás obligado a cambiar tu cuerpo; cuando puedes hacerlo, entonces tienes un acoplamiento flojo. Cuando no puede hacer eso, entonces tiene un acoplamiento estrecho. Los ejemplos de acoplamiento suelto son Interface, JMS.// Java program to illustrate
// loose coupling concept
public
interface
Topic
{
void
understand();
}
class
Topic1
implements
Topic {
public
void
understand()
{
System.out.println(
"Got it"
);
}
}
class
Topic2
implements
Topic {
public
void
understand()
{
System.out.println(
"understand"
);
}
}
public
class
Subject {
public
static
void
main(String[] args)
{
Topic t =
new
Topic1();
t.understand();
}
}
Explicación : en el ejemplo anterior, los objetos Topic1 y Topic2 están débilmente acoplados. Significa que Topic es una interfaz y podemos inyectar cualquiera de las clases implementadas en tiempo de ejecución y podemos brindar servicio al usuario final.
// Java program to illustrate
// loose coupling concept
class
Volume
{
public
static
void
main(String args[])
{
Box b =
new
Box(
5
,
5
,
5
);
System.out.println(b.getVolume());
}
}
final
class
Box
{
private
int
volume;
Box(
int
length,
int
width,
int
height)
{
this
.volume = length * width * height;
}
public
int
getVolume()
{
return
volume;
}
}
Producción:
125
Explicación: en el programa anterior, no hay dependencia entre ambas clases. Si cambiamos algo en las clases de Caja, entonces no tenemos que cambiar nada en la clase de Volumen.
¿Cuál es mejor acoplamiento apretado o acoplamiento flojo?
En general, Tight Coupling es malo en la mayoría de las veces, porque reduce la flexibilidad y la reutilización del código, hace que los cambios sean mucho más difíciles, impide la capacidad de prueba, etc. El acoplamiento flexible es una mejor opción porque un acoplamiento flexible ayudará usted cuando su aplicación necesita cambiar o crecer. Si diseña con una arquitectura débilmente acoplada, solo unas pocas partes de la aplicación deberían verse afectadas cuando cambien los requisitos.
Echemos un vistazo a la vista pictórica del acoplamiento apretado y el acoplamiento flojo:Diferencia entre acoplamiento apretado y acoplamiento flojo
- El acoplamiento apretado no es bueno en la capacidad de prueba. Pero el acoplamiento suelto mejora la capacidad de prueba.
- El acoplamiento estrecho no proporciona el concepto de interfaz. Pero el acoplamiento flexible nos ayuda a seguir el principio GOF del programa a las interfaces, no a las implementaciones.
- En acoplamiento estrecho, no es fácil intercambiar los códigos entre dos clases. Pero es mucho más fácil intercambiar otras piezas de código/módulos/objetos/componentes en acoplamiento flexible.
- El acoplamiento apretado no tiene la capacidad de cambio. Pero el acoplamiento flojo es altamente cambiante.
Este artículo es una contribución de Bishal Kumar Dubey . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA