\r\n\r\n
継承と合成
OOP(Object Oriented Programming)では、「継承」と「結合」の2つが重要な概念です。簡単に言えば、組み合わせと継承は、クラスに追加のプロパティや振る舞いを提供することを扱うものである。継承とは、あるクラスが親クラスを拡張することによって、そのクラスの特性や振る舞いを受け継ぐことができることである。一方、結合とは、あるクラスが異なるクラスのオブジェクトをメンバーデータとして含むことができることである。
相続とは?
前述したように、継承とは、あるクラスが親クラスを拡張することで、親クラスのプロパティや振る舞いを受け継ぐことができることである。継承は基本的に、既存のクラスのプロパティや振る舞いを、新しく定義されたクラスが拡張できるようにすることで、コードの再利用を可能にします。クラスAがクラスBを拡張する場合、クラスBを親(または親クラス)、クラスAを子(または派生クラス/サブクラス)と呼びます。このシナリオの例では、クラスAはスーパークラス(B)のすべてのpublicおよびprotectedプロパティとメソッドを継承します。子クラスは、親クラスから継承した振る舞いをオプションでオーバーライド(メソッドに新しい機能または拡張機能を提供)することができます。
継承は、OOPにおける「is-a」の関係を表します。つまり、Bは実世界の実体全般を記述するクラスであっても、Aは特殊化を指定するものである。実際のプログラミングの問題では、Personクラスを拡張してEmployeeクラスを作成することができます。これを「専門化」といいます。ただし、Employeeクラスを先に作成し、それをPersonクラスに汎化する(=generalize)ことも可能です。この例では、Employee は person のすべての属性と振る舞いを持ち(つまり Employee も person である)、さらにいくつかの追加機能を含むことがあります(つまり Person は employee ではありません)。
コンポジションとは?
組み合わせとは、あるクラスが異なるクラスのオブジェクトをメンバーデータとして含むことができることです。例えば、クラスAはクラスBのオブジェクトをメンバとして含むことができる。ここで、Bで定義されたすべてのパブリックメソッド(または関数)は、Aクラスで実行することができます。Aクラスは容器となり、Bクラスは含有クラスとなる。コンポジションは、コンテナ船とも呼ばれる。この例では、クラスAはクラスBから構成されていると言える。OOPでは、コンポジションは「have-A」の関係を表します。注意すべきは、コンテナは含まれるクラスのすべてのパブリックメソッドを実行する権利を持っていても、他の機能を変更したり提供したりすることはできないことです。実際のプログラミングの問題では、クラス TextBox のオブジェクトはクラス Form に含まれることがあり、Form は TextBox を含む(あるいは、Form は TextBox で構成される)と言うことができる。
遺伝子と合成の違いは何ですか?