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

JAVAの勉強をしていている学生です。
常々思っていたのですが、クラスの考え方がしっくりきてませんヽ(~-~
よく参考書などで書かれていることで
「クラスは設計図のようなもの、オブジェクトはそこから作成した実体」
「鋳型がクラスでどんどん作れるのがインスタンス」
といった話が疑問でならないのです。

というのも・・クラスの設計って、自分自身をフィールドに宣言したりできますよね。。
でそこから生成して、また自分自身のフィールドに生成して・・とか。
インターフェースを実装したクラスで、、、内部クラスを持ったクラスで、、、ジェネリッククラス、、。
となってくると、最初の考え方では、論理的に無理?私の脳内では変換しきれないです(´;ω;)

多分前提となる考え方が間違っていたり、私の想像力が乏しいだけだと思います。
どなたか、「クラスってこう考えればオブジェクト指向が見えてくる」と表現している本やサイトなどご存じないでしょうか。
一朝一夕で理解しようとは思っていませんので、きちんと参考にして理解しようと頑張ります!
「私的には・・」や「あなたが勘違いしている箇所は・・」といったご意見もぜひお聞きしたいです!

クラスかオブジェクト指向かどっちかというより、クラスありきでJAVAのオブジェクト指向が本当に理解できると考えています。参考書やWEBを探してみた限りではやっぱり理解できないです(´;ω;)
ちなみにC言語を中学生で始め、プログラミングに触れました。

A 回答 (5件)

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

    • good
    • 0

オブジェクト指向のクラスと、Javaの機能としてのクラスは別に考えたほうがいいかもしれません。


Javaの機能を使えば、オブジェクト指向のクラスを表現できるだけなのです。

>インターフェースを実装したクラスで、、、内部クラスを持ったクラスで、、、ジェネリッククラス、、。
ですから、Javaの機能を無理にオブジェクト指向で表現する必要はありません。

本は下記がオススメ。
>オブジェクト脳のつくり方―Java・UML・EJBをマスターするための究極の基礎講
>UMLモデリングの本質
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/08/30 21:55

たとえ話に納得できないことと、言語仕様を理解できないこととは別のことです。


たとえ話に、無理に納得する必要はありません。
言語仕様をひとつひとつ覚えていけば問題ありません。

プログラミング言語は、結局のところプログラミングしやすいように設計されます。
その中で現実にあるものの概念を取り入れることもありますが、
その目的はプログラミングしやすくすることであって、現実のものの性質を真似ることではないので、
現実のものと似ていない部分も出てきます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2014/08/30 21:53

> というのも・・クラスの設計って、自分自身をフィールドに宣言したりできますよね。


> でそこから生成して、また自分自身のフィールドに生成して・・とか。

そういう設計だからとしか言いようがありませんが・・・。
つまり、外部からのインスタンス生成は許可しないという設計であったりするわけですよね。


例えばテキトーに記しますが、以下のように自身のクラスフィールドやクラスメソッドで
自身をインスタンス化し、外部からのインスタンス化を許可しない(つまりコンストラクタが
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");
 }
}

こういった場合、『外部からのインスタンス化は許可しない』ということも設計であり、
インスタンスフィールド、インスタンスメソッドは、自身の振る舞いに対する設計と
言えますよね。


> 「クラスは設計図のようなもの、オブジェクトはそこから作成した実体」
> 「鋳型がクラスでどんどん作れるのがインスタンス」
これらは、オブジェクト指向を全く理解していない人へ向けての謳い文句です。
それが全てではないので鵜呑みにしてはいけません。
手を動かしてみて慣れてきたら、自然とそれを設計している自分に気づくでしょう。


内部クラスであってもジェネリッククラス、クラスはクラスです。
今まさに注目しているクラスだけを見たら、そこに記述されている属性や振る舞いは、全て
設計と言えます。
    • good
    • 0
この回答へのお礼

あまりデザインパターンは明るくないのですが、シングルトンでしたっけ。
>全てではないので鵜呑みにしてはいけません
やはりそうですか、最初は何となくイメージしていたのですが、やはり鵜呑みにはできませんよね。

>手を動かしてみて慣れてきたら、自然とそれを設計している自分に気づくでしょう。
はやく気づけるようになりたいです!急がばまわれってことで、
自分でどんどん書いていくしかないですね^^;

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

お礼日時:2014/08/30 21:51

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2014/08/30 21:48

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