ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

オブジェクト指向が苦手コミュのOOはなぜ難しいか。

  • mixiチェック
  • このエントリーをはてなブックマークに追加
経験豊かな人によってよく考えられたクラス設計は、無駄がなくて美しいものもありますが、いざそれを自分でやろうとするとあらゆる局面でつまづいてしまいます。

なぜか?

コメント(111)

確かに水掛け論になりそうなんでそろそろやめときたいですが。
手続き型プログラミングで苦労した人が、OOを教えられて一気に開眼するということは有ると思います。

プログラミングをまったく知らない人に最初に教えるのがOOだと言う場合、JAVAやC++の教科書に載ってるような数10行のtoyプログラム(有用性を示す断片が数10行じゃなくて、一切合切ひっくるめ手数10行ですよ!)では、どうも有用性が理解できないようです。OOを使わないとどうなるかを知らないわけですから当然といえば当然かも。

うっかり放っておくと、メソッドの引数は無し、データはグローバル変数で渡すなんてプログラムをJAVAで書いてみたり。
自分で痛い目を見ないと落とし穴を避ける癖がつかないのが凡人。人の振り見て我が振り直せるのが有能な人。というのが学生を見ている感想です。
>>72
・「リファクタリング」
・「パターン指向リファクタリング入門」
・SmalltalkでもOKなら「Smalltalkベストプラクティス・パターン」

あたりの書籍は「まあまあなコードとよりよいコードの比較もできる」ので、そういう目的でもよいかと思われます。どれも短めのコードですが。
> ・SmalltalkでもOKなら「Smalltalkベストプラクティス・パターン」

同じ筆者、ほぼ同じ内容で Java 向けの「Implementation Patterns」が、つい先頃発売になりましたね。

http://www.amazon.co.jp/exec/obidos/ASIN/0321413091/
>>75
む。Java版は“Essential Java Style”がすでにあるはず…。Kent Beck先生的には不足だったのかなぁ。
Javaを覚えたての学生でも、実践的なプロジェクト実習の中で指導していくと、どんどんオブジェクト指向っぽいプログラムを書けるようになっていきますよ。まずは動くプログラムを自分で書かせて、その後でオブジェクト指向っぽく書くとどうなるかを理由つきで解説してやると、身につくようです。初心者でもよいプログラムと悪いプログラムの比較はできますからね。(逆に比較すらできない人は、どんな言語でもまともなプログラムは書けないでしょう。)

デザインパターンも書籍で勉強させるより、自分で書いたコードに後から適用して説明してあげるのがいいと思います。開発プロジェクトの中だとデザインパターンが必要となる理由も明らかですから、理解し易いようです。ただ、このような教育はひまな大学だからできる話なのかもしれません。
オブジェクト指向と手続き型のプログラミングを比較すれば其々にメリットデメリットがあるので開発はそれを考慮するべきなんですが、人によっては「Javaならオブジェクト指向に決まっている」などと決め打ちする人がいます。これは僕には暴論に思えます。Javaでも手続き型を選択する方がいい時もあります。

また、デザインパターンを適用すべきか否かは、コンテクストを理解しなければ逆効果となることもよくあります。この辺を甘く考えている開発者が少なくありません。
がると申します。
ちと内容的に興味が引かれるので参戦を。

んと…とりあえずまず。皆様に質問をしてみたいのですが。「OOはなぜ難しいか」という文脈におけるOOをどんな風に定義してらっしゃるんでしょうか?
というのが。
私は「OOなんて簡単じゃん」派なのですが。それは、見方を変えると「OOという概念のなかから、とりあえず簡単に使える上にうまみのでっかい部分を取り出して使う」傾向が高いからでもあります。

なので、そのあたり、いろいろな方のお話を伺ってみたいかなぁと思うのですが如何でしょうか?
もし全員の共通見解が出なかったとしてもなお、多くの方にとって「様々な意見を知る事が出来る」のは、とても大きな事だと思うのですが。
>>80
設計から言語まであるでしょうね。

僕はコーディングレベルでOOしています、というか…。ある程度がっと書いて、重複をなくすためにくくってくくってクラスが抽出されて、というぐらいなのです。

ダブルディスパッチは何かインチキをしているように見えます。OOな設計はできません。
> 設計から言語まであるでしょうね。
分析から実装(プログラミング)まででしょ。
特に OOA が複雑なシステムでは重要ですよね。
うーん。開発現場から離れて久しいので現状をよく知らないのですが、OOAってそんなに役立っているのでしょうか?

