生物とオブジェクト指向プログラミング: 細胞とグローバル変数

細胞はグローバル変数問題で悩んでいた

オブジェクト指向プログラミングと生物の共通性については別に書いていますが(ブログ内検索)、最近、生物は一つの細胞内ではグローバル変数を使いまくっていることに気づきました。

プログラミングでは何かと悪者にされることが多いグローバル変数ですが、単細胞生物は基本的に1つの容器の中で様々な化学反応を起こしているので、信号伝達に関係する分子もあっちこっちに分散してしまいます。その意味で、その分子の濃度などは細胞の中でグローバル変数になってしまいます。グローバル変数になるしか無いのです。

その上、使用できるグローバル変数の名前は限られています。なぜならば、生物における変数というのは化学物質の濃度に相当するわけですが、化学物質のバラエティーはどうしても限られてしまいます。単に文字列を並べればいいというものではないので、いろいろな化学物質を作るのも大変ですし、それ以上に数多くの化学物質を特異的に識別することは大変です。

ですから、細胞はグローバル変数を使わざるをえない上に、使用できるグローバル変数の数が厳しく制限されています。グローバル変数が非常にぶつかってしまいやすい状況にあるわけです。プログラミングでは御法度となっているグローバル変数の乱用を、細胞はやるしかありません。しかもソフトウェア開発以上に、グローバル変数がぶつかるという問題にぶつかりやすいのです。

生物はこの問題を解決するために、部分的にローカル変数を作ってみたり、あるいは名前空間みたいなことをやってみたりしています。

例えば信号伝達分子を膜局在にしているのは、ローカル変数的なアプローチの一つです。そして特に細菌に多いと言われている巨大な融合タンパク質は、名前空間的なアプローチと言えると思います。しかし細胞内局在によるローカル変数のアプローチは、細胞内オルガネラの数だけしかできないという制限があります。それでも細胞骨格とシグナリング分子の相互作用などもだんだんと解明されています。またイメージング技術の発達により、今まで考えられていた以上に細胞内局在が重要だという知見が得られてきています。制限はあるものの非常によく使われている、有効な方法です。

融合タンパク質による名前空間の創出については、タンパク質が巨大化してしまい、本来の機能が犠牲になってしまいますので、広く使うことができないアプローチです。

上記のアプローチは単細胞の場合のものです。多細胞生物化すると、今度はオブジェクト指向プログラミング的なアプローチが可能になり、グローバル変数の問題が一気に解決されます。オブジェクト指向プログラミングでは各オブジェクト内部の変数は隠蔽されますので、オブジェクト間で変数名がぶつかる心配はありません。細胞も同様に、細胞Aと細胞Bのグローバル変数は全く別ですので、ぶつかることはありません。

多細胞生物は様々に分化した細胞の集団です。ですから同じ名前のグローバル変数であっても、細胞ごとに全く別の機能を持たせることができます。こうやって生物は、限定された数のグローバル変数しか持たなくても、多様な機能を持つようになったのです。

ちなみにプログラミングをやっていて、変数名がやたら増え始めたり、変数名がどんどん長くなってしまう時があります。また関数呼び出しの際に、複雑なパラメータを渡さなければいけなくなってしまうこともあります。こういう症状は、グローバル変数そのものではないにしても、何か変数の問題にぶつかっていることの証拠です。このようなときは、単細胞から多細胞に進化し、クラスをいくつか作ってみるのがベストです。