組込系こそC++で

手続き指向のもっとも良いサンプルはお役所の窓口だ。

何でもかんでも手順化してあり、その意味を知る必要がないようにしてある。

これには頭を使わなくて良いという素晴らしいメリットがある。

しかし、実体としては1つしか存在していない一人一人の人間を、あるときは住民基本台帳で、あるときは年金受給者の一覧表で、あるときは納税者の一人としてそれぞれ別個のものとしてみるため、それぞれの用途・物差しに合わない使い方が現れた時に対応が難しい。新しい手続きを作る事になる。

オブジェクト指向というのは日本語としてはダメで、私も「目的」というとらえていた時期もある位(それでもある程度理解は可能)、訳分からない言葉なのだが、要は対象物(オブジェ)をそのまま対象物としてとらえるための仕組みだ。行方不明の100歳以上のある一人のおじいさんは、そのおじいさん自身であって、住民基本台帳には存在していたり、履歴には存在していなかったりする名前の事だけではなく、そのおじいさん自身としてとらえ、見方によってどのように変わるかを表現するための仕組みなのだ。

だから、どのような切り口で見たら振る舞いがどのように変わるかという点では手続き指向な見方と大差ないのだが、実体が存在しないとなれば、直ちにどの切り口からも見えなくなるという点で、実に現実に近い「存在」というものの表現方法だと思う。

手続き指向が縦割り行政なら、オブジェクト指向は何だろう。国民総背番号制、は単なる実装方法だな。

さて、組込系といえばアセンブラ、RISCプロセッサだと面倒だから高級言語で、アセンブラと同様手続指向な言語で、という流れでCが採用されるんじゃないかと思うが、やっぱりここでもオブジェクト指向の方が向いていると思う。

ハードウェアは大抵限られた実体しか持たないが、プログラム上ではそれを別の概念で取り扱う事は多い。ここで実体は一つの仮想的なクラスの一例として予め持っておき、必要に応じて実体の参照をもらうように実装すれば、割とよくある表現で記述できる。手続き指向だとおまじないがたっぷり続くが、オブジェクト指向なら、継承したクラスで実体化する手順として隠蔽できるから、本来のロジックだけが浮き上がるように記述でき、プログラムがすっきりするのである。

ハードウェアの操作ではなく、例えばその結果として生成されたメモリオブジェクトなんかは、普通のクラスの実体として生成・消滅させれば良い。オブジェクトがなくなっても、消滅時にデストラクタが評価されて話は済む。

手続き指向からオブジェクト指向への壁は割と高くて厚いが、乗り越えると色々と楽になる。組込系のしちめんどくさい約束事羅列的な記述もかなり隠せるようになるので組込系こそCやインチキC++(C++で拡張された文法を使って記述したC)ではなくC++で実装して欲しいと思う。