まぁ、ユースケース図やER図くらいならかなり上流でも使えるように思いますが、たとえば分析の段階でクラス図なんて書いても意味があるんでしょうか?
> OOAってそんなに役立っているのでしょうか?
役に立つ立たないの話なんですかね?
OOA はオブジェクトの抽出と抽出したオブジェクトの関係を明確化する作業だと思っていますが、違いますか?
正直、いまどきの標準的なJavaのWeb系システム/アプリケーションの開発ではGUI層は既存のフレームワーク層に乗っかるだけだし、DB層はRDBのE-RモデルそのままのDAOにアクセスするエンティティ設計で済ませてしまえるから、それだけで済む開発をやっているとOOAの必要性はあんまり感じないかもしれないと思ったり。
>>80
私も同じ意見ですね。
発想を変えるとオブジェクト指向は分かりやすいと思います。
元々smalltalkは「雑談・世間話」という意味で開発者は「子供の教育向け」に使いたかったそうですよ。
http://www.kanshin.com/keyword/14701
これからは関数言語の概念が注目されるでしょうね。
Sahmaroさん

>OOA はオブジェクトの抽出と抽出したオブジェクトの関係を明確化する作業だと思っていますが、違いますか?

ちょっと分からないので確認させていただきたいのですが、

1. 抽出は完成した仕様書からされるのでしょうか?それとも、要件定義をしている途中段階でするのでしょうか?

2. 抽出したオブジェクトやそれらの関係は、どう記述するのでしょうか?クラス図でしょうかオブジェクト図でしょうか?

3. 記述したものは、設計工程で使うのでしょうか、それともそのまま実装工程に引き継がれるのでしょうか?別の質問をすると、記述したものは誰が見るのでしょうか?

私の予想ですが、OODでなくOOAというからには、設計よりも前の段階で行われるのでしょう。そうすると出来上がったものは、設計図よりも抽象度が高いもののはずです。私の疑問は、そんな抽象度の高い図を作成して一体誰が嬉しいのかということです。そんなもの見るより、自然言語で丁寧に書かれた仕様書の方がずっと当てになるように思うのですが、いかがでしょうか?
86 otakutalker@土フ60b さん
なるほど、オブジェクト指向開発といっても OOA を必要としない場合もあるのですね。

89 おとん さん
フリーソフト屋さんは1人で創っているだけですよ。
オブジェクト指向開発には分析が必要でしょと言っているに過ぎませんよ。
Sahmaroさん:

複雑なシステムでOOAが必要ということでしたので、てっきり大人数で開発されているのかと思いました。1人で創っているということでしたら、私の89の質問は完全に的外れでしたね。失礼いたしました。

イチローさん:

私の「抽象的」という言葉がまずかったかもしれません。なぜその仕様にしたのかとった情報は確かに大切なのに抜け落ちがちなものですね。そういう情報の必要性についてはよく理解しているつもりです。

図の重要性についても理解しているつもりです。そういう意味で、84でユースケース図やER図は上流でも使えそうだと書いたつもりなのですが、実はユースケース図もER図も純粋なOOではないんですよね。仮に分析工程でクラス図を描くとしても、ほとんどがER図的にしか使っていないんじゃないかと想像しています。

あまり上流でクラスのようなものをがっちりと定義してしまうと、それが一人歩きしてしまうのではないかという懸念があります。
92 おとんさん
確かに紛らわしい書き方をしていましたね。申し訳ありませんでした。
私は4年近く前に Tucker!著「憂鬱なプログラマのためのオブジェクト指向開発講座」という書籍を読んでかなり衝撃を受けました。
この書籍では最後に魔法陣を対象に分析・設計・実装が記載されているのですが、分析からクラス図を扱っており実装までシームレスに作業が流れている点は驚きでした。と、同時にこのような小さな問題領域にも適用できるものだということを知った次第です。
さらに分析がなければここに提示された実装には至らないであろうと感じました。
ですので、みなさんプロの方は分析に時間をかけているのかと想像していましたが必ずしもそうではないようですね。
繰り返し型開発かそうでないか、設計する人と開発する人が同じか異なるかによって、実装に入るまでの時間のかけかたが違うと思うのです。

そこらへんが相手と自分とで同じだと思っていと、話がずれるんじゃないですかね。
OOを単に「クラスを使ったプログラム」として捕らえるか「設計分析から保守まで考えた手法」として捕らえるか、人によって違うように思えます。

