忘れられたモジュール指向設計

OOとかMDDとか言われてますが

組込み…(と、ひとくくりにするのは大間違いな気もするこの頃ですが)…では、

  • 使用言語のトップは未だCだがC++が増えてきている。
  • UMLやSysMLからコードを生成できるツールが登場してきている。
  • 大抵のプロセッサ向けのCコンパイラC++もコンパイルできる。(と勝手に思っている)
  • ある程度大きくてWEBに繋がるシステムならAndroidが選択肢に入る。

という、「昔ながらのCでの構造化設計はいずれ段々なくなっていって、みんなOOしてMDDしてフレームワークを使うことも覚えてハッピーになるんですよー」と言えば「そうかー」と言われそうな状況なのかもしれませんが、私にはあんまりそうは思えません。むしろちゃんと構造化設計ができないまま言語がC++Javaになったところで…モデリングという考え方を覚えないままMDDツールを使ったところで…ゴミはゴミ、スパゲッティはスパゲッティという状況は変わらないか、悪化するのではないかと懸念しています。

言語仕様は構造を考えるスキルを解決しない

SI業界(日本)のJavaプログラマーにはオブジェクト指向より忍耐力が求められている? - 達人プログラマーを目指して
私はよく知りませんがSI業界という業界があって、そこではJavaを使って開発するのが一般的らしいです。が、この文を見る限りではせっかく言語がJavaでも考え方が処理中心設計のままで、それが構造に現れていますね。

あまり語られなかったモジュール指向設計

処理中心設計とオブジェクト指向設計の間にある考え方…モジュール指向設計。この辺の話はC言語の書籍に無いかと探してみましたが、全くもって載っていません。よく書いてあるのが以下の2エントリーです。(私のエントリーよりこっち2つを良く読んだ方が良いです)
オブジェクト指向
モジュール指向プログラミングのすすめ - 千里霧中の犀

このような考え方が処理中心設計とオブジェクト指向設計の間にあるはずなのですが、そのことはなぜか全然語られないまま時は過ぎ…必ずオブジェクト指向になると謳われた仕様を持った言語ができました。しかしそれは構造を考える人と考えない人の差を埋めるには至りませんでした。ましてや職業プログラマでCのみ使える人がスコープ・依存関係・責務のマッピングの重要性に気がつくことは少ないです。…というのが職場や同職の友人や上記に紹介したようなブログから考えられる職業プログラマの印象です。

私の周囲ではC言語しか触ったことが無いという人も多いのですが、Cでも

  • カプセル化情報隠蔽の考え方をもって、責務と依存関係を考慮した構造を設計することができる。
  • 全て静的なシングルインスタンスとなる。
  • OOと同様に分析モデル、設計モデルを考えて設計できる。

というのを理解できることが、目の前に来ているC++やMDDにサクサクと進むための前提条件ではないのかなと思います。