• 締切済み

JAVAのクラスの考え方は・・?

JAVAの勉強をしていている学生です。 常々思っていたのですが、クラスの考え方がしっくりきてませんヽ(~-~ よく参考書などで書かれていることで 「クラスは設計図のようなもの、オブジェクトはそこから作成した実体」 「鋳型がクラスでどんどん作れるのがインスタンス」 といった話が疑問でならないのです。 というのも・・クラスの設計って、自分自身をフィールドに宣言したりできますよね。。 でそこから生成して、また自分自身のフィールドに生成して・・とか。 インターフェースを実装したクラスで、、、内部クラスを持ったクラスで、、、ジェネリッククラス、、。 となってくると、最初の考え方では、論理的に無理?私の脳内では変換しきれないです(´;ω;) 多分前提となる考え方が間違っていたり、私の想像力が乏しいだけだと思います。 どなたか、「クラスってこう考えればオブジェクト指向が見えてくる」と表現している本やサイトなどご存じないでしょうか。 一朝一夕で理解しようとは思っていませんので、きちんと参考にして理解しようと頑張ります! 「私的には・・」や「あなたが勘違いしている箇所は・・」といったご意見もぜひお聞きしたいです! クラスかオブジェクト指向かどっちかというより、クラスありきでJAVAのオブジェクト指向が本当に理解できると考えています。参考書やWEBを探してみた限りではやっぱり理解できないです(´;ω;) ちなみにC言語を中学生で始め、プログラミングに触れました。

  • Java
  • 回答数5
  • ありがとう数13

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

ここは Java のカテゴリだからあんまり細かくいわんけど C において値渡し以外の方法はない.

  • teketon
  • ベストアンサー率65% (141/215)
回答No.4

オブジェクト指向のクラスと、Javaの機能としてのクラスは別に考えたほうがいいかもしれません。 Javaの機能を使えば、オブジェクト指向のクラスを表現できるだけなのです。 >インターフェースを実装したクラスで、、、内部クラスを持ったクラスで、、、ジェネリッククラス、、。 ですから、Javaの機能を無理にオブジェクト指向で表現する必要はありません。 本は下記がオススメ。 >オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講 >UMLモデリングの本質

rain3oshiete
質問者

お礼

ありがとうございました。 参考の本もご紹介いただきありがとうございます!

回答No.3

たとえ話に納得できないことと、言語仕様を理解できないこととは別のことです。 たとえ話に、無理に納得する必要はありません。 言語仕様をひとつひとつ覚えていけば問題ありません。 プログラミング言語は、結局のところプログラミングしやすいように設計されます。 その中で現実にあるものの概念を取り入れることもありますが、 その目的はプログラミングしやすくすることであって、現実のものの性質を真似ることではないので、 現実のものと似ていない部分も出てきます。

rain3oshiete
質問者

お礼

>言語仕様をひとつひとつ覚えていけば問題ありません。 地道に基本から覚えていくことからもう一度はじめてみます! 自分がしていることで合っているのか不安もありましたが、 無理に納得する必要もないし言語使用を覚えていくといったことが大事だとわかりました^^/ ありがとうございました。

回答No.2

> というのも・・クラスの設計って、自分自身をフィールドに宣言したりできますよね。。 > でそこから生成して、また自分自身のフィールドに生成して・・とか。 そういう設計だからとしか言いようがありませんが・・・。 つまり、外部からのインスタンス生成は許可しないという設計であったりするわけですよね。 例えばテキトーに記しますが、以下のように自身のクラスフィールドやクラスメソッドで 自身をインスタンス化し、外部からのインスタンス化を許可しない(つまりコンストラクタが privateなど)の場合。 public class Hoge {  public void test() {   Fuga fuga = Fuga.getInstance();   fuga.method1();  } } public class Fuga {  private static Fuga _instance = new Fuga();  private Fuga() {  }  public Fuga getInstance() {   return this._instance;  }  public void method1() {   System.out.println("Fuga");  } } こういった場合、『外部からのインスタンス化は許可しない』ということも設計であり、 インスタンスフィールド、インスタンスメソッドは、自身の振る舞いに対する設計と 言えますよね。 > 「クラスは設計図のようなもの、オブジェクトはそこから作成した実体」 > 「鋳型がクラスでどんどん作れるのがインスタンス」 これらは、オブジェクト指向を全く理解していない人へ向けての謳い文句です。 それが全てではないので鵜呑みにしてはいけません。 手を動かしてみて慣れてきたら、自然とそれを設計している自分に気づくでしょう。 内部クラスであってもジェネリッククラス、クラスはクラスです。 今まさに注目しているクラスだけを見たら、そこに記述されている属性や振る舞いは、全て 設計と言えます。

rain3oshiete
質問者

お礼

あまりデザインパターンは明るくないのですが、シングルトンでしたっけ。 >全てではないので鵜呑みにしてはいけません やはりそうですか、最初は何となくイメージしていたのですが、やはり鵜呑みにはできませんよね。 >手を動かしてみて慣れてきたら、自然とそれを設計している自分に気づくでしょう。 はやく気づけるようになりたいです!急がばまわれってことで、 自分でどんどん書いていくしかないですね^^; ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

C的に言えば「構造体とそれを扱う関数群をまとめたもの」がクラスだ.

rain3oshiete
質問者

お礼

ありがとうございます。構造体ってクラスと似ていますよね。 Cの構造体って値渡しが基本でしたっけ・

関連するQ&A

  • Javaについて

    明日学校でミニテストがあるのですが、例題で出された問題がどうしても解けません。 分かる方教えていただけたら助かります。 回答よろしくお願いします。 ・Javaはオブジェクト指向をとりいれた『   』言語 ・実行するためには『   』コマンドによって、中間ファイルを作り、『    』コマンドによって実行する。 ・オブジェクト指向において、クラスは『設計図』であり、クラスを基に実体であるインスタンスを生成する。 ・int型の変数「number」を定義し、値「13」を代入しなさい。 ・以下のコードではエラーとなるため、キャストが必要です。適切なキャストを追加し、実行できるコードに修正してください。  int number = 1.3;

  • javaのオブジェクト指向やクラスについて

    javaのオブジェクト指向やクラスというのは学校や国に例えると「規則や法律」がクラスに当たり、「学校での生活や社会での生活(いわゆる人間生活)」がオブジェクトに当たるということですか? だとすると、オブジェクト指向の利点は学校や国に例えるとどんな風になるのですか?

    • ベストアンサー
    • Java
  • Java:クラスをたくさん使ったプログラミング?

    Java言語勉強中のものです。 Eclipseをつかっています。 初心者ですので、易しい言葉でご回答いただければ幸いです。 Javaの基礎についてひととおり勉強しました。 オブジェクト指向についても、だいたい・・なんとなくは理解できていると思います。 ただ、自分で作成するときに、 うまくオブジェクト指向を取り入れたプログラミングができません。 なんだかあっちこっちのものを呼び出してきてとてもややこしいです。 クラスがたくさんつかわれているプログラムは、 ほかの人がつくったプログラムをなんとかがんばって読む、というのが精一杯です。 自分ではとても思いつかない構造ばかりです。 あっちこっちからよんできているので、図やらリストやらを書いて 本当に「なんとか」理解できた、というレベルです。 クラスが5個以上になると正直もう嫌だってなります。。実用レベルにはまだまだ至っていません。 本当の意味でオブジェクト指向を理解できていないのかもしれません。 どうすればそういった、オブジェクト指向をとりいれたプログラムが書けるようになるのでしょうか? いろんなプログラムを見る、数をこなすことでしょうか? 何かおすすめの参考書や、 「こういう考え方をすれば・・・」というものがありましたら教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • オブジェクト指向の特徴

    プログラミングにおいて Java言語などのオブジェクト指向とは 「クラス(設計図)からインスタンス(実体)を量産できる。」がオブジェクト指向ではないプログラミング言語との決定的な違いなのでしょうか? またオブジェクト指向とオブジェクト指向ではない言語の決定的な違いや 実際に実務において経験した感覚的な違いなどがあれば教えてください。 インターネットに乗っていない些細なことでも構いません。

    • ベストアンサー
    • Java
  • クラス?オブジェクト?インスタンス?何がなんだか・

    一般的なオブジェクト指向の 定義として下記で合っているのでしょうか お願いします クラス:第2実体(人間) インスタンス:第1実体(例:山田) オブジェクト:色々なインスタンスをさして、抽象的に総称としてオブジェクト 例えば・・クラス:人間、インスタンス:山田 クラス:犬、インスタンス:ゴン 違うクラスのインスタンスをまとめて呼ぶ際にオブジェクト? よく分からなくなっています、よろしくお願いします

  • 僕の持ってるクラスの概念は正しいですか?

    僕の持ってる下記のクラスの概念は正しいですか? クラスとは、データ(「属性」または「フィールド」ともいう)とその操作手順であるメソッド(「振る舞い」、「動作」、「機能」ともいう)をまとめたオブジェクトの雛型(形式・様式を示す見本)を定義したもの。    クラスとは、いわば、何かを実行する物体(オブジェクト)の設計図のようなもの。何かを実行する物体というのは、例えば車をオブジェクトに例えると、「走る」,「車を止める」,「ライトをつける」ということを実行するが、クラスというのはその車(オブジェクト)の設計図。 また設計図だから、クラスの中には具体的に「何をさせたいのか」(車であれば、「走る」,「ライトをつける」等)を記述していくが、これがメソッドである。 また、車であれば、ナンバーや車種等の属性的情報があるが、このようにオブジェクトが保持する属性的情報がフィールドである。 また、この設計図を元に生み出された、実際に動作しているオブジェクトをインスタンスと呼ぶ。 車であれば、実際に走ったり止まったりライトをつけてるといったように、実際に動作しているオブジェクトがインスタンス。 これに関連し、オブジェクトとは、ソフトウェアが扱おうとしている現実世界に存在する物理的あるいは抽象的な実体を、属性(データ、フィールド)とメソッドの集合としてモデル化し、コンピュータ上に再現したもの。

    • ベストアンサー
    • Java
  • javaの勉強法

    javaを覚えようとして、本を読んでオブジェクト指向をうっすらと理解した所です javaの考え方はわかったのですが、いざプログラムを作るとなると、個々のクラスやメソッド機能を知らないといけないじゃないですか、これって個々のクラスやメソッドを理解するほうがプログラムを作るより先なんじゃないかと思いはじめています(1.3.0の日本語ドキュメントを見ています)。 (確かによく使うクラス、メソッドってあると思うし、全て覚えていなくてもいんじゃないのと思うけど) どう思われますか?

  • クラス、オブジェクト、インスタンスの理解で?

    お尋ねします。 既に、バリバリオブジェクト指向でプログラムを書いている方が多いので恐縮ですが、とあるサイトのオブジェクトのサンプルを使って、下記のようにサンプルソースを書いてみました。 --以下ソース--- <?php class Nerimono { private $name; public function __construct() { $this->name= 'ねりもの'; } public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } $objectNerimono = new Nerimono(); $objectKamaboko = new Nerimono(); $objectKamaboko->setName('かまぼこ'); $objectHanpen = new Nerimono(); $objectHanpen->setName('はんぺん'); echo 'Nerimono オブジェクトの $objectNerimono 実体(インスタンス)を生成した。'; echo "\n"; echo '$objectNerimono の private $name に「' . $objectNerimono->getName() . '」と、既に書いたあった'; echo "\n"; echo 'Nerimono オブジェクトの $objectKamaboko 実体(インスタンス)を生成した。'; echo "\n"; echo '$objectKamaboko の private $name に「' . $objectKamaboko->getName() . '」と書いた'; echo "\n"; echo 'Nerimono オブジェクトの $objectHanpen 実体(インスタンス)を生成した。'; echo "\n"; echo '$objectHanpen の private $name に「' . $objectHanpen->getName() . '」と書いた'; echo "\n"; --ここまで--- そして、これの実行結果が下記です。 C:\Temp>php Nerimono.php Nerimono オブジェクトの $objectNerimono 実体(インスタンス)を生成した。 $objectNerimono の private $name に「ねりもの」と、既に書いたあった Nerimono オブジェクトの $objectKamaboko 実体(インスタンス)を生成した。 $objectKamaboko の private $name に「かまぼこ」と書いた Nerimono オブジェクトの $objectHanpen 実体(インスタンス)を生成した。 $objectHanpen の private $name に「はんぺん」と書いた このコメントのような解釈で、合っておりますでしょうか? 今までオブジェクト指向のメリットが全然理解できず、関数の変わった呼び出し方法としか、理解できていませんでした。 PHPは、本来のオブジェクト指向とは違うようだとは、知っているつもりです。(Pブジェクト思考?w) 間違っているところあれば、ご指摘ください。m(_。_)m PHPは、Ver 5.3.5 です。

    • 締切済み
    • PHP
  • javaの覚え方

    私はjavaの勉強をしている初心者ですが、困っていることがあります。 数冊のjavaの本を読んで、オブジェクト指向のことや、基本的な事 は理解したつもりですが、自分でプログラムを作成する際、 用意されているクラスだけを使い終わってしまうのです。 これは、本のサンプルをうちこんでいるだけなのです。 一からつくろうとしても、実際サンプルプログラムの ようになるのだからと思ってしまうのですが、どうすれば 自分で作ったと実感できるのでしょうか?

  • クラスの生成と継承という概念が分かりません。

    VBでオブジェクト指向というのは何となく分かるのですが、 クラスの生成と継承という概念が分かりません。 クラスというのは何のことなのでしょうか? どなたか優しく教えて下さい。 お願い致します。