一般には前者です。
>>95
それって「OO=OOP」っていうのが「一般」の認識、という意味でしょうか。
> それって「OO=OOP」っていうのが「一般」の認識、という意味でしょうか。
世間では少なくともOO=OOA/OODではないと思います。
それが正しいか否かとは別問題です。
>世間では少なくともOO=OOA/OODではないと思います。

どこにも存在しない主張を否定して、何がしたいのでしょうか。
OOPはOOではないと主張している人でも、どこかにいるのですか?



※98は記入ミスにつき削除しました
がるです。
>> 99
多分、97番でchunさんがおっしゃりたいのは
・OOPはOOではない
ではなくて
・OOは、OOPやらOOAやらOODやら色々な概念を包括しているはずなのだが、実際にはOOというとそのままOOPに直結してしまい、OOの中にOOAとかが入ってることを失念してしまっている人が多い
という意味合いではないでしょうか?

実際、私もあちこちで話をして、OOの話をしているのになぜかOOPに固有の話と混合されてしまうことが多いというのは実体験としてあるので。

>>100
そうですね。だから私は>>96でそういう意味でしょうか、と書きました。

別にOO=OOPのような考え方「をする人がいる事実」を私が否定しているわけじゃないんだけどなあ。誤解を招いたかもしれませんが。
広い世の中には、ろくにプログラミングもできないくせに分析とか設計をやっている人もいたりするんでしょうか?ちょっと心配してます。

ソフトウェア工学の歴史は概ねプログラミングパラダイムの変化を契機として発展してますよね。構造化プログラミング→構造化設計→構造化分析のような形で。

OOA/OODもOOPがあって出てきたものですが、そんなに単純に話が進んでいるわけでもないようです。UMLで有名なスリーアミーゴは、UPではユースケースドリブンを根幹に位置づけています。欧米では、「要求定義書にあらわれる名詞をオブジェクトとみなして。。。」なんて素朴な捉え方は、最近どうも廃れてきているようにも見えます。一部の熱狂的な信者によって支持された時代から、広く実務で生かされる時代へと成熟してきたのかなぁ、なんて想像しています。まぁ単に「OOAなんて胡散臭い」という先入観で私が見ているだけの話かもしれませんが。。。
> がるさん

> ・OOは、OOPやらOOAやらOODやら色々な概念を包括しているはずなのだが、実際にはOOというとそのままOOPに直結してしまい、OOの中にOOAとかが入ってることを失念してしまっている人が多い

> 実際、私もあちこちで話をして、OOの話をしているのになぜかOOPに固有の話と混合されてしまうことが多いというのは実体験としてあるので。

御意。
このトピでも「OOは簡単」というコメントが出ていますが、おそらく「OOPは簡単」という意味だと推察します(もしOOADは簡単というなら僕の勘違いですが)。とすれば、この「OOは簡単」というコメントを違和感なく受け取る方はOO=OOPという常識があるからではないでしょうか。

OOが難しいという方とOOが簡単という方たちの認識がすれ違っているように思えます。


> おとんさん

> 広い世の中には、ろくにプログラミングもできないくせに分析とか設計をやっている人もいたりするんでしょうか?ちょっと心配してます。

いると思います。
実際、今の僕のいる現場にも結構います。

> 分析の段階でソート方法なんてどうでもよくて

機能分析ではそうですが、非機能分析ではソート方式検討は行われます。「ソートは実現できないかもしれない」の分析ではなく「ある性能基準をみたして」です。

#分析=機能分析も一般的ですね。
教科書には、「分析の段階でクラス図を作る場合、あくまでも開発対象のモデルとしてのクラスであり、後のプログラミングの際のクラスと1対1対応するものではない」とか書いてありますよね。
> 107
やはり分析というと一般にはモデリングですかねぇ。
でも、OOAでクラス図を作るって、実際のところどうなんでしょうかねぇ。ERDがあれば要らないんじゃないかと思うし。

現場でそういうこと(OOAによるクラス図の作成)にトライするのって意義はあるけど難しいと思います。よほどちゃんとやらないと設計者たちの自己満足にしかならないです。そのとばっちりが来るのは下流の実装担当者です。
補足。
OOAが難しいと言ったのは「OOAの経験者が少ない上に流派も多岐に渡っているので共同作業が難しい」と言う意味です。これを解決するには標準作成と教育実施が必要となります。つまりお金がかかります。

ログインすると、残り81件のコメントが見れるよ

mixiユーザー
ログインしてコメントしよう!

オブジェクト指向が苦手 更新情報

オブジェクト指向が苦手のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。