UMLモデルをどうやってC言語に落とし込むか
http://www.atmarkit.co.jp/fembedded/robocon/etrobo06/road03/road03a.html
続デスマーチの作り方.
その通り.*1
機能分割によりシステムを整理する構造化手法で考えたものをプログラミングするのに適した言語です。基本的にはデータと処理は分けて整理します。
書き方については難ありだけど,概ねその通り.
単に,C言語は良くも悪くもアセンブラに近いレベルで記述することのできる高級言語ってだけなんだけどね.C言語の長所も短所もこれに尽きる.
このためC言語では、クラス、継承、ポリモルフィズムといったオブジェクト指向の概念がプログラミング言語レベルでサポートされていません。従って、UMLモデルをC言語で実装する場合には、(C++言語ではサポートされている)これらの概念を実現する仕組みを明示的に実装する必要があります。
ということまで分かっていながら,なんでUMLに拘るのだろう.
なぜC++などという『欠陥言語』*2が作られたのか,その歴史的経緯を見ればこれがいかに愚かなことか分かりそうなものなのだが.
C言語はOOPには不向きで,そのままでは生産性が低下する.そこでOOPにも対応できるように拡張されたC言語としてC++が作られた.ただ当初はOOPに対する理解も不十分だったし,なによりC言語とOOPとの親和性がすごく悪い.「C言語互換」というC++の制約がそのままOOPとの親和性の悪さに繋がってしまった.また「必要な機能は全て入れる」という方針をとってきたがために言語仕様が肥大化し,誰にとっても使いにくい巨大言語となってしまった.
そのC++でもOOP言語としては問題があると言われているのに,非OOP言語であるC言語でOOPモドキをやることは無謀以外の何物でもない.
ここで「ラインをトレースする」と書いてある5%の部分が,工数の80%を占める最重要部分になる.*3残りの20%のほとんどがUML図から無意味で役立たずな雛形作りに使用される.*4
なおJavaなんかでも,「UMLモデルから言語へ落とし込む」なんてバカな真似はやらないよ.そんなことをすればデスマーチになること受け合い.
加筆:
で、痛烈に思い知ったこと。超メンドクサイ。C++で書くときの3倍くらい書かなきゃいけない。本質のアルゴリズムを書いている部分が、OOPを実現するためのコードに埋もれてる。
http://d.hatena.ne.jp/methane/20060704/1151964303
当たり前のようにフルアセンブラなんですが、メインプログラマが先進的すぎてOOPで組んだためバグがとりきれずバグバグだったそうな……。
http://d.hatena.ne.jp/Isoparametric/20060704#1151998228