- - PR -
OOPがよくわかりません
| 投稿者 | 投稿内容 | ||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2002-12-10 15:48
こんばんわ、YKIDです。
#どんどん話題が派生していってますね。
その思い込みこそが危険ですよね。 全てのフィールドがpublicであってもその理由が明記されていれば、別に危険とも思えません。(理由が薄弱な場合は除く) 逆に、無意味かつ闇雲にアクセサ(getter,setter)を作るほうが、品質を落とす原因になると思うのですが。 #危険なコードとは、その意図や理由が第3者に伝わらないコードだと思いますよ。 | ||||||||||||||||||||||||||||
|
投稿日時: 2002-12-10 16:35
ちょっと表現が足りませんでしたね。 OOPの基本は,オブジェクトは内部の実装がどうなっているのかを隠蔽し、 可能な操作と属性のみを公開すべきと思うのですね。 そういう意味で,必要以上にpublicにするのはどうかと。 操作の不要なメンバ変数に対するアクセサも不要でしょう。
これは言うまでもありませんね [ メッセージ編集済み 編集者: tarnwo 編集日時 2002-12-10 16:38 ] | ||||||||||||||||||||||||||||
|
投稿日時: 2002-12-10 16:44
分析・設計と実装はオブジェクト指向ソフトウェア開発においてはつかずはなれずな関係となります。 そこに分断はないです。 ただ、分析・設計は実装からある程度の距離感が必要です。 この距離感が難しいのです。 JavaVMの仕様書(最新の物)は設計とは別です。あくまでも仕様は要求定義の部分だと思います。 これだけの機能を実装せよ。それが要求である。と記述があるだけで、実装内部の定義はまったくありません。 よって設計はJavaVMの分析・設計者にまかせられます。 このため、jikesやその他のVMなどは根本的な設計がかなり異なります。
ただしくないクラスをださないための分析・設計というのは歪な設計です。 あくまでも分析・設計においてはそういうことを考えるものではありません。 分析・設計は問題領域を客観的に観察し、クラスを構築をおこなうという非情なまでに冷徹な行為です。 異常なクラスが出るのは己のセンスを恥じることはあっても、それが正しいのだと強弁するようなことをするのはおろかです。
乖離に関しては距離感の問題です。 UMLのクラス図がどの程度実装を考慮しているかといえば、実際のところはそれほど考慮するものでもないでしょう。 実装できなそうだからUML図を変えるなどは本末転倒もいいところです。 YACとかPADは実装を考慮したといえますがそれは、コード直接書いてるのとあまり変わらず、設計というよりも分析・設計の実装側の飲み込み過程に過ぎません。
理論的背景しらずにオブジェクト指向のなんたるかは語れないです。 別にしらなくても経験だけでやってる、というのはおごりに過ぎません。 基盤なくして正確な理解はありえません。 役にたつ立たないで理論を語るのは変です。そもそもオブジェクト指向は理論により成立してる概念ですし、、、 理論しらずになぜUMLがああいう構成になってるのか、なぜそのデザインパターンがよいのかがどうやって理解しているのか疑問です。 経験的によさげだからよい、という理解なのでしょうか。 このあたりが疑問です。
用語というのは実際は曖昧性はない場合はほとんどなのですが、理解者が無理解だと変な使い方になり勝ちです。 基盤がないとおかしいことになる。よって初心者がよく用語をおかしく利用するのは仕方ないことなのかもしれません。 まあ、あまり厳密に利用しても混乱を招く場合がありますが、、、
元発言は思いこみかどうかは不明ですが、このあたりの話は理論的に証明されていますので、議論の余地はあまりないです。 あとは、その問題領域の仕様によると思われます。 参考になれば。 | ||||||||||||||||||||||||||||
|
投稿日時: 2002-12-10 18:09
ちょっと待ってください。属性と振る舞いが両方あってこそオブジェクトです。どういう意味で「フィールド」と言われているのかちょっと分かりませんが、privateにしてしまうから関係ないというのはおかしいと思います。そのオブジェクトがどのような属性を持っているのかは振る舞いを決めることと同じぐらいに大事です。 オブジェクト指向でモデリングだとか、設計だとかするときには 「このオブジェクトはこのような属性をもち、このような振る舞いをする。さらに、これらのオブジェクトとこういった関係がある」 といったモノを構築するわけで、privateだのpublicだのdoubleだとかを持ち出すのはちょっと違うかと。その名の通り「オブジェクト」指向です。だから一方的にメソッドのほうが大事なんだ!というのはそれこそオブジェクト指向ではありません。 それから、「属性」と「振る舞い」しか話題が出ていませんので、「関係」というのも付け足しておきます。 #もっと白熱するかな [ メッセージ編集済み 編集者: H2 編集日時 2002-12-10 18:10 ] | ||||||||||||||||||||||||||||
|
投稿日時: 2002-12-10 18:26
>通称「憂鬱本」とよばれる以下の書籍を参考にしてください
>http://www.amazon.co.jp/exec/obidos/ASIN/4881356194/ よく見ると,UML,CASEツール,オブジェクト指向設計,C++. おまけに悪名高き多重継承なんて章まである..... #少なくとも,これから判断する限りでは,私ならこの本はお勧めしません. Java,デザインパターン,リファクタリング,エクストリームプログラミング という私とは,話が全然かみ合わない理由が分かった気がします. | ||||||||||||||||||||||||||||
|
投稿日時: 2002-12-10 19:14
何事にもバランスは大切だと思います。
いくつかの前にぼくは関係に関して言及してます。 操作により関係が構築されるという感じです。
この本は1998年に出版された本で著者がJavaを単語しか知らない人なので一部に問題ありますが、あくまでもオブジェクト指向とは、を説明した本です。 オブジェクト指向の基本事項はたいがい抑えてあります。 無論多重の継承が可能であることは説明してあるのはオブジェクト指向の説明としては当然だと思います。 #中ではあまり利用しないでね、って記述があるのですが、、 #当然継承に関してもあんまり利用しすぎはよくないって記述があります。 Javaによりあった本としては オブジェクト指向とコンポーネントによるソフトウェア工学 http://www.amazon.co.jp/exec/obidos/ASIN/4894712636/ ですが、あまり基礎的って感じではないですね。。 あわせて読むと適切かもしれません。 #しかしぼくの記述は極端に読めるみたいだ。 #もうすこし緩やかな記述をつとめたいです。 | ||||||||||||||||||||||||||||
|
投稿日時: 2002-12-10 21:12
当たり前ですね。
読みましたよ。でも、あまり重点を置いていなかったように受けましたし、「操作こそ関係」と書いてありましたので操作と関係を同じものとしていたのかなぁと思ったので前記の投稿をしました。 何となく違うなぁと思うのが、「操作により関係が構築される」や「属性にあわせてメソッドを作成する事はない」などの振る舞い(メソッド)がオブジェクトの中心であるという部分です。「関係があるから操作が必要」と言えるし、「この属性の操作のためにメソッドを作る(特にBeanのプロパティはそういう傾向があります)」というのもアリだと思います。もちろん極端な話をされているのは分かりますが、初めてオブジェクト指向を触った人が誤解すると困ります。 また、オブジェクト指向とはアイディオロジーであり、メソドロジーではありません。ですので、「これがオブジェクト指向においての正しいやり方だ!」という答えはないかと。悪夢を統べるものさんが取るデザインパターン・リファクタリングのような実装フェーズを頭に置いた開発過程でも、sakitoさんが言われるような分析・設計を重視した開発過程でもどちらでも良いのではないでしょうか。バランスと言うやつですね。 (個人的にはsakitoさんのような分析・設計を重視していますが。)
お勧めですか。メモメモ・・・。興味があるので早速読んでみたいと思います。感想はまた後ほど。 | ||||||||||||||||||||||||||||
|
投稿日時: 2002-12-10 23:30
ええ。でも意外に実践はできない物です。 かたよってしまう事も多く反省しなければとよく思います。
まあこの場で全てを書いているわけでないし書ききれないので(^_^;
なっとくできます。ぼくはある程度人に印象を与えるために一定方向に傾斜した文章を記述していますが、この記述で再考しない人はどちらにしてもあまり認識が深くならない可能性もあります。 つねに他者の記述した文章に対しては鵜呑みにせず、自己で検証する行為が必須と思います。 なんとなく違うな、って部分から、いろいろ検証再考察し、こうだからこの場合は違うというある程度の明確さを保持できるようになると、設計などによい影響があるのかもしれません。
まあ、あくまでも参考という事で(^_^; # 結構話しふくらんじゃいましたね。。息切れぎみです。 # まあすべて参考までにという事で。自己検証はわすれないでくださいね。 # ここ読んだ方へ。 | ||||||||||||||||||||||||||||
