"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo refactorizar una declaración de dependencia de un \"amigo\": ¿una guía paso a paso para eliminar la interdependencia excesiva?

Cómo refactorizar una declaración de dependencia de un \"amigo\": ¿una guía paso a paso para eliminar la interdependencia excesiva?

Publicado el 2024-11-21
Navegar:809

How to Refactor a \

Cómo refactorizar una declaración de dependencia "amiga"

Antecedentes

Uno puede encontrarse con un escenario en el que eliminar una dependencia "amiga" entre dos clases es deseado, particularmente debido a preocupaciones sobre interdependencia excesiva, problemas de mantenimiento y estándares UML obsoletos.

Paso 1: Presentar un resumen Interfaz

Extraiga los métodos expuestos por la clase "amigo" y cree una nueva interfaz abstracta. Establezca una relación de dependencia de la clase "amiga" a la interfaz y una dependencia de "llamada" de la otra clase a la interfaz.

Paso 2: Mover operaciones a la interfaz

Mover las operaciones que conforman la dependencia de "llamada" de la clase dependiente a la interfaz abstracta. Haga que la interfaz extienda un constructor protegido con fines de herencia y oculte la asociación de generalización protegida entre la clase dependiente y la interfaz.

Paso 3: Pegue la implementación

En el paso final, cree un método en la clase "amiga" para pasar una referencia de la interfaz abstracta a la clase dependiente. Llame a este método desde la clase dependiente durante la inicialización para establecer la conexión necesaria.

Implementación

ClaseA (proveedor):

class ClassA : protected InternalInterface {
    public:
        attachAccessor(ClassAAccessor &accessor) {
            accessor.setInternalInterfaceRef(*this);
        }
};

ClaseAAccessor (amigo):

class ClassAAccessor {
    public:
        ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) {
            classA.attachAccessor(*this);
        }
    private:  
        InternalInterface* internalInterfaceRef;
};

Ventajas

  • Elimina dependencias innecesarias entre clases
  • Se ajusta a los estándares UML modernos
  • Aplica el control de acceso ocultando las operaciones internas al público

Limitaciones

  • Puede aumentar el código complejidad
  • Requiere interfaces abstractas, lo que afecta el rendimiento y la huella de memoria
  • La representación UML de la relación de generalización protegida puede ser un desafío
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3