Maison >développement back-end >C++ >Comment la refactorisation peut-elle éliminer les dépendances entre amis dans la gestion des ressources partagées ?

Comment la refactorisation peut-elle éliminer les dépendances entre amis dans la gestion des ressources partagées ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-05 12:04:02203parcourir

How Can Refactoring Eliminate Friend Dependencies in Shared Resource Management?

Suppression et refactorisation de la dépendance ami dans une conception de gestion de ressources partagées

Dans la conception orientée objet, la dépendance « ami » introduit un couplage étroit entre les cours et soulève des problèmes de maintenance. Pour supprimer de telles dépendances tout en conservant la fonctionnalité d'une conception de gestion des ressources partagées, un processus de refactorisation en plusieurs étapes est recommandé.

Étape 1 : introduire une interface abstraite

Le La première étape consiste à remplacer la dépendance « ami » par une interface abstraite, InternalInterface, qui définit les opérations auparavant accessibles uniquement à la classe conviviale.

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

Les opérations qui constituaient la dépendance « appel » sont déplacées de l'implémentation ClassA vers la définition InternalInterface.

Étape 3 : Connecter l'interface et l'implémentation

À fournir un accès à InternalInterface, introduire un constructeur protégé et une relation de généralisation protégée entre ClassA et InternalInterface.

Étape 4 : Coller les composants

Dans le constructeur ClassAAccessor, introduire un Méthode setInternalInterfaceRef() qui permet à ClassAAccessor d'obtenir une référence à InternalInterface de ClassA.

Étape 5 : Utiliser l'interface interne pour l'accès

Implémenter la méthode attachAccessor() dans ClassA pour transmettre la référence de l'interface interne à ClassAAccessor.

Étape 6 : Optimiser le couplage (facultatif)

Pour un découplage plus poussé, introduisez une deuxième interface, InternalClientInterface, pour servir d'intermédiaire entre ClassAAccessor et InternalInterface.

Avantages :

  • Élimine la dépendance "ami" selon les normes UML 2.2.
  • Conforme aux directives de codage qui découragent Utilisation "ami".
  • Fournit une conception plus explicite et maintenable.

Inconvénients :

  • Peut augmenter la complexité du code.
  • Nécessite des interfaces abstraites qui affectent potentiellement l'empreinte de la conception.
  • Les relations de généralisation protégées ont une prise en charge limitée de la représentation UML.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn