July 30, 2006

UMLに関するメモ

だらだらメモ:

■変なUML
独自に拡張したような感じの、変なUMLを描く人がいる。
そういう人は、「もしかするとこれはUMLじゃ表現できないものかもしれない」ということを考えてみるべきだと思う。

もしくは、まず非UMLな図で表現してみて、それをUMLに落とし込んでいくのが良いやり方かもしれない。
でも人に見せる時は「非UMLな図」の方が伝わったりする。
絵の上手い下手にもよるけど。

■非UML図を描く時の注意点
非UML図を描く時は、混乱を避けるため、UML に見えてしまわないように気をつける。

■UMLよりもわかりやすく、誰にでも理解できるツールがある
「文章」がそれ。
文章でストーリーを書くと、動きをイメージしやすくなる。

以下、かなり想像および妄想入ってます:

■UMLが嫌いな理由
おそらく僕はUMLが嫌いなんだと思う。
どこかの誰かが勝手に決めたことに従わなければならないのが我慢ならないんだと思う。

UMLの思想が気に食わない。
広い範囲をカバーしようとしすぎ。欲張りすぎな気がする。
クラス図とシーケンス図以外はほとんどまともに使ったことがない。
クラス図とシーケンス図に関しては「発明しれくれありがとう」と言いたい。
ていうか、元ネタはこれらできる以前にすでにあったのかな。

今のところUMLには、ソースコードを図に置き換えるぐらいの用途でしかその価値を見いだせない。
ソースコードを図で正確に表せるというのは本当に素晴らしいと思う。
例えば、継承関係を表現するのにクラス図の表記法以外のやりかたは思いつかない。
でも逆にUMLは、ソースコードから離れたところではあまり使い物にならない気がする。
いや、使い物にならないというか、使うメリットがない。
UMLを駆使した基本設計書とかあったとしたら、うーん、見たくない。

結局、UMLはプログラマ同士のコミュニケーションにしか使えない。
それに、プログラマ同士のコミュニケーションにおいてもUMLが有効な範囲は限られてくる。
結局、あるクラスの動きを知りたければJavadoc等を読むことになるし、もっと詳細が知りたければソースを読むことになる。
また、クラス図はクラス同士の関連を表すのに便利なんだけど、Eclipse等の高機能なIDEを使えばだいたいの関連はすぐに把握できてしまう。
詳細なクラス図を見れば、クラス同士の関連がソースコードに近いところまでかなり把握できるけど、やっぱそれにも限界があって、その先はソースを見るしかない。
ま、実際にはクラス図だけを見るなんてことはなくて、それを補足するための文章があったり口頭での説明があったりするんだけど、実はその文章なり言葉なりの方が重要だったりする。
クラス図はたんなる補足資料というわけ。
逆に、クラス図だけを見て、言葉による補足なしにその意味をちゃんと理解できるのかなぁ?って思う。

■UMLの良いところ
UMLによって、多くの人が「絵で表現することの重要性」に気づいた。(多分)

■UMLはアーチストには向かない(戯れ言)
えー、僕は自称アーチストなわけですが、そいう人間にとっては、UMLは表現のを狭めるだけのものでしかないわけでして。
で、なんと言いましょうか、アーチストは壁をぶち壊すことも時には必要ですし、そのとき、既存の枠組みは単なる足かせでしかないわけでして。

■道具としてのUML
人は道具によって思考が制限される。
なぜなら、ある道具使い始めると、その道具によって表現可能な方向でしか思考を展開できなくなるから。
人はそういった思考パターンに簡単にハマる。
例えば、Java しか知らないプログラマは、Java の流儀でしかプログラムを考えることができないと思う。
それ以外の可能なプログラムというものを知らないから、想像しようがないのだ。
そういう意味で、UMLは人間の思考をすごく制限してしまう道具だと思うのだ。

クラス図に登場するクラスの箱にメソッドやフィールドの情報が大量に書かれているのを見るのが嫌いだ。
絵で表現できることはたくさんある。
確かに標準化や統一性というものは大事だけども、コミュニケーションにおいて一番重要なのは「最短時間で相手に伝わること」だ。

UMLは、ほとんど箱と矢印で成り立っている。

あと、UMLで書くと特徴のない絵になる
正直、どれもぱっと見ただけだと同じに見えてしまう。
色をつけたりすれば良くなるかもしれないけど、変な小細工は混乱の元になりかねない。

2 Comments »

  1. Comment by こじま, July 30, 2006 at 14:02 #

    前もコメントしましたが、UMLはプログラマ同士の意思疎通に使う道具としてはよくできてると思います。

    それ以外のところに適用しなければいいだけで、別に嫌うほどのものでもないような気がします。

    >逆に、クラス図だけを見て、言葉による補足なしにその意味をちゃんと理解できるのかなぁ?って思う。

    もし把握できないとしたら、設計に問題がある*可能性が*あります。

    # 別にUMLがなくても、IDEでクラスブラウザ使ってもいいんですけどね。

    道具ができることを制限するというのには同意です。でも制限っていうのは思考の手助けにもなるものです。だから、プログラミング言語は制約を加える方向で進化してきてます。機械語を使うのがもっとも自由でしたしね。

    Javaしか書けないひとがJavaでしか考えられないというのは確かに問題です。でもそれに対する解決策はJavaを使わないことじゃないですよね。Java以外の世界を知ることです。UMLについても同じじゃないでしょうか。

    また、UMLに関していうと、表せる範囲があまりにも狭いので「それ以外のことが考えられなくなる」ことはまずないと私はおもっています(というか、そんなひとはプログラマにならないほうがいいです)。

    ついでに、クラス設計するときにはUMLのクラス図の制約下でやったほうがよいこともよくあります。あまりにも自由なものはひとに伝えるのが難しく、把握も難しく、趣味ならともかく仕事で書くコードには適さないことが多いように思います。

  2. Comment by jugyo, July 30, 2006 at 20:55 #

    こじまさん、いつもコメントありがとうございます。

    > 前もコメントしましたが、UMLはプログラマ同士の意思疎通に使う道具としてはよくできてると思います。

    これには同感です。
    他人に自分の作ったプログラムを手っ取り早く説明するには、今のところUMLを使うのが一番効率が良い気がします。

    > それ以外のところに適用しなければいいだけで、別に嫌うほどのものでもないような気がします。

    確かにその通りですね。ブログには書けないような、ちょっとした事情がありまして、ちょっと愚痴っぽくなってます。すみません。:-)

    > あまりにも自由なものはひとに伝えるのが難しく、把握も難しく、趣味ならともかく仕事で書くコードには適さないことが多いように思います。

    おお、僕にはこの視点が抜けてました。
    確かに考えようによっては、システムのほとんどの部分が、UMLで普通に設計および表現できてしかるべき、という気もしますね。

    ていうか、まだ僕はUMLをうまく使いこなせていないんだと思います。
    活用すべき範囲をうまく見極めるべきなんですね。

TrackBack URI

Leave a comment

※上の項目は入力してもしなくてもよいです。