Index: [Article Count Order] [Thread]

Date:  Sat, 09 Oct 2004 22:22:09 +0900
From:  The Murayama <*******@***.******.**.**>
Subject:  [oosquare-ml:04379] Re: 現場では言葉だけが先行していませんか?
To:  ***********@***.***.*******.**.**
Message-Id:  <**************.****.*******@***.******.**.**>
In-Reply-To:  <*****************@***.****.********.**.**>
References:  <********.*******@***.**.**> <*****************@***.****.********.**.**>
X-Mail-Count: 04379

村山です.

> このあたりなのですが、OODやOOAは言葉どおりに理解すれば、さわださんが主
> 張されているような、OOPのメリットを最大限に引き出すための分析と設計だ
> という意味になると思います。

まず用語について再確認します.
OOP:Object-Oriented Programming,オブジェクト指向プログラミング
OOD:Object-Oriented Design,オブジェクト指向設計
OOA:Object-Oriented Analysis.オブジェクト指向分析

これを「字面だけ」を見て考えると,
「OOPとはオブジェクトを中心にすえたプログラミング手法だ.」
「OODとはオブジェクトを中心にすえた設計手法だ.」
「OOAとはオブジェクトを中心にすえた分析手法だ.」
となります.

しかし「オブジェクトさえあればOOPか」というと,通常はそれは間違いです.
言語ごとに差異はあるとは言え,「オブジェクトがあるだけ」ではOOP/OOP言語
としては認められていません.そういう「俗流OOP」のことも含めてOOPと言って
る人もいますが,おそらくは俗説です.

こういう字義通りで認識するやり方は極めて危険で,大抵は誤った方法です.

#むかし,RISCで同じ事言われたことがあります.
#字義通りに訳すと「縮小命令セットコンピューター」だけど,RISCの定義と
#命令数とは無関係なのです.その本質は固定長命令や命令フォーマットなど
#なんですね.VLIWも同様.「超長命令語」と言いつつ,命令長とは無関係.


> OOPとOOAとOODは何が違うから違うのかとか、
例えば,
「カプセル化,継承,ポリモフィズム」
こういうOOPの三本柱さえOOA/OODには満足にありません.
#万が一あってもOOA/OOD屋は使いこなせていない.


それから同じ「オブジェクト指向言語」でも,実際には言語によって様々な「オ
ブジェクト指向」があります.動的最適化,並列処理,型安全性,リフレクショ
ン等々,言語や実装が変わればそれにあわせて設計も変わります.言語や実装を
限定せずに設計している時点で,その設計は通常は使い物になりません.実装を
知らない設計は,正に机上の空論です.

Javaくらいの言語を扱うようになると並列プログラミングも必要になってきます
が,こうなると静的な解析手法はほとんどお手上げです.並列処理が扱えない設
計手法は,並列プログラミングを基本機能として持つ言語には既に力不足なので
す.

> もしよろしければ、その理由かポインタを示していただけないでしょうか。
http://d.hatena.ne.jp/sumim/20040525#p1

http://www.amazon.co.jp/exec/obidos/ASIN/0136291554/249-0972250-7798709
http://www.amazon.co.jp/exec/obidos/ASIN/4894717794/249-0972250-7798709
http://www.amazon.co.jp/exec/obidos/ASIN/4797311126/249-0972250-7798709
http://www.amazon.co.jp/exec/obidos/ASIN/4894714361/249-0972250-7798709

#案外これも良いかも.
#http://www.amazon.co.jp/exec/obidos/ASIN/4894717549/249-0972250-7798709

ざっとこんなものでしょうか.
GoFが出る前は,OOPの使い方を理解するのは大変でしたよ.
今じゃ随分と楽になったものです.