• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Java:クラスをたくさん使ったプログラミング?)

Java:オブジェクト指向を取り入れたプログラミングの勉強方法

このQ&Aのポイント
  • 初心者のJava言語勉強中に、オブジェクト指向を取り入れたプログラミングができないと感じています。
  • 他人が作成したクラスを活用したプログラムは理解できるが、自分でクラスを使ったプログラムを作成するのは難しいです。
  • オブジェクト指向を理解するためには、多くのプログラムを見たり、実際に作成することが重要です。参考書も活用しましょう。

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

  • ベストアンサー
  • LOHA
  • ベストアンサー率52% (203/388)
回答No.1

オブジェクト指向には定石があります。 それが「デザインパターン」です。 いわゆるGoFによる23個のデザインパターンというのが有名ですが、全てを習得するのは容易ではありません。 が、すぐに実用できるようなパターンもありますので、調べてみてはいかがでしょうか。 >何かおすすめの参考書 オススメかどうかは分かりませんが、今まで私が読んだことのある本で関連のものを挙げておきます。 ・オブジェクト指向でなぜつくるのか オブジェクト指向についての入門書といったところでしょうか。 うろ覚えですが、既存の手続き型言語に比べて、オブジェクト指向の何が嬉しいのか、といったことが書かれていたような気がします。 ・独習デザインパターン GoFのデザインパターンについて、クラス図とC++によるサンプルコードなどを使って解説されています。 C++が良くわからなくても、Javaが読み書きできるのであれば、おおよそ問題なく読めるかと思います。 >「こういう考え方をすれば・・・」というものがありましたら教えてください。 少しオブジェクト指向の言語に慣れてきたのであれば、逆にCのような手続き型言語をやってみると、オブジェクト指向だったらこうできるのに…みたいな部分が実感できるかもしれませんね。 >いろんなプログラムを見る、数をこなすことでしょうか? これは一理あります。 Javaのライブラリなどは、オブジェクト指向のお手本のようなものですので、デザインパターンを学ぶのと同時に、どういうところでそれが使われているのか調べてみると良いかもしれません。。

Rolily
質問者

お礼

かなりお礼が遅れてしまい申し訳ありません。 ご回答ありがとうございます。 「独習デザインパターン」は読んでみました。 いろいろあるものなのですね。 すべて読んだわけではありませんがどれも納得のいくものでした。 まだ自分で作れと言われてできるわけではありませんが・・ 「オブジェクト指向でなぜつくるのか」という本はタイトルだけでもかなり気になります。 デザインパターンは重要そうですね。 ありがとうございました。

その他の回答 (3)

  • MR-S18000
  • ベストアンサー率45% (21/46)
回答No.4

私がJAVAを勉強したときはプログラム自体が初めてでしたが ほぼ独学にて1週間でCPadにて2,500行ほどの13class使用 したプログラムが普通に作成できましたよ^^ 苦手意識持たないことじゃないですか? 2,500行くらいですと頭の中で処理できますが、フローチャート を資料用に後から作ってて思ったのですが先にあると何処に処理 を入れるか一目で分かってわかり易かったな~と思いましたね。 ちなみに他のプログラムは10例も見てないです。 forなど各自をメインにした短いプログラムをオリジナルで作って 確実に理解するようにしました。

Rolily
質問者

お礼

お礼が遅くなり申し訳ありません。 >ほぼ独学にて1週間でCPadにて2,500行ほどの13class使用 >したプログラムが普通に作成できましたよ^^ それはかなりすごいですね。 私にはそんなのとてもむり・・ と、たしかに苦手意識を持っていますね。 はじめは短いプログラムからしっかりと。慣れていくものなのでしょうね。 ご回答ありがとうございます。

回答No.3

No1さんと同じくデザインパターンについて、勉強されるのがいいでしょう。本としては、 増補改訂版Java言語で学ぶデザインパターン入門 結城 浩 著 を薦めます。 あと、プログラムを書く際は、テストから書くというのがオブジェクト指向では言われることです。 Beck, Kent (2002). Test-Driven Development ケント・ベック 『テスト駆動開発入門』 長瀬嘉秀監訳、 を読むといいでしょう。訳本はコードが見にくいので、原著をお勧めします。 人のコードを見る際に、Eclipse からは大変だとおもいます。エディターとgrep などのコマンドでの検索ツールの環境を揃えておくことも重要です。あとビルドツールも、GUIものからCUIつまり Ant や Maven を 使えるようにした方がよいでしょう。

