"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment refactoriser une déclaration de dépendance « Ami » : un guide étape par étape pour supprimer les interdépendances excessives ?

Comment refactoriser une déclaration de dépendance « Ami » : un guide étape par étape pour supprimer les interdépendances excessives ?

Publié le 2024-11-21
Parcourir:849

How to Refactor a \

Comment refactoriser une déclaration de dépendance « ami »

Contexte

On peut rencontrer un scénario dans lequel supprimer une dépendance « ami » entre deux classes est souhaité, notamment en raison de préoccupations concernant une interdépendance excessive, des problèmes de maintenance et des normes UML obsolètes.

Étape 1 : Introduire un résumé Interface

Extrayez les méthodes exposées par la classe "friend" et créez une nouvelle interface abstraite. Établissez une relation de dépendance de la classe « ami » vers l'interface et une dépendance « d'appel » de l'autre classe vers l'interface.

Étape 2 : Déplacer les opérations vers l'interface

Déplacer les opérations qui constituent la dépendance "d'appel" de la classe dépendante à l'interface abstraite. Faites en sorte que l'interface étende un constructeur protégé à des fins d'héritage et masquez l'association de généralisation protégée entre la classe dépendante et l'interface.

Étape 3 : Coller l'implémentation ensemble

Dans la dernière étape, créez une méthode dans la classe "friend" pour transmettre une référence de l'interface abstraite à la classe dépendante. Appelez cette méthode à partir de la classe dépendante lors de l'initialisation pour établir la connexion nécessaire. : interface interne protégée { publique: attachAccessor (ClassAAccessor & accesseur) { accessor.setInternalInterfaceRef(*this); } };

ClassAAccessor (ami) :

class ClassAAccessor { publique: ClassAAccessor(ClassA& classA) : internalInterfaceRef(0) { classA.attachAccessor(*this); } privé: InternalInterface* internalInterfaceRef ; };
class ClassA : protected InternalInterface {
    public:
        attachAccessor(ClassAAccessor &accessor) {
            accessor.setInternalInterfaceRef(*this);
        }
};

Supprime les dépendances inutiles entre les classes

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

Limitations
  • Peut augmenter le code complexité
  • Nécessite des interfaces abstraites, ce qui a un impact sur les performances et l'empreinte mémoire
  • La représentation UML d'une relation de généralisation protégée peut être difficile

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3