„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann man eine „Freund“-Abhängigkeitserklärung umgestalten: Eine Schritt-für-Schritt-Anleitung zum Entfernen übermäßiger gegenseitiger Abhängigkeit?

Wie kann man eine „Freund“-Abhängigkeitserklärung umgestalten: Eine Schritt-für-Schritt-Anleitung zum Entfernen übermäßiger gegenseitiger Abhängigkeit?

Veröffentlicht am 21.11.2024
Durchsuche:508

How to Refactor a \

Wie man eine „Friend“-Abhängigkeitsdeklaration umgestaltet

Hintergrund

Man kann auf ein Szenario stoßen, in dem eine „Friend“-Abhängigkeit zwischen zwei Klassen entfernt wird erwünscht, insbesondere aufgrund von Bedenken hinsichtlich übermäßiger gegenseitiger Abhängigkeit, Wartungsproblemen und veralteten UML-Standards.

Schritt 1: Führen Sie eine ein Abstrakte Schnittstelle

Extrahieren Sie die von der „Friend“-Klasse bereitgestellten Methoden und erstellen Sie eine neue abstrakte Schnittstelle. Stellen Sie eine Abhängigkeitsbeziehung von der „Friend“-Klasse zur Schnittstelle und eine „Call“-Abhängigkeit von der anderen Klasse zur Schnittstelle her.

Schritt 2: Operationen auf die Schnittstelle verschieben

Verschieben Sie die Operationen die die „Aufruf“-Abhängigkeit von der abhängigen Klasse zur abstrakten Schnittstelle bilden. Lassen Sie die Schnittstelle einen geschützten Konstruktor für Vererbungszwecke erweitern und verbergen Sie die geschützte Generalisierungszuordnung zwischen der abhängigen Klasse und der Schnittstelle.

Schritt 3: Implementierung zusammenfügen

Im letzten Schritt erstellen Sie eine Methode in der Klasse „Freund“, um eine Referenz der abstrakten Schnittstelle an die abhängige Klasse zu übergeben. Rufen Sie diese Methode während der Initialisierung aus der abhängigen Klasse auf, um die erforderliche Verbindung herzustellen.

Implementierung

ClassA (Anbieter):

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

ClassAAccessor (Freund):

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

Vorteile

  • Entfernt unnötige Abhängigkeiten zwischen Klassen
  • Entspricht modernen UML-Standards
  • Erzwingt die Zugriffskontrolle, indem interne Vorgänge vor der Öffentlichkeit verborgen bleiben

Einschränkungen

  • Kann den Code erhöhen Komplexität
  • Erfordert abstrakte Schnittstellen, wirkt sich auf Leistung und Speicherbedarf aus
  • Die UML-Darstellung geschützter Generalisierungsbeziehungen kann eine Herausforderung sein
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3