カプセル化とは何か、それを実装する3つの手法であるアソシエーション、アグリゲーション、コンポジションについて多くの理論を経験しました。
カプセル化
カプセル化は、クラス内のフィールドをプライベートにし、パブリックメソッドを介してフィールドへのアクセスを提供する技術です。フィールドがプライベートとして宣言されている場合、クラス外の誰もアクセスできないため、クラス内のフィールドは非表示になります。このため、カプセル化はデータ隠蔽とも呼ばれます。
カプセル化は、クラス外で定義された他のコードがコードとデータにランダムにアクセスすることを防ぐ保護バリアとして説明できます。データとコードへのアクセスは、インターフェイスによって厳密に制御されます。
カプセル化の主な利点は、コードを使用する他の人のコードを壊すことなく、実装されたコードを変更できることです。この機能により、カプセル化により、コードの保守性、柔軟性、および拡張性が向上します。
協会
関連付けは、すべてのオブジェクトに独自のライフサイクルがあり、所有者がいない関係です。教師と生徒の例を見てみましょう。複数の生徒が1人の教師に関連付けられ、1人の生徒が複数の教師に関連付けられますが、オブジェクト間に所有権はなく、両方に独自のライフサイクルがあります。どちらも独立して作成および削除できます。
集計
集約は、すべてのオブジェクトに独自のライフサイクルがある特殊な形式の関連付けですが、所有権があり、子オブジェクトは別の親オブジェクトに属することはできません。学科と教師の例を見てみましょう。1人の教師を複数の部門に所属させることはできませんが、部門を削除しても教師オブジェクトは破棄されません。それは「has-a」関係と考えることができます。
組成
合成は再び集約の特殊な形式であり、これを「死」関係と呼ぶことができます。これは強力なタイプの集約です。子オブジェクトにはライフサイクルがありません。親オブジェクトを削除すると、すべての子オブジェクトも削除されます。もう一度、家と部屋の関係の例を見てみましょう。家には複数の部屋を含めることができますが、部屋の独立した生活はなく、2つの異なる家に属することはできません。家を削除すると、部屋は自動的に削除されます。
質問は:
今、これらはすべて実世界の例です。実際のクラスコードでこれらの手法を使用する方法についての説明を探しています。私が意味する、カプセル化のための3つの異なる技術を使用するためのポイントは何か、これらの技術を実装する方法とどのように一度に適用される技術を選択します。