methaneのブログ

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

C++導入のために

オブジェクト指向アレルギーなリーダー*1を持つチームで、C++を導入したい場合の話。広義のオブジェクト指向プログラミングのうち、モジュラプログラミングとデータ抽象だけを使って狭義のオブジェクト指向プログラミング*2を使わないと言えば、何とかなるかもしれない。
・・・ま、うちはムリだなorz
最近、状態変数の更新タイミングに関するバグを出してしまった。C言語でイベントドリブンなプログラム書くとどうしても状態変数が大量にできるので、イベントの発生順序全ての組み合わせにおいて全ての時点で状態変数の整合性を保つという事が難しくなってくる。良くある問題だが、教科書に載っているようなテスト技法*3では太刀打ちできない。しかし、C++のデータ抽象パラダイムを使うことでこの問題は非常に簡単になる。関連する状態変数をまとめて、操作する関数を定義して、一つの抽象データ型として扱えば、プログラムを書くときに注意しないといけない状態変数の数が数分の一に減るからだ。言語の力の差は、品質に直結する。

C言語でもC++と同じ構造でやれって?全ての関数にstruct Hoge *pthisって引数追加して、変数参照するときはpthis->foobarってするの?関数にPrefixを2段も3段も付けるの?本当にそんなグダグダコード書きたい?読みたい?
だいたい、C++使わないチームでそんなコード書いても、C++使えないチームメンバから見たら意味不明。結局、プログラミングパラダイムってのは言語に依存せざるを得ない。逆に、C++をチームで使うようになれば、メンバーがそのプログラミングパラダイムを習得する助けになる。開発期間が半年程度のプロジェクトでは、CMMなんかよりずっと劇的な品質向上が期待できる。

*1:無知が罪悪になるパターンだね

*2:プログラミング言語C++第3版 2.6

*3:同値分割、境界値テスト、パス網羅・・・関数の中で閉じたバグなら見つけられるけど、そんな簡単なバグなんて最初から作らないし