Java言語勉強中のものです。
Eclipseをつかっています。
初心者ですので、易しい言葉でご回答いただければ幸いです。
Javaの基礎についてひととおり勉強しました。
オブジェクト指向についても、だいたい・・なんとなくは理解できていると思います。
ただ、自分で作成するときに、
うまくオブジェクト指向を取り入れたプログラミングができません。
なんだかあっちこっちのものを呼び出してきてとてもややこしいです。
クラスがたくさんつかわれているプログラムは、
ほかの人がつくったプログラムをなんとかがんばって読む、というのが精一杯です。
自分ではとても思いつかない構造ばかりです。
あっちこっちからよんできているので、図やらリストやらを書いて
本当に「なんとか」理解できた、というレベルです。
クラスが5個以上になると正直もう嫌だってなります。。実用レベルにはまだまだ至っていません。
本当の意味でオブジェクト指向を理解できていないのかもしれません。
どうすればそういった、オブジェクト指向をとりいれたプログラムが書けるようになるのでしょうか?
いろんなプログラムを見る、数をこなすことでしょうか?
何かおすすめの参考書や、
「こういう考え方をすれば・・・」というものがありましたら教えてください。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
オブジェクト指向には定石があります。
それが「デザインパターン」です。
いわゆるGoFによる23個のデザインパターンというのが有名ですが、全てを習得するのは容易ではありません。
が、すぐに実用できるようなパターンもありますので、調べてみてはいかがでしょうか。
>何かおすすめの参考書
オススメかどうかは分かりませんが、今まで私が読んだことのある本で関連のものを挙げておきます。
・オブジェクト指向でなぜつくるのか
オブジェクト指向についての入門書といったところでしょうか。
うろ覚えですが、既存の手続き型言語に比べて、オブジェクト指向の何が嬉しいのか、といったことが書かれていたような気がします。
・独習デザインパターン
GoFのデザインパターンについて、クラス図とC++によるサンプルコードなどを使って解説されています。
C++が良くわからなくても、Javaが読み書きできるのであれば、おおよそ問題なく読めるかと思います。
>「こういう考え方をすれば・・・」というものがありましたら教えてください。
少しオブジェクト指向の言語に慣れてきたのであれば、逆にCのような手続き型言語をやってみると、オブジェクト指向だったらこうできるのに…みたいな部分が実感できるかもしれませんね。
>いろんなプログラムを見る、数をこなすことでしょうか?
これは一理あります。
Javaのライブラリなどは、オブジェクト指向のお手本のようなものですので、デザインパターンを学ぶのと同時に、どういうところでそれが使われているのか調べてみると良いかもしれません。。
かなりお礼が遅れてしまい申し訳ありません。
ご回答ありがとうございます。
「独習デザインパターン」は読んでみました。
いろいろあるものなのですね。
すべて読んだわけではありませんがどれも納得のいくものでした。
まだ自分で作れと言われてできるわけではありませんが・・
「オブジェクト指向でなぜつくるのか」という本はタイトルだけでもかなり気になります。
デザインパターンは重要そうですね。
ありがとうございました。
No.4
- 回答日時:
私がJAVAを勉強したときはプログラム自体が初めてでしたが
ほぼ独学にて1週間でCPadにて2,500行ほどの13class使用
したプログラムが普通に作成できましたよ^^
苦手意識持たないことじゃないですか?
2,500行くらいですと頭の中で処理できますが、フローチャート
を資料用に後から作ってて思ったのですが先にあると何処に処理
を入れるか一目で分かってわかり易かったな~と思いましたね。
ちなみに他のプログラムは10例も見てないです。
forなど各自をメインにした短いプログラムをオリジナルで作って
確実に理解するようにしました。
お礼が遅くなり申し訳ありません。
>ほぼ独学にて1週間でCPadにて2,500行ほどの13class使用
>したプログラムが普通に作成できましたよ^^
それはかなりすごいですね。
私にはそんなのとてもむり・・
と、たしかに苦手意識を持っていますね。
はじめは短いプログラムからしっかりと。慣れていくものなのでしょうね。
ご回答ありがとうございます。
No.3
- 回答日時:
No1さんと同じくデザインパターンについて、勉強されるのがいいでしょう。
本としては、増補改訂版Java言語で学ぶデザインパターン入門 結城 浩 著 を薦めます。
あと、プログラムを書く際は、テストから書くというのがオブジェクト指向では言われることです。
Beck, Kent (2002). Test-Driven Development
ケント・ベック 『テスト駆動開発入門』 長瀬嘉秀監訳、
を読むといいでしょう。訳本はコードが見にくいので、原著をお勧めします。
人のコードを見る際に、Eclipse からは大変だとおもいます。エディターとgrep などのコマンドでの検索ツールの環境を揃えておくことも重要です。あとビルドツールも、GUIものからCUIつまり Ant や Maven を 使えるようにした方がよいでしょう。
お礼が遅くなり申し訳ありません。
お名前がすごいですね、プログラミングをよくされている方なのでしょうか。
開発手法について少し勉強しました。
テスト駆動開発とは、エクストリームプログラミングにあったものですね。
人のコードを見る際のアドバイスを頂きありがとうございます。
やはり他人のコードをみるという経験は重要なのですね・・。
ご回答ありがとうございます。
No.2
- 回答日時:
>>クラスが5個以上になると正直もう嫌だってなります。
。実用レベルにはまだまだ至っていません。本当の意味でオブジェクト指向を理解できていないのかもしれません。
質問者さんは、いくらか本末転倒で理解されている気がします。オブジェクト思考は、構造化プログラミングや複合設計という以前からの設計手法の限界を超えるためのプログラミング手法だと私は思っています。
つまりは、解決したい問題があり、それをプログラムによって解決する場合、シンプルな問題であれば、構造化プログラミングや複合設計だけで十分であれば、オブジェクト指向なんて不用だと思います。
たとえば、「プロンプトを出して、数字を入れてもらう。最後に”e”を入れたら、それまでの合計値を表示する」なんてプログラムの場合、「プログラムをオブジェクト指向で作成する」なんて言われたら初心者は混乱するばかりではないでしょうか?また、プログラム自体も長く、無駄に複雑化すると思えます。
私はC++でオブジェクト指向を勉強しましたけど、その経験からすると、
・シンプルなプログラムは、オブジェクト指向など考えないで作ると簡単に作れるし、コードもシンプルとなり、わかりやすい。
・プログラムがある複雑なレベルを超えた場合、オブジェクト指向を取り入れて、”きちんと設計して作成する”と、複雑な問題でも、わりあいシンプルに作成できる。構造化プログラミングや複合設計などの、「ちょっと古い(?)」と思われる設計手法の知識無しでは、オブジェクト指向の設計は満足にできない。
・ただし、オブジェクト指向で開発し、メンテを続けると、クラスの数が増えて、関係が複雑化してメンテ不能になるレベルがある。
という印象を持っています。
質問者さんの場合、構造化プログラミング、複合設計、そして、そういう知識をベースにして、No.1さんの回答にあるようなデザインパターンの学習をすればいいと思います。
>>どうすればそういった、オブジェクト指向をとりいれたプログラムが書けるようになるのでしょうか?
いろんなプログラムを見る、数をこなすことでしょうか?
「メタプログラミングRuby」という書籍には、オブジェクト指向の先?にあるメタプログラミングが紹介されています。そこには、
本を読むだけでは、経験は手に入らない。多くの価値を手に入れるためには、熟練プログラマの仕事を見るといい。・・・
という一文が書かれています。なので、「これは凄い!どうなっているんだろう?」と感じたプログラムのソースコードを読んで勉強するしかないのでは?と思います。
私は、データベースのCソースコードを読んで、いろいろなC言語テクニックを学びましたし、汎用機の言語であるPL/Iでは、ちょっと不思議な機能を持った他社が作ったプログラムのソースを調べて、PL/Iを勉強しました。
当然ながら、「この機能は凄い!」って思えるJavaプログラムのコードは長いと思いますけど、それを頑張って読みこなすことで、オブジェクト指向をとりいれたプログラムが書けるようになると思います。
お礼が遅くなり申し訳ありません。
やはり熟練された方のプログラムソースを読むことが大切なのですね。
・シンプルなプログラムは、オブジェクト指向など考えないで作ると簡単に作れるし、
コードもシンプルとなり、わかりやすい。
・プログラムがある複雑なレベルを超えた場合、オブジェクト指向を取り入れて、”きちんと設計して作成する”と、複雑な問題でも、わりあいシンプルに作成できる。構造化プログラミングや複合設計などの、「ちょっと古い(?)」と思われる設計手法の知識無しでは、オブジェクト指向の設計は満足にできない。
・ただし、オブジェクト指向で開発し、メンテを続けると、クラスの数が増えて、関係が複雑化してメンテ不能になるレベルがある。
確かにおっしゃるとおりですね。
簡単なサンプルで、無理にオブジェクト指向を取り入れようとして混乱してしまっているのかも・・
なんでもかんでもオブジェクト指向で!というわけではないのですね。
(実際何かのシステムのプログラムとなると複雑で結果オブジェクト指向となるのかもしれませんが)
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java オブジェクト指向プログラミングの実践本を紹介してください 3 2022/09/19 04:56
- オープンソース IT用語、ソースとオブジェクト、改変と翻訳と翻案の違いなど どのようにりかいすればよいのですか 1 2022/09/09 10:02
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/05/21 02:41
- その他(コンピューター・テクノロジー) AIに関連する用語を理解したい、RNN、LMM、LSTMなど、書籍で理解したい 1 2023/07/06 22:18
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
- その他(教育・科学・学問) 通信高三で中一レベルの英語力しかありません。 1週間まえから武田塾に入りました。 今から京都文教又は 9 2022/08/13 19:10
- CAD・DTP Autocad Scriptファイルからの入力とコマンドラインからの入力が違う 1 2023/08/01 09:13
- 国家公務員・地方公務員 公務員試験の数的処理で苦戦しています。 1 2023/01/30 08:56
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
OpenGLでの楕円の描き方
-
エクリプスのプログラミングに...
-
スキル高めのIT技術者になぜ左...
-
JAVA基礎の課題で自動販売機
-
VBA(えくせる)ってなんでメン...
-
JavaScriptとC言語の違いについ...
-
Rubyの学習の進め方
-
フレームのデザインを変えたい...
-
授業でプログラミングのJavaの...
-
使用しているJUnitのバージョン...
-
vba クリップボードクリアにつ...
-
VBAの「for i=1 to cells(…」...
-
IISワーカープロセスが原因でCP...
-
Javaでのエラーについて
-
EclipseでJavaコンパイラのバー...
-
gitでバージョン指定してダウン...
-
プログラマーの適正検査落ちま...
-
サイドワインダーのドライバ
-
java、又はjavascriptでマシン...
-
Tomcat上で動くサーブレットが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA(えくせる)ってなんでメン...
-
JavaとAndroidアプリ(Java)違...
-
エクリプスのプログラミングに...
-
vectorクラスについて。
-
授業でプログラミングのJavaの...
-
スキル高めのIT技術者になぜ左...
-
JavaScriptとC言語の違いについ...
-
JAVA基礎の課題で自動販売機
-
内部仕様、外部仕様
-
大学の授業のプログラミング、...
-
Netbeansでの、Java「実行」と...
-
遊びでJavaを勉強しようとして...
-
EclipseとVisual StudioをPC1台...
-
Javaに向いてない人はどんな人...
-
グラフを描く目的でプラットホ...
-
visual c++6.0 入門書
-
VB.NETの参考文献、サイト
-
JAVAでフォートランのプログラ...
-
プログラミングの技術向上について
-
JAVA プログラミング ロッカ...
おすすめ情報