オブジェクト指向プログラミングと生物システムの類似性(作成中)

このブログでも以前に書いていますが、Alan Kayは学部で生物学を学んでいて、オブジェクト指向プログラミングを作っていく中で生物学のコンセプトを頭に描いていたという話があります。 それ以降、Alan Kayを含めてオブジェクト指向プログラミングと生物システムの類似性について議論している話は聞いたことがありません。そこで、僕自身が本来生物学の研究者なので、プログラミングを学習しながら感じた類似性をここに列挙していきたいと思います。

Polymorphism

オブジェクト指向プログラミングにおけるPolymorphismは、異なるクラスのオブジェクトが、同じメッセージに対して異なる応答をすることを指します。プログラムというのは非常に多種の処理が行われますが、それを実装する一番単純な方法は、それぞれの処理に対して異なる名前やインタフェースを用意することです。しかしそれでは効率が悪いばかりでなく、名前がやたらに多くなってしまってわかりにくくなります。そこで名前は同じでも、処理の受け手(オブジェクト)ごとに異なる動作をするようにしてしまえば、名前をやたらに増やさなくても多種類の処理を提供できますし、整理もできます。

さて多細胞生物においては、細胞間のメッセージのやり取りは主にサイトカインなどのシグナル伝達物質で行われます。サイトカインはタンパク質でできていて、体液の中を移動して、メッセージの受け手の細胞に到達します。メッセージの受け手側ではサイトカインの受容体があって、その受容体がサイトカインを感知すると細胞の中に信号を送ります。その信号をもらった細胞は、信号ごとの処理を行います。 問題は、ヒトのように複雑な多細胞生物では非常に多種類の処理が必要になるということです。一方でサイトカインによるメッセージ伝達ではサイトカインだけでなくサイトカイン受容体が必要で、しかもこれらはタンパク質によって物理的に作られる訳ですから、やたらに種類を増やすのは困難です。プログラミングでは名前文字列さえ変えてやればいくらでもメッセージの種類は無限に増やせますが(プログラムがわかりにくくなるだけで)、生物ではメッセージの種類を増やすのは相当な負担です。

そこで多細胞生物はオブジェクト指向プログラミングのPolymorphismとよく似た方法を使っています。多細胞生物の細胞は、分化しながら非常に多種類のサブクラスに分かれていきます。そして異なるクラスの細胞であっても、同じサイトカイン受容体を細胞表面に持ち、そしてサイトカインを受け取ったときにクラスごとの異なった処理が行われるようになっています。

例えばインスリン。インスリンは血糖をコントロールするサイトカインで、主に肝臓や脂肪細胞、筋肉細胞に作用します。インスリンがインスリン受容体に結合すると、肝臓と筋肉細胞では糖をグリコーゲンに変換して肝臓の中で蓄積します。脂肪細胞では脂肪の合成が促進され、結果として血液中の糖が脂肪に変換されます。このように、受け手の細胞が肝臓細胞か筋肉細胞か脂肪細胞かによって、同じインスリンが異なる処理を誘導します。

オブジェクト指向プログラミングの一番単純な形では、メッセージの受け手はしっかり決まっています。生物の場合は、サイトカインが血流に乗るのかどうかなどによって、遠くの細胞にメッセージが伝わるのか近くの細胞だけに伝わるのかが決まります。そしてサイトカインが物理的に到達した近辺の細胞で、かつインスリン受容体を細胞表面に持っている細胞のすべてにメッセージが伝わります。要するに、サイトカインの仕組みではメッセージの受け手は限定されませんし、受け手がオプトインすれば近辺の細胞はすべてメッセージを受け取れる仕組みになっています。オブジェクト指向プログラミングでいえばオブザーバパターンのようなものです。

Single Inheritance

生物は通常はSingle Inheritanceを行っていて、ここというときにのみMultiple Inheritanceを行います。

生物の細胞は通常細胞分裂(Mitosis)によって数を増やしていきます。このときは1つの細胞が2つに割れるだけで、親細胞の遺伝子と形質はそのまま子細胞に受け継がれます。細胞は分化して、元々は一つの受精卵だったものが目の細胞になったり骨の細胞になったり、神経細胞になったりする訳ですが、その際もずっとMitosisというSingle Inheritanceによって多様性を得ています。

動物の場合、Multiple Inheritanceを行うのは、減数分裂(Meiosis)と呼ばれる、有性生殖のための生殖細胞(精子とか卵子)を作るときだけです。面白いことにMeiosisを行う生殖細胞というのは、事実上stateがリセットされていて、ほとんど完全に未分化の状態に戻っています。それに対して分化してstateを持った細胞は、もっぱら上述のMitosisによって細胞を増やしていきます。

プログラミングでMultiple Inheritanceが嫌われる理由は、サブクラスのstateの問題が大きいらしいですが(私はmultiple inheritanceな言語を使ったことが無いのであまりよくわかりません)、生物ももしかすると同じ理由でmultiple inheritanceはなるべく避けているのかもしれません。そしてstateがリセットされた状態でのみmultiple inheritanceを行っているのかもしれません。

なお、多様性を生み出すメカニズムとしてmultiple inheritance的な有性生殖が非常に有効であることは、PCRを使った実験でも示されています。