The Whole is Greater than Sum of its Parts
-Aristotle

この引用はAristotleによるものとされている。 基本的なポイントは、「相乗効果」の一つです。 スティーブン・コヴィーのベストセラー『7つの習慣』では、6番目の習慣として「Synergize(相乗効果)」を挙げています。 組織で言えることは、コンピュータサイエンスでも言えることです。 モノは個体よりも本体の方が価値がある。 コンピュータサイエンスでは、コンポジションという言葉を使います

では、コンポジションとは何を意味するのでしょうか。 “コンポジション “は、オブジェクト指向プログラミングの基本概念の1つである。 インスタンス変数で他のクラスの1つ以上のオブジェクトを参照するクラスを説明する。 これにより、オブジェクト間のhas-a associationをモデル化することができます。” Stackifyではこのように説明されています。 オーケストラのようなものだと考えてください。 一人の演奏者もいいですが、グループ全体が揃うと、音楽はより豊かで深くなります。

メリット

適切な構成で作成されたコードの主なメリットは再利用です。 正しく設計すれば、再利用は簡単なはずです。 そうでない場合は、かなり面倒なことになります。 それと同時に、直感的でクリーンな API (アプリケーション プログラミング インターフェイス) も必要です。 経験豊富なJavaプログラマとして、私は、JavaのスレッドAPIの設計を嘆く声を数多く聞いてきました。

Java で構成がどのように見えるかを見るために、例を作成しましょう。

ここでは、Role クラスを定義しています。 構成では、Employee クラスは Role を “has-a” と言います。

Hiding

この API の例では、HotDogGrinder と HotDogGrill クラスはパッケージ プライベートで外部からはアクセスできません。

API のパブリック顔 HotDogMachine はここです。 このクラスは、API デザインで隠している 2 つの内部クラスへの参照を持っています。

Composition vs Inheritance

構成と継承は、開発者が混乱する可能性があります。 Steven Lowe がこの ThoughtWorks ブログ投稿で指摘しているように、どちらを使用するか慎重に選択する必要があります。 どのような経験則でもそうですが、常に適用されるわけではないことを理解する必要があります。 そこで、先に進む前に、いくつかのことを整理しておきましょう。

すでに構成について長々と話しているので、継承を定義しましょう。 継承は、オブジェクト指向プログラミングの基礎の 1 つです。 たとえば、食べ物クラスがあれば、パンクラスは食べ物クラスから継承します。 一方、コンポジションは、より大きなユニットの一部である要素を扱うものです。 まず、”ドメイン概念の表現/実装は 1 つの次元である”。 基本的に、両方が同じドメインにある場合、継承はおそらく最善の策です。 次に、”ドメイン概念のセマンティクスとその関係 “である。 作成したコンポーネントが別のものに転送され始めたら、これは、代わりに継承を使用することを再考する必要がある兆候かもしれません。

構成は、ソフトウェア開発における大きな原則ですが、私たちプロの多くが台無しにしています。 私自身、正しくアプローチせずにソリューションを作成し、これを実行しました。 同僚とホワイトボードで簡単に議論したり、紙に何かをスケッチしたりすると、2 つのオブジェクトの間に「has-a」関係がある場合に理解するのに役立ちます。 これを読み通した後は、あなたもその利点を理解し、例でどのように使うかを知っておく必要があります。

MyITCareerCoach.com

では、より多くの素晴らしいコンテンツをチェックし、購読することができます。

admin

コメントを残す

メールアドレスが公開されることはありません。

lg