新入社員にJavaを教えているところなのですが、オブジェクト指向プログラミングをどのように教えていいか困っています。
全員がC言語研修を受講済みで、さらにJava言語も、継承やオーバーロード、例外まで一通り教えて、一応理解しています。
そこで、次のレベルとして、C言語風のプログラミング(「プログラム=関数の集まり」の考え方)から、オブジェクト指向(「プログラム=オブジェクトの集まり」の考え方)に意識改革させたいところです。
問題領域をオブジェクトの集まりとしてとらえ、そこからクラスを抽出していく、という説明がよくありますが、
「何をオブジェクトにするのか」「どのようにクラスを抽出したらいいのか」の部分を詳しく教えたいのですが、どのように説明したらいいでしょうか。また、参考になるWebサイトなどありませんでしょうか?
自分が普段作るときは、ほぼ「勘」でクラス設計していますので、それでは教えられなくて困っています。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
こんばんは。
同じ内容のプログラムで
C風にかいたソースと
Java風にオブジェクト指向に基づいて
書いたソースを比較してはいかがでしょうか?
また、JavaでC風に書いたソースを
解説しながらJava風に書き換えていくのは
いかがでしょうか?
研修の講師、頑張って下さい!
少しでも参考になればと思います。
では。
ありがとうございます。
ちょうど昨日、それをやってみました。
なぜC風だとだめで、Java風にしたほうがいいのか、またどうすれば最初からJava風に書けるのか教えるのがなかなか難しく・・・
がんばります。
No.6
- 回答日時:
私はオブジェクト指向の本質は、カプセル化でも継承でも多態性でもなくて「インスタンスをいっぱい作れること」だと思っています。
要は、スタティックな変数一個を使いまわすのではなくて、同じ型なんだけどまったく別の変数がいくつも作れてしまうことのメリットはかなり大きいと思います。
# 確かに C でも構造体を malloc() すれば、同じようなことはできますけどねぇ。。。
あと、一人で作れる程度の小さいプログラムだと、オブジェクト指向の本質的なところは見えにくいと思います。
グループを作って、それなりの規模のプログラムを作るようなことは、やる予定はあるのでしょうか。
そのときに、なっていろいろとC とは違う箇所が見えてくると思います。
UML については、実際に使わないからといって放っておくのはどうかと思います。
手続き型言語を勉強するとき、フローチャートから入った人って、言うほど少なくないはずです。
それと同じで、オブジェクト指向の場合、UML は知っていて損はないと思います。
# thamansa さんも、知っているからこそ「そんなの使わないよねぇ」というようなことを
# 言えるんですよね。
# 知らなければ、そのようなことすら言えないわけですし。。。
結局のところ、いわゆる勘所のようなものは、経験からしか身につかないのではないでしょうか。
そういう意味では、UML は考え方や残すべきドキュメントのヒントとなるガイドラインとする上では、便利なツールではあると思います。
# 私もすべては使いませんが、シーケンス図くらいは描くようにしています。
# なんだかんだいっても、デバッグのときに一番役に立ったりしますし。
そうやって、経験を積んでいく中で、勘所がわかってくるのだと思います。
回答にもなっていないかもしれませんが、少なくとも私はこんな感じで仕事をしています。
No.5
- 回答日時:
開発の「分析」時に行う「クラス抽出」と、
ソースコードを書きながら(または容易にソースコードがイメージ
できる状態で)行う「クラス抽出」とは
(開発工程内における)性質・役割・重要度などが
異なるような気がするのですが…。
自信ありませんが。
なので、これら両者を教えるにしても、
教えかた・コツ・教える時期が
異なるような気がするのですが…。
自信アリマセンが。
ちなみに、
「ソースコード書きながら」のほうは、
新人さんにも簡単だと思います。
なるほど!
一口で「クラス抽出」といっても、分析時と実装時では違いますね。
自分でもなんとなくやっていましたが、いわれてみると別物であることがわかります。
これまでのモヤモヤが取れてすっきりした気がします。
ありがとうございました。
No.4
- 回答日時:
>ユースケースの抽出とかって入門書に必ず出てきますけど、実際はあまり行わないじゃないですか
ですよねぇ…(^^;A
自社で全てやるのであれば、
開発手法というか、設計手法というか…
にUMLで図を作ってそこからクラスやメソッドを…
というのを「ルール」として徹底させればいいんですけどね…。
客先開発だったり、2次受けだったりすると、
「その場のやり方」
にあわせないといけないので…。
前回の仕事は「UMLを使って設計する。」という現場で、「ちゃんと仕事として」は初めてでした。
現場自体も初の試みだったらしく、みんなで勉強しながらやってました。
「勘」を養うのはやっぱり「場数」を踏まないと…
でも、JAVAのAPIドキュメントやソース、Jakartaプロジェクトのドキュメントやソースなどを読めばその「勘」が育つのも少しは早く…なったりしませんかね…(^^;A
No.3
- 回答日時:
「オブジェクト指向がわかる本」薄くてよくわかります。
前半が「オブジェクト指向」後半が「オブジェクト指向の実装」です。
JAVAを使って2種類のもぐらたたきゲームをを作ります。
入門編としてお勧めです。
参考URL:http://bookweb.kinokuniya.co.jp/guest/cgi-bin/ws …
No.2
- 回答日時:
もしかしたら的外れかもしれませんが。
とあるサイトの掲示板で
「オブジェクト脳のつくり方」
という本が
オブジェクト指向の勉強にはいい
と書いてありました。
値段も3000円くらいですので、今度買おうと思ってます。
まだ読んでないので「読んだ感想」を回答できなくて申し訳ありません。
アマゾンに何件かレビューコメントが載ってますので、そちらを参考にして下さい。
クラスの抽出と設計に関しては…
UML
を取り入れてみてはいかがでしょうか?
(自分はUMLを完全に理解してないので、↓は間違ってるかもしれないです。)
ユースケースの抽出から始まって、
クラス関連図とか、シーケンス図とか…
あって、どうクラス分けして、どのようにメソッド分けするかが分かります。
前の仕事で初めてUMLを設計に取り入れたのですが、そのときに読んだ本(名前を忘れてしまいました。)が分かりやすくかったです。
サイトは@ITのUMLの記事を見てました。
ってこんなこと書いてますが、自分も「勘」が多いですね。(^^;A
「今までの経験と」が付きますけど。(笑)
それでは講師をがんばって下さい。
ありがとうございます。
「オブジェクト脳のつくり方」は会社にあるので、もう一度読み直してみます。
ユースケースの抽出とかって入門書に必ず出てきますけど、実際はあまり行わないじゃないですか、それで
経験と勘だけでクラス設計できてしまうので、
その「勘」の部分を詳しく説明してある本とかがあるといいなと思いました。
(やっぱりこの考えが間違っているのかな・・・)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java オブジェクト指向プログラミングの実践本を紹介してください 3 2022/09/19 04:56
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/05/21 02:41
- オープンソース IT用語、ソースとオブジェクト、改変と翻訳と翻案の違いなど どのようにりかいすればよいのですか 1 2022/09/09 10:02
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
- CAD・DTP Autocad Scriptファイルからの入力とコマンドラインからの入力が違う 1 2023/08/01 09:13
- C言語・C++・C# C# 継承の問題で programに示された拡張をすべて含んだ上で,クラス Mammal に,そのオ 1 2022/07/22 09:48
- PowerPoint(パワーポイント) パワーポイントのアニメーションについて 4 2023/06/14 16:25
- Visual Basic(VBA) Excel VBA オブジェクトマクロ 使用指定について お詳しい方教えてください。 共通エクセルフ 2 2023/03/14 17:26
- Illustrator(イラストレーター) 【シェイプ形成ツール】でうまく分割できない 1 2022/05/26 10:57
- Illustrator(イラストレーター) Illustratorでオブジェクトの色が勝手に変わって困っています。 4 2022/09/04 18:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Javaのインスタンス化の構文の...
-
委譲って何ですか?
-
「継承されたメソッドの可視性...
-
なぜForm型にキャストするので...
-
サーバー上のフォルダ情報の取得
-
C# 「データが失なわれる可能性...
-
(vba)他のアプリケーションの右...
-
「IOException は対応する try ...
-
JAVAの初歩でとても悩んでます・・
-
親クラスのメソッドを別のパッ...
-
interface,extend,implementの...
-
ASP.NETでの共通コードの書き方...
-
VBAでの[]
-
「タイプ初期化子が例外をスロ...
-
変数名の付け方
-
エクセルVBAで、条件に一致する...
-
private static という変数の修飾
-
Java初級 引数に適用できません
-
インスタンス参照でアクセスで...
-
複数の変数を宣言する時、同時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
C# 「データが失なわれる可能性...
-
「ラッパークラス」の存在意義...
-
c++でのヘッダーファイルの循環...
-
(vba)他のアプリケーションの右...
-
「継承されたメソッドの可視性...
-
「IOException は対応する try ...
-
ゲッターを使わないで変数にア...
-
JavaでのAPIの覚え方ってみさな...
-
VB DLLプロジェクトについて
-
Javaで下線
-
【C#】クラスのコンストラクタ...
-
Javaのインスタンス化の構文の...
-
委譲って何ですか?
-
ASP.NETでの共通コードの書き方...
-
オーバーライドとラッパーの違い
-
抽象クラスをJUNITでテストする...
-
JTextFieldの入力制限
-
Commons-Discovery.jarとは?
-
setTextについて
おすすめ情報