Rolily
質問者

お礼

お礼が遅くなり申し訳ありません。 お名前がすごいですね、プログラミングをよくされている方なのでしょうか。 開発手法について少し勉強しました。 テスト駆動開発とは、エクストリームプログラミングにあったものですね。 人のコードを見る際のアドバイスを頂きありがとうございます。 やはり他人のコードをみるという経験は重要なのですね・・。 ご回答ありがとうございます。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.2

>>クラスが5個以上になると正直もう嫌だってなります。。実用レベルにはまだまだ至っていません。 本当の意味でオブジェクト指向を理解できていないのかもしれません。 質問者さんは、いくらか本末転倒で理解されている気がします。オブジェクト思考は、構造化プログラミングや複合設計という以前からの設計手法の限界を超えるためのプログラミング手法だと私は思っています。 つまりは、解決したい問題があり、それをプログラムによって解決する場合、シンプルな問題であれば、構造化プログラミングや複合設計だけで十分であれば、オブジェクト指向なんて不用だと思います。 たとえば、「プロンプトを出して、数字を入れてもらう。最後に”e”を入れたら、それまでの合計値を表示する」なんてプログラムの場合、「プログラムをオブジェクト指向で作成する」なんて言われたら初心者は混乱するばかりではないでしょうか?また、プログラム自体も長く、無駄に複雑化すると思えます。 私はC++でオブジェクト指向を勉強しましたけど、その経験からすると、 ・シンプルなプログラムは、オブジェクト指向など考えないで作ると簡単に作れるし、コードもシンプルとなり、わかりやすい。 ・プログラムがある複雑なレベルを超えた場合、オブジェクト指向を取り入れて、”きちんと設計して作成する”と、複雑な問題でも、わりあいシンプルに作成できる。構造化プログラミングや複合設計などの、「ちょっと古い(?)」と思われる設計手法の知識無しでは、オブジェクト指向の設計は満足にできない。 ・ただし、オブジェクト指向で開発し、メンテを続けると、クラスの数が増えて、関係が複雑化してメンテ不能になるレベルがある。 という印象を持っています。 質問者さんの場合、構造化プログラミング、複合設計、そして、そういう知識をベースにして、No.1さんの回答にあるようなデザインパターンの学習をすればいいと思います。 >>どうすればそういった、オブジェクト指向をとりいれたプログラムが書けるようになるのでしょうか? いろんなプログラムを見る、数をこなすことでしょうか? 「メタプログラミングRuby」という書籍には、オブジェクト指向の先?にあるメタプログラミングが紹介されています。そこには、 本を読むだけでは、経験は手に入らない。多くの価値を手に入れるためには、熟練プログラマの仕事を見るといい。・・・ という一文が書かれています。なので、「これは凄い!どうなっているんだろう?」と感じたプログラムのソースコードを読んで勉強するしかないのでは?と思います。 私は、データベースのCソースコードを読んで、いろいろなC言語テクニックを学びましたし、汎用機の言語であるPL/Iでは、ちょっと不思議な機能を持った他社が作ったプログラムのソースを調べて、PL/Iを勉強しました。 当然ながら、「この機能は凄い!」って思えるJavaプログラムのコードは長いと思いますけど、それを頑張って読みこなすことで、オブジェクト指向をとりいれたプログラムが書けるようになると思います。

Rolily
質問者

お礼

お礼が遅くなり申し訳ありません。 やはり熟練された方のプログラムソースを読むことが大切なのですね。 ・シンプルなプログラムは、オブジェクト指向など考えないで作ると簡単に作れるし、 コードもシンプルとなり、わかりやすい。 ・プログラムがある複雑なレベルを超えた場合、オブジェクト指向を取り入れて、”きちんと設計して作成する”と、複雑な問題でも、わりあいシンプルに作成できる。構造化プログラミングや複合設計などの、「ちょっと古い(?)」と思われる設計手法の知識無しでは、オブジェクト指向の設計は満足にできない。 ・ただし、オブジェクト指向で開発し、メンテを続けると、クラスの数が増えて、関係が複雑化してメンテ不能になるレベルがある。 確かにおっしゃるとおりですね。 簡単なサンプルで、無理にオブジェクト指向を取り入れようとして混乱してしまっているのかも・・ なんでもかんでもオブジェクト指向で!というわけではないのですね。 (実際何かのシステムのプログラムとなると複雑で結果オブジェクト指向となるのかもしれませんが) ありがとうございました。

関連するQ&A