Acoplamiento en Java

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:

  1. 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.

  2. 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:
    Acoplamiento en Java

    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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *