みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

オブジェクト指向の教え方

新入社員にJavaを教えているところなのですが、オブジェクト指向プログラミングをどのように教えていいか困っています。

全員がC言語研修を受講済みで、さらにJava言語も、継承やオーバーロード、例外まで一通り教えて、一応理解しています。
そこで、次のレベルとして、C言語風のプログラミング(「プログラム=関数の集まり」の考え方)から、オブジェクト指向(「プログラム=オブジェクトの集まり」の考え方)に意識改革させたいところです。

問題領域をオブジェクトの集まりとしてとらえ、そこからクラスを抽出していく、という説明がよくありますが、
「何をオブジェクトにするのか」「どのようにクラスを抽出したらいいのか」の部分を詳しく教えたいのですが、どのように説明したらいいでしょうか。また、参考になるWebサイトなどありませんでしょうか?

自分が普段作るときは、ほぼ「勘」でクラス設計していますので、それでは教えられなくて困っています。よろしくお願いします。

投稿日時 - 2005-06-02 23:06:32

QNo.1425727

困ってます

質問者が選んだベストアンサー

こんばんは。

同じ内容のプログラムで
C風にかいたソースと
Java風にオブジェクト指向に基づいて
書いたソースを比較してはいかがでしょうか?

また、JavaでC風に書いたソースを
解説しながらJava風に書き換えていくのは
いかがでしょうか?

研修の講師、頑張って下さい!
少しでも参考になればと思います。
では。

投稿日時 - 2005-06-03 00:59:14

お礼

ありがとうございます。
ちょうど昨日、それをやってみました。

なぜC風だとだめで、Java風にしたほうがいいのか、またどうすれば最初からJava風に書けるのか教えるのがなかなか難しく・・・
がんばります。

投稿日時 - 2005-06-03 13:45:47

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

私はオブジェクト指向の本質は、カプセル化でも継承でも多態性でもなくて「インスタンスをいっぱい作れること」だと思っています。

要は、スタティックな変数一個を使いまわすのではなくて、同じ型なんだけどまったく別の変数がいくつも作れてしまうことのメリットはかなり大きいと思います。

# 確かに C でも構造体を malloc() すれば、同じようなことはできますけどねぇ。。。

あと、一人で作れる程度の小さいプログラムだと、オブジェクト指向の本質的なところは見えにくいと思います。

グループを作って、それなりの規模のプログラムを作るようなことは、やる予定はあるのでしょうか。
そのときに、なっていろいろとC とは違う箇所が見えてくると思います。

UML については、実際に使わないからといって放っておくのはどうかと思います。

手続き型言語を勉強するとき、フローチャートから入った人って、言うほど少なくないはずです。
それと同じで、オブジェクト指向の場合、UML は知っていて損はないと思います。
# thamansa さんも、知っているからこそ「そんなの使わないよねぇ」というようなことを
# 言えるんですよね。
# 知らなければ、そのようなことすら言えないわけですし。。。

結局のところ、いわゆる勘所のようなものは、経験からしか身につかないのではないでしょうか。
そういう意味では、UML は考え方や残すべきドキュメントのヒントとなるガイドラインとする上では、便利なツールではあると思います。
# 私もすべては使いませんが、シーケンス図くらいは描くようにしています。
# なんだかんだいっても、デバッグのときに一番役に立ったりしますし。

そうやって、経験を積んでいく中で、勘所がわかってくるのだと思います。

回答にもなっていないかもしれませんが、少なくとも私はこんな感じで仕事をしています。

投稿日時 - 2005-06-10 22:49:41

ANo.5

開発の「分析」時に行う「クラス抽出」と、
ソースコードを書きながら(または容易にソースコードがイメージ
できる状態で)行う「クラス抽出」とは
(開発工程内における)性質・役割・重要度などが
異なるような気がするのですが…。
自信ありませんが。

なので、これら両者を教えるにしても、
教えかた・コツ・教える時期が
異なるような気がするのですが…。
自信アリマセンが。

ちなみに、
「ソースコード書きながら」のほうは、
新人さんにも簡単だと思います。

投稿日時 - 2005-06-07 21:42:20

お礼

なるほど!
一口で「クラス抽出」といっても、分析時と実装時では違いますね。
自分でもなんとなくやっていましたが、いわれてみると別物であることがわかります。

これまでのモヤモヤが取れてすっきりした気がします。
ありがとうございました。

投稿日時 - 2005-06-08 22:46:45

ANo.4

>ユースケースの抽出とかって入門書に必ず出てきますけど、実際はあまり行わないじゃないですか
ですよねぇ…(^^;A

自社で全てやるのであれば、
開発手法というか、設計手法というか…
にUMLで図を作ってそこからクラスやメソッドを…
というのを「ルール」として徹底させればいいんですけどね…。

客先開発だったり、2次受けだったりすると、
「その場のやり方」
にあわせないといけないので…。

前回の仕事は「UMLを使って設計する。」という現場で、「ちゃんと仕事として」は初めてでした。
現場自体も初の試みだったらしく、みんなで勉強しながらやってました。


「勘」を養うのはやっぱり「場数」を踏まないと…
でも、JAVAのAPIドキュメントやソース、Jakartaプロジェクトのドキュメントやソースなどを読めばその「勘」が育つのも少しは早く…なったりしませんかね…(^^;A

投稿日時 - 2005-06-03 14:49:56

ANo.3

「オブジェクト指向がわかる本」薄くてよくわかります。
前半が「オブジェクト指向」後半が「オブジェクト指向の実装」です。
JAVAを使って2種類のもぐらたたきゲームをを作ります。
入門編としてお勧めです。

参考URL:http://bookweb.kinokuniya.co.jp/guest/cgi-bin/wshosea.cgi?W-NIPS=997129334X

投稿日時 - 2005-06-03 09:37:08

お礼

ありがとうございます。
参考URL目次を見たところ、なかなかよさそうです。
帰りに本屋へ寄ってこようと思います。

投稿日時 - 2005-06-03 13:34:09

ANo.2

もしかしたら的外れかもしれませんが。

とあるサイトの掲示板で
「オブジェクト脳のつくり方」
という本が
オブジェクト指向の勉強にはいい
と書いてありました。
値段も3000円くらいですので、今度買おうと思ってます。
まだ読んでないので「読んだ感想」を回答できなくて申し訳ありません。

アマゾンに何件かレビューコメントが載ってますので、そちらを参考にして下さい。

クラスの抽出と設計に関しては…
UML
を取り入れてみてはいかがでしょうか?
(自分はUMLを完全に理解してないので、↓は間違ってるかもしれないです。)
ユースケースの抽出から始まって、
クラス関連図とか、シーケンス図とか…
あって、どうクラス分けして、どのようにメソッド分けするかが分かります。

前の仕事で初めてUMLを設計に取り入れたのですが、そのときに読んだ本(名前を忘れてしまいました。)が分かりやすくかったです。

サイトは@ITのUMLの記事を見てました。

ってこんなこと書いてますが、自分も「勘」が多いですね。(^^;A
「今までの経験と」が付きますけど。(笑)

それでは講師をがんばって下さい。

投稿日時 - 2005-06-03 01:04:22

お礼

ありがとうございます。
「オブジェクト脳のつくり方」は会社にあるので、もう一度読み直してみます。

ユースケースの抽出とかって入門書に必ず出てきますけど、実際はあまり行わないじゃないですか、それで
経験と勘だけでクラス設計できてしまうので、
その「勘」の部分を詳しく説明してある本とかがあるといいなと思いました。
(やっぱりこの考えが間違っているのかな・・・)

投稿日時 - 2005-06-03 13:51:15

あなたにオススメの質問