methaneのブログ

このブログに乗せているサンプルコードはすべてNYSLです。

C言語でOOP

http://www.atmarkit.co.jp/fembedded/robocon/etrobo06/road03/road03c.html
ここに書かれている方法、C++OOPが判ってる人間がC言語OOPやろうとすると簡単に思いつくモノ。

僕も、やったことがある。学生時代に学校の課題で「探索対象の問題を最低2つ、探索アルゴリズムが4つ、組み合わせて実装して空間コストと時間コストを計測しろ」というのがあり、問題とアルゴリズムに抽象インタフェースを用意して、問題やアルゴリズムが増えても増えた部分だけ実装すればOKにした。

で、痛烈に思い知ったこと。超メンドクサイ。C++で書くときの3倍くらい書かなきゃいけない。本質のアルゴリズムを書いている部分が、OOPを実現するためのコードに埋もれてる。

OOPが必要ならC++くらい勉強しろと。id:JavaBlack氏はC++にもダメ出ししているけれど、仮想記憶が無い(MMUも無いことがある。うちとか。)のにソフトウェア規模だけ膨れあがってる組み込み分野では、OOP対応言語にはC++しかない。

本当は、C言語との言語の互換性はいらない(リンクはできないとだめ)から、ヘッダとソースが分離してなくてコンパイルが速くて型チェックが強力でメモリの動的確保に依存していない*1言語が必要なんだけど・・・D言語も違う道に行っちゃったし、だれか作ってくれないかなぁ。<自分で作れ

*1:GCなんてもってのほか