情報システム学会 メールマガジン 2013.8.25 No.08-05 [12]

連載 オブジェクト指向と哲学
第32回 鶏と卵 - 自己増殖モデルを考える(3)

河合 昭男

 前回は「種(たね、seeds)と種(しゅ、species)」というキーワードで、生物の種(しゅ、species)としての設計情報は一元管理されているのか、それとも個々の個体の中に埋め込まれているのかという問題について考えました。「原始朝顔説」はあるとき朝顔の種(たね、seed)が一粒出現し、その設計情報が子々孫々今日まで継承されてきたという説で、一方「原型朝顔説」は朝顔の設計情報がどこかで一元管理されていて地上の朝顔はすべてそれに基づいて花を咲かせるというものです。前者は種(しゅ、species)とは祖先を同じくするもので、後者は種とは一元管理されている設計情報を共有するものです。

 自己増殖には大きく分けるとふたつのタイプがあります。それは自己複製と交配による種の保存という方法です。

自己複製
 細菌は自身の複製で増えてゆきます。生物のように雌雄はありません。

種の保存
 自分と同じ種の個体を交配により生み出す方法です。自己複製ではありません。子は両親からそれぞれの遺伝子を継承する新たな個性を持った個体です。
 生物の種の保存には2つの特徴があります。第1は世代交代です。子を産み育てると自身の生命は終わります。第2は子を産むには雌雄の交配が必要だということです。単純な自己複製ではなく、なぜこのような複雑な仕組みができたのでしょう?この2つの特徴に深淵な仕組みが隠されているようです。

世代交代
 朝顔は花を咲かせ、枯れたあと種を残します。その種から咲いた朝顔は元の朝顔とは別のものでしょうか、それとも木の枝のように直接はつながってはいないが同じ個体の一部と考えるべきでしょうか。種を使って移動したのだと考えることもできます。種がひとつならそうかもしれませんが、種はたくさんできます。分身が生きていると見るより世代交代と考えた方がよさそうです。
 鶏と卵なら、卵から孵ったひよこは元の親鳥の一部であるとは考えません。親子関係はあるが別の個体と考えるのが普通です。
 生物には寿命があり、世代交代を繰り返し種の設計情報を伝えてゆきます。雌雄の遺伝子から生まれた子は、種としては親と同じでありながら親とは異なった個性を持った存在です。鶏は「みな頭頂にとさかを持つ」という種としての特徴を持ちますが「品種は極めて多く、色彩・形態もさまざまである」という広辞苑の説明が、自己複製ではない交配による種の保存の特徴を示しています。

交配
 生物には雌雄があり、自己増殖と言っても種の保存であり個の複製ではありません。種の保存には雌雄の交配が必要です。
 動物は雌雄別の個体ですが、植物は一輪の花の中にめしべとおしべがあります。朝顔は自家受粉できますが、花が咲いても自家受粉できない植物もあります。蜜蜂は花の蜜に吸い寄せられて受粉を助けます。他の個体の花粉を運んでくることもあります。
 これが不思議です。おしべだけの花やめしべだけの花ならともかく、一輪の花に両方備わっていながら他の個体の花粉と交配させる仕組みに何か意味があるようです。

オブジェクト指向モデル
 オブジェクト指向モデルではクラスの存在が前提です。「鶏」よりも「鶏のイデア」が先にあり原始朝顔説ではなく原型朝顔説のモデルになります。第30回のモデルに雌雄の遺伝子の交配を組み込んで拡張します。
 まず第30回図5のオブジェクト図は、次の図1右のように拡張します。子には父親と母親が必要です。

図1 卵を生んだ状態のオブジェクト図

図1 卵を生んだ状態のオブジェクト図

 第30回のJavaスタイルのプログラムでは子オブジェクトの生成を
    鶏 子 = new 鶏();
としました。細菌型自己複製モデルならこれでよいのですが、交配型なら雌雄の遺伝子情報が必要です。鶏クラスのコンストラクタのパラメタとして渡すようにします。
    鶏 子 = new 鶏(遺伝子情報1, 遺伝子情報2);

 第30回図6のクラス図を、次の図2のように拡張します。
(1) 鶏の属性に遺伝子を追加
(2) 雄鶏と鶏の間に父と子の関連を追加
(3) 雌鳥と鶏の間に母と子の関連を追加

図2 クラス図に遺伝子と親子の関連を追加

図2 クラス図に遺伝子と親子の関連を追加

 このクラス図には、子には必ず父親と母親がただ一つ存在し、逆に親は子を0以上持つことが示されています。以下次回。


ODL Object Design Laboratory, Inc. Akio Kawai