「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 「フレンド」依存関係宣言をリファクタリングする方法: 過度の相互依存関係を削除するためのステップバイステップ ガイド?

「フレンド」依存関係宣言をリファクタリングする方法: 過度の相互依存関係を削除するためのステップバイステップ ガイド?

2024 年 11 月 21 日に公開
ブラウズ:680

How to Refactor a \

「フレンド」依存関係宣言をリファクタリングする方法

バックグラウンド

2 つのクラス間の「フレンド」依存関係を削除するシナリオが発生する可能性があります。特に過度の相互依存性、メンテナンスの問題、古い UML 標準に関する懸念により、これが望まれています。

ステップ 1: 要約を導入するInterface

「friend」クラスによって公開されるメソッドを抽出し、新しい抽象インターフェイスを作成します。 「フレンド」クラスからインターフェイスへの依存関係を確立し、他のクラスからインターフェイスへの「呼び出し」依存関係を確立します。

ステップ 2: インターフェイスへの操作の移動

操作を移動します。依存クラスから抽象インターフェイスへの「呼び出し」依存関係を構成します。インターフェイスが継承目的で保護されたコンストラクターを拡張するようにし、依存クラスとインターフェイスの間の保護された汎化関連付けを非表示にします。

ステップ 3: 実装を結合する

最後のステップでは、メソッドを作成します。 「friend」クラスで、抽象インターフェイスの参照を依存クラスに渡します。初期化中に依存クラスからこのメソッドを呼び出して、必要な接続を確立します。

Implementation

ClassA (プロバイダー):

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

ClassAAccessor (友人):

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

利点

  • クラス間の不要な依存関係を削除します
  • 最新の UML 標準に準拠します
  • 内部操作を公開しないことでアクセス制御を強化します

制限事項

  • コードが増加する可能性があります複雑さ
  • 抽象インターフェイスが必要で、パフォーマンスとメモリ フットプリントに影響
  • 保護された一般化関係の UML 表現は困難な場合があります
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3