アプリ版:「スタンプのみでお礼する」機能のリリースについて

Java言語勉強中のものです。
Eclipseをつかっています。

初心者ですので、易しい言葉でご回答いただければ幸いです。

Javaの基礎についてひととおり勉強しました。
オブジェクト指向についても、だいたい・・なんとなくは理解できていると思います。

ただ、自分で作成するときに、
うまくオブジェクト指向を取り入れたプログラミングができません。

なんだかあっちこっちのものを呼び出してきてとてもややこしいです。
クラスがたくさんつかわれているプログラムは、
ほかの人がつくったプログラムをなんとかがんばって読む、というのが精一杯です。
自分ではとても思いつかない構造ばかりです。

あっちこっちからよんできているので、図やらリストやらを書いて
本当に「なんとか」理解できた、というレベルです。
クラスが5個以上になると正直もう嫌だってなります。。実用レベルにはまだまだ至っていません。

本当の意味でオブジェクト指向を理解できていないのかもしれません。

どうすればそういった、オブジェクト指向をとりいれたプログラムが書けるようになるのでしょうか?
いろんなプログラムを見る、数をこなすことでしょうか?

何かおすすめの参考書や、
「こういう考え方をすれば・・・」というものがありましたら教えてください。
よろしくお願いいたします。

A 回答 (4件)

オブジェクト指向には定石があります。


それが「デザインパターン」です。

いわゆるGoFによる23個のデザインパターンというのが有名ですが、全てを習得するのは容易ではありません。
が、すぐに実用できるようなパターンもありますので、調べてみてはいかがでしょうか。


>何かおすすめの参考書

オススメかどうかは分かりませんが、今まで私が読んだことのある本で関連のものを挙げておきます。

・オブジェクト指向でなぜつくるのか
オブジェクト指向についての入門書といったところでしょうか。
うろ覚えですが、既存の手続き型言語に比べて、オブジェクト指向の何が嬉しいのか、といったことが書かれていたような気がします。

・独習デザインパターン
GoFのデザインパターンについて、クラス図とC++によるサンプルコードなどを使って解説されています。
C++が良くわからなくても、Javaが読み書きできるのであれば、おおよそ問題なく読めるかと思います。


>「こういう考え方をすれば・・・」というものがありましたら教えてください。

少しオブジェクト指向の言語に慣れてきたのであれば、逆にCのような手続き型言語をやってみると、オブジェクト指向だったらこうできるのに…みたいな部分が実感できるかもしれませんね。


>いろんなプログラムを見る、数をこなすことでしょうか?

これは一理あります。
Javaのライブラリなどは、オブジェクト指向のお手本のようなものですので、デザインパターンを学ぶのと同時に、どういうところでそれが使われているのか調べてみると良いかもしれません。。
    • good
    • 0
この回答へのお礼

かなりお礼が遅れてしまい申し訳ありません。
ご回答ありがとうございます。

「独習デザインパターン」は読んでみました。
いろいろあるものなのですね。
すべて読んだわけではありませんがどれも納得のいくものでした。
まだ自分で作れと言われてできるわけではありませんが・・

「オブジェクト指向でなぜつくるのか」という本はタイトルだけでもかなり気になります。

デザインパターンは重要そうですね。
ありがとうございました。

お礼日時:2012/12/24 23:27

私がJAVAを勉強したときはプログラム自体が初めてでしたが


ほぼ独学にて1週間でCPadにて2,500行ほどの13class使用
したプログラムが普通に作成できましたよ^^

苦手意識持たないことじゃないですか?

2,500行くらいですと頭の中で処理できますが、フローチャート
を資料用に後から作ってて思ったのですが先にあると何処に処理
を入れるか一目で分かってわかり易かったな~と思いましたね。

ちなみに他のプログラムは10例も見てないです。

forなど各自をメインにした短いプログラムをオリジナルで作って
確実に理解するようにしました。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。

>ほぼ独学にて1週間でCPadにて2,500行ほどの13class使用
>したプログラムが普通に作成できましたよ^^
それはかなりすごいですね。

私にはそんなのとてもむり・・
と、たしかに苦手意識を持っていますね。

はじめは短いプログラムからしっかりと。慣れていくものなのでしょうね。

ご回答ありがとうございます。

お礼日時:2012/12/24 23:40

No1さんと同じくデザインパターンについて、勉強されるのがいいでしょう。

本としては、
増補改訂版Java言語で学ぶデザインパターン入門 結城 浩 著 を薦めます。

あと、プログラムを書く際は、テストから書くというのがオブジェクト指向では言われることです。

Beck, Kent (2002). Test-Driven Development
ケント・ベック 『テスト駆動開発入門』 長瀬嘉秀監訳、

を読むといいでしょう。訳本はコードが見にくいので、原著をお勧めします。

人のコードを見る際に、Eclipse からは大変だとおもいます。エディターとgrep などのコマンドでの検索ツールの環境を揃えておくことも重要です。あとビルドツールも、GUIものからCUIつまり Ant や Maven を 使えるようにした方がよいでしょう。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。
お名前がすごいですね、プログラミングをよくされている方なのでしょうか。

開発手法について少し勉強しました。
テスト駆動開発とは、エクストリームプログラミングにあったものですね。

人のコードを見る際のアドバイスを頂きありがとうございます。
やはり他人のコードをみるという経験は重要なのですね・・。

ご回答ありがとうございます。

お礼日時:2012/12/24 23:37

>>クラスが5個以上になると正直もう嫌だってなります。

。実用レベルにはまだまだ至っていません。
本当の意味でオブジェクト指向を理解できていないのかもしれません。

質問者さんは、いくらか本末転倒で理解されている気がします。オブジェクト思考は、構造化プログラミングや複合設計という以前からの設計手法の限界を超えるためのプログラミング手法だと私は思っています。
つまりは、解決したい問題があり、それをプログラムによって解決する場合、シンプルな問題であれば、構造化プログラミングや複合設計だけで十分であれば、オブジェクト指向なんて不用だと思います。

たとえば、「プロンプトを出して、数字を入れてもらう。最後に”e”を入れたら、それまでの合計値を表示する」なんてプログラムの場合、「プログラムをオブジェクト指向で作成する」なんて言われたら初心者は混乱するばかりではないでしょうか?また、プログラム自体も長く、無駄に複雑化すると思えます。

私はC++でオブジェクト指向を勉強しましたけど、その経験からすると、

・シンプルなプログラムは、オブジェクト指向など考えないで作ると簡単に作れるし、コードもシンプルとなり、わかりやすい。
・プログラムがある複雑なレベルを超えた場合、オブジェクト指向を取り入れて、”きちんと設計して作成する”と、複雑な問題でも、わりあいシンプルに作成できる。構造化プログラミングや複合設計などの、「ちょっと古い(?)」と思われる設計手法の知識無しでは、オブジェクト指向の設計は満足にできない。
・ただし、オブジェクト指向で開発し、メンテを続けると、クラスの数が増えて、関係が複雑化してメンテ不能になるレベルがある。

という印象を持っています。

質問者さんの場合、構造化プログラミング、複合設計、そして、そういう知識をベースにして、No.1さんの回答にあるようなデザインパターンの学習をすればいいと思います。

>>どうすればそういった、オブジェクト指向をとりいれたプログラムが書けるようになるのでしょうか?
いろんなプログラムを見る、数をこなすことでしょうか?

「メタプログラミングRuby」という書籍には、オブジェクト指向の先?にあるメタプログラミングが紹介されています。そこには、

本を読むだけでは、経験は手に入らない。多くの価値を手に入れるためには、熟練プログラマの仕事を見るといい。・・・

という一文が書かれています。なので、「これは凄い!どうなっているんだろう?」と感じたプログラムのソースコードを読んで勉強するしかないのでは?と思います。
私は、データベースのCソースコードを読んで、いろいろなC言語テクニックを学びましたし、汎用機の言語であるPL/Iでは、ちょっと不思議な機能を持った他社が作ったプログラムのソースを調べて、PL/Iを勉強しました。
当然ながら、「この機能は凄い!」って思えるJavaプログラムのコードは長いと思いますけど、それを頑張って読みこなすことで、オブジェクト指向をとりいれたプログラムが書けるようになると思います。
    • good
    • 0
この回答へのお礼

お礼が遅くなり申し訳ありません。

やはり熟練された方のプログラムソースを読むことが大切なのですね。

・シンプルなプログラムは、オブジェクト指向など考えないで作ると簡単に作れるし、
コードもシンプルとなり、わかりやすい。
・プログラムがある複雑なレベルを超えた場合、オブジェクト指向を取り入れて、”きちんと設計して作成する”と、複雑な問題でも、わりあいシンプルに作成できる。構造化プログラミングや複合設計などの、「ちょっと古い(?)」と思われる設計手法の知識無しでは、オブジェクト指向の設計は満足にできない。
・ただし、オブジェクト指向で開発し、メンテを続けると、クラスの数が増えて、関係が複雑化してメンテ不能になるレベルがある。

確かにおっしゃるとおりですね。
簡単なサンプルで、無理にオブジェクト指向を取り入れようとして混乱してしまっているのかも・・

なんでもかんでもオブジェクト指向で!というわけではないのですね。
(実際何かのシステムのプログラムとなると複雑で結果オブジェクト指向となるのかもしれませんが)

ありがとうございました。

お礼日時:2012/12/24 23:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!