Index: [Article Count Order] [Thread]

Date:  Wed, 13 Oct 2004 02:01:18 +0900
From:  Nakamura Akifumi <********@*****.**.**>
Subject:  [oosquare-ml:04390] Re: 現場では言葉だけが先行していませんか?
To:  ***********@***.***.*******.**.**
Message-Id:  <***********.****.********@*****.**.**>
In-Reply-To:  <**************.****.*******@***.******.**.**>
References:  <*****************@***.****.********.**.**> <**************.****.*******@***.******.**.**>
X-Mail-Count: 04390


お世話になっております。 A.中村です。

On Sat, 09 Oct 2004 22:22:09 +0900
The Murayama様 *******@***.******.**.** wrote:

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

あれをOO(P)の三本柱と呼ぶことのほうが、
個人的には嫌いです。

#それ以前にOOって、「同一性」とかが土台ですし。
#それとも土台と柱は違うっていうことなのかな…

言語実装次第じゃカプセル化も無かったりしますし。

> #万が一あってもOOA/OOD屋は使いこなせていない.

ですからOODを自作すればいいんです。
「ある」ようなOODを。
「使いこなせる」ようなOODを(^^;



> 言語や実装を
> 限定せずに設計している時点で,その設計は通常は使い物になりません.実装を
> 知らない設計は,正に机上の空論です.

逆もいえるのでは?
実装を(完全にではなくても或る程度は)抽象化しないのならば、
それはそもそも設計と呼ぶに値しませんよね。
実装そのものの字面を変えただけです。

実装のことしか考えないなら、
それは設計ではなく実装であるわけで。

そういう意味で、あなたの仰る「設計」は、
少なくとも私の(^^;の思っている「設計」とは一致しない何か
を指している言葉であるような気がします。



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

それはObjectOrientedと無関係では?

(実在する大抵の)OOP言語は、OOP言語であると同時に、
それ以外の幾つもの面を備えています。

卑近な所ではそれこそJavaだとマルチスレッド機能が有るとか。

でもそれはOOPの話題じゃないですよね?

単に、実装言語が、総合芸術(?)だというだけのことでしょう。
OOP言語(でもある言語)のOOPと無関係な部分を
OODが設計できなからといって、
それはOODの責任と呼ぶわけには
いかないのでは?

もしそれじゃ実用的じゃないという点を懸念なされるんでしたら、
単にOODとそれ以外の設計技法とを組み合わせて使えば良いだけ。


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

SmalltalkをMessage指向と呼んでよくて
C++を呼んじゃ駄目なのが、何故なのか?
ってのが旨く説明できない(と私は思う)など、
あの辺の説には、ちょいと違和感感じています。


そういえば
http://www.netgene.co.jp/java/docs/swest5pp.html
を少し読みましたが、ちょっと首を傾げました。

>オブジェクト指向設計やUMLの世界では,これが
>「責務(responsibility),関係(relation),ロール(role,役割)」か
>何かになるそうな.これだけを見ても JavaなどのOOPと,
>UMLなどのOOD/OOAとが全く異なる世界の産物であることが伺える.

とのことですが、
責務なんてObject指向で考えるときにもCodingする時にも
どちらも意識するでしょう?
関係だって意識するでしょう?
ましてRoleなんてバリバリ意識するでしょう?

(ちなみにRoleは最終的には「変数(名)」に落ちますよね。
 不幸なことにRoleを直接サポートする仕組みは
 殆どの言語に搭載されていませんが、
 Roleを「考えないわけにはいかない」ので、
 とりあえず変数(名)で代用しちゃえっていう感じかと。)


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

GoFって
あの一番有名なDesignPattern(集)のことですよね?

だとすると、あれが「Design」Patternであることが
(あなたにとって)重要ではありませんか?

GoFは実装Patternではなく設計Patternですよね。
それでもって「OOP」を理解するとは、これいかに?