ホームページ >バックエンド開発 >C++ >デザインを損なうことなく友達宣言を削除するにはどうすればよいですか?

デザインを損なうことなく友達宣言を削除するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-04 13:20:301004ブラウズ

How to Remove a Friend Declaration Without Compromising Design?

デザインを維持しながら Friend 宣言を削除する方法

オブジェクト指向デザインで "friend" キーワードを使用すると、密接な依存関係が作成される可能性がありますそして保守性を妨げます。この記事では、システムの全体的な設計を維持しながらフレンド宣言を削除するための包括的なアプローチを提供します。

問題の背景:

2 つのクラス ClassA と ClassA が存在するシナリオを考えてみましょう。 ClassAAccessor はフレンド関係にあります。 ClassA は保護されたメソッドを持つ共有リソースを表し、ClassAAccessor はこのリソースへのアクセスを管理するヘルパーとして機能します。 ClassA と ClassAAccessor 間のフレンド関係により、ClassAAccessor は ClassA の保護されたメソッドに直接アクセスできます。

設計制約:

適切なリファクタリングを保証するために、いくつかの制約が設定されています。

  • ClassAccessor のパブリック インターフェイスは変更しないでください。
  • ClassA の内部操作はプライベートのままにする必要があります。
  • パフォーマンスとメモリ消費量には大きな影響を与えるべきではありません。

リファクタリングの手順:

ステップ 1: 抽象インターフェイスの導入

以前にフレンド経由でアクセスできた操作を抽出する関係を InternalInterface という別のインターフェイスに変換します。 ClassA と ClassAAccessor の間の関係をリファクタリングして、friend キーワードを使用するのではなく、このインターフェイスに依存するようにします。

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

操作を次から移動します。 ClassA を InternalInterface に設定します。これにより、ClassAAccessor から ClassA への「呼び出し」依存関係が直接排除されます。

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

ClassAAccessor で、次のインスタンスを指すプライベート メンバー変数を作成します。内部インターフェイス。 ClassA にこのメンバー変数を設定して、ClassAAccessor が必要な内部操作にアクセスできるようにするメソッドを導入します。

実装例:

<code class="cpp">class ClassAAccessor {
public:
    ClassAAccessor(ClassA&amp; classA);
    void setInternalInterfaceRef(InternalInterface &amp; newValue) {
        internalInterfaceRef = &amp;newValue;
    }
private:  
    InternalInterface* internalInterfaceRef;
};

class ClassA : protected InternalInterface {
public:
    attachAccessor(ClassAAccessor &amp; accessor);
};</code>

の利点リファクタリング:

  • ClassA と ClassAccessor の間の密接な依存関係を排除します。
  • ClassA の内部操作へのプライベート アクセスを確保します。
  • よりモジュール化された保守可能な設計を提供します.

リファクタリングの欠点:

  • コード構造の複雑さが増加します。
  • 追加インターフェイスの導入。
  • 保護された一般化関係に対する限定的な UML サポート。

以上がデザインを損なうことなく友達宣言を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。