クラスの概念の正しさとは?

このQ&Aのポイント
  • クラスはデータと操作手順をまとめたオブジェクトの設計図であり、属性的情報がフィールドとなる。
  • クラスは物体の設計図であり、具体的な動作や機能をメソッドとして記述する。
  • クラスから生み出された動作しているオブジェクトはインスタンスと呼ばれる。
回答を見る
  • ベストアンサー

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

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

  • Java
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • shiren2
  • ベストアンサー率47% (139/295)
回答No.1

大体そうですね。 例えば車がスーパークラス(親クラス)であるとき、パトカーや消防車がサブクラス(子クラス)です。 放水機能(メソッド)は消防車にしかないです。 特殊な音を鳴らす機能はパトカーにも消防車にもありますが、この二つでは音が違いますね。 車(親クラス)にはない機能ですが、「意味」が同じなので、Javaで書くならインターフェースを用意して同じメソッド名にするもの良いです。 走る機能だとかガソリン(フィールド)とかは、車を継承した全クラスで共通ですね。 そんな感じでしょうか。

wanwannakuyo
質問者

お礼

お礼遅れてしまい大変申し訳ありません汗 補足情報までありがとうございます!

その他の回答 (1)

noname#131190
noname#131190
回答No.2

最期の文がイマイチ理解できませんが、概ね合ってると思います。 さらに理解を深めるならば、その実態は単なるデータ構造体にすぎない(メソッドは含まれない。含まれているように記述できてるだけ)ですね。だからstatic な関数は実態が無くても呼べる。 う~~ん。ここまで理解するのに私は何年かかったことやら・・・。

wanwannakuyo
質問者

お礼

お礼遅れてしまい大変申し訳ありません。 そうですよね、、クラスの概念は難しいですよね、、、

関連するQ&A

  • クラスの概念について、私の考えは正しいですか?

    再度質問します。 クラスとは、何かを実行する物体の設計図のようなもの。何かを実行するというのは、車であれば、走行,車を止める,ライトをつける,クラクションを鳴らすということを実行し、これ等のようにある機能や動作や振る舞いのことをメゾットという。そして、このメゾットに関連した情報をフィールド(属性)といい、上記の車の例では、どこの社製の何という機種のライトであるか、どこの社製の何という機種のクラクションであるかとか。 このフィールドを指定することにより、このクラスのメゾットのアウトプットが変わってくる。例えば、アウトプットの良し悪しの観点から、上記の車の例で例えると、A社のc-11という製品名のライトの明るさを1として、B社のh-33という製品名のライトの明るさを3とすると、B社のh-33のライトのほうが、A社のc-11のライトより3倍アウトプットがいい。 このように、フィールドはメゾットのアウトプットに何かしらの影響を与える。 また、このクラスを元に生み出された、実際に動作してるオブジェクトをインスタンスという。上記の車の例では、実際に車が動作した状態で、例えば走行してたり、クラクションが鳴らしたり、ライトをつけたりという動作が実際に行われてる物体がインスタンス。

    • ベストアンサー
    • Java
  • オブジェクト指向に関して。

    Javaの解説本を読んでオブジェクト指向プログラミングという物があることをしりました。その本には「オブジェクトはデータとそのデータを扱うための機能を持っている。この機能はメソッドと呼ぶ。クラスは設計図のような物で変数とメソッドから構成されている。設計図を実際に形にした物がインスタンスである。」と書いてありました。私はオブジェクト=クラスのような感じがしたのですが、実際のところオブジェクト=クラスでいいのでしょうか?  また、友人に話したところ、オブジェクト指向はサブルーチンに似ているといっていました。私はプログラミングの知識が全くないのでサブルーチンという物が何なのかわからないのですが、サブルーチンとオブジェクト指向の考え方は違うような気がするのです。友人に説明して納得させるにはどうしたら良いのでしょうか? ぜひ、力を課してください。

  • クラス、オブジェクト、インスタンス、メソッドについて。

    クラス、オブジェクト、インスタンス、メソッドに ついて教えていただけないでしょうか? 今現在の自分の認識では、乗り物を例にすると、 「乗り物」という大枠がクラス。それを、たとえば 飛行機なり電車なり船なり、より具体的にした ものがインスタンス=オブジェクト。 その具体化したものの挙動、動作(走るとか飛ぶとか) がメソッド、という理解です。 ただ、これだとオブジェクトとインスタンスを 同じものとして見てしまっているので、この2つの 違いを明確に説明しろと言われると困ってしまいます。 インスタンスとオブジェクトの違いを明確にした上で うまく伝えられる方法があれば、ご教授ください。

  • マルチスレッド下でのインスタンス変数・クラス変数

    よろしくお願いします。  マルチスレッド下で動作するクラスを作成しています。データにアクセスするためのオブジェクトを クラスのフィールド値として保持し、使い回しを行いたいと考えています。このデータアクセスオブジェクト(以下Dao)内では特にフィールドは使用せず、全てローカル変数のみで動作するようになっています。Dao自体は初回のクラス生成時にstatic処理にてフィールドにセットされます。  このDaoを保持するフィールドは、staticなクラス変数が良いのか、インスタンス変数として保持する方が良いのか迷っております。  クラス変数ならばPermanent領域をオブジェクト1つ分のメモリ使用で済み、インスタンス変数だとスレッド毎にheapを使い、処理数が増えるとメモリ圧迫しちゃう?と安易に考えてしまったりしています。  ご意見・ご助言よろしくお願い致します。

    • ベストアンサー
    • Java
  • JAVAのクラスの考え方は・・?

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

  • 親クラスと子クラスのフィールドとメソッドについて

    親クラスと子クラスのフィールドとメソッドについて 以下のサンプルソースを実行した時の動作の原理について 教えてください。 oya型変数にkoクラスのインスタンスを作成した場合、 メソッドはkoクラスのものなのに、 フィールドはoyaクラスのものになるということが イマイチすっきり理解できません。 どういうことなんでしょうか。 ------------------------------------------------------- [ソース] public class exec { public static void main( String args[]){ oya obj = new ko(); System.out.println(obj.str_field); obj.disp_field(); } } public class oya{ String str_field="親実行"; public void disp_field(){ System.out.println(str_field); } } public class ko extends oya { String str_field = "子実行"; public void disp_field(){ System.out.println(str_field); } } ------------------------------------------------------- [実行結果] > 親実行 > 子実行 -------------------------------------------------------

    • ベストアンサー
    • Java
  • クラス図→ソース

    くだらない質問かもしれませんが・・・ まず特急列車などの指定席の予約などを行う簡易プログラムを作りたい時に、 例えば、 ◇-- は集約の関連 を表すとして、 受付 ◇-- 時刻表 ◇-- 列車 という部分を持つクラス図を作ったとします。時刻表は列車の発車時刻などが書かれています。(例えばなので、これは集約にすべきじゃない!とかは無しの方向で) これをソースに書き出してやる際に、 受付クラスは フィールドとして時刻表への参照配列をもち、時刻表クラスはフィールドとして列車への参照配列をもつとします。 時刻表 timetable[]; 列車  train[] それで、列車にあるメソッド(hogehoge())を受付のあるメソッドで使いたいというときに、おそらく、 this.timetable[x].train[y].hogehoge(); としますよね。 でも、複雑なクラス図になっていくにつれてもし使いたい場所とメソッドとの間が激しく離れている場合は、 aaa.bbb.ccc.ddd.eee.….zzz(); とかなっちゃいますよね。そうならないように設計しろと言われればそれまでなのですが、実際にクラス図→ソースの段階でこういうこと(設計ミス?)が起きてしまうことってよくあるのでしょうか? また、この例であれば時刻表クラスに列車オブジェクトを取り出すような Train getTrain() とかいうメソッドを用意し、受付クラス中のメソッドで、 Train t = timetable.getTrain(); t.hogehoge(); 等する方が一般的でしょうか?なにやらうまく説明できないですが、不明な点があればご指摘ください。

    • ベストアンサー
    • Java
  • VC++クラス間のアクセス

     いつもお世話になっております。プログラミングの初心者で、言語についての知識は独学で勉強したCのみです。環境はOSがwindowsXPで、開発環境はVisualStudio2008professionalを使用しています。  今回の質問はクラス間のアクセスについてです。実現したい動作は以下のような内容です。  (1)Form1が初期化される時に、クラス(フィールドとメソッドを持つ もの)をインスタンス化する。  (2)イベントで、別のフォームを開く。  (3)(2)で開いたフォームのクラスから(1)でインスタンス化したクラスに アクセスして、クラスのメソッドを使用する。  拙い表現で分かりにくいかもしれませんが、どうかよろしくお願いいたします。

  • インスタンス変数とクラス変数の違い

    1つのクラスオブジェクト内のインスタンス全てで共有できる クラス変数 @@a と、 同じインスタンス内であればメソッドの定義を越えてその値を 参照したり、変更したりできるインスタンス変数 @a のスコープの違いをお手すきでしたらご指導願えませんか? あとクラス変数にはセッターやゲッター等のアクセスメソッドを 設定できるんですか? いろいろ知りたいです。

    • ベストアンサー
    • Ruby
  • 継承・実装の関係で悩んでいます。

    継承・実装の関係について悩んでいます。 ここでは、アクセス制御を考えずに、インスタンスかstaticかabstract(ここではabstract final staticやabstract classのこと)の違いで、どう継承するのか考えています。 // 継承 はメソッドのオーバーライドのことを考えます。(オーバーロードは考えない) クラスAからクラスBでオーバーライドしたメソッドは、 クラスCでさらにオーバーライドできるのでしょうか? クラスCが クラスBのクラスAからオーバーライドしたメソッド をクラスBのメソッドとして見たときに、オーバーライドすることは可能なのでしょうか? クラスA │ インスタンスフィールドA │ staticフィールドA │ │ クラスA() { } │ │ インスタンスメソッドA () { } │ staticメソッドB() { } ↓ クラスB extends クラスA │ インスタンスフィールドA // 継承 │ インスタンスフィールドB │ staticフィールドB │ │ サブクラス1() { } // コンストラクタは継承しない、super()で呼び出す │ │ インスタンスメソッドA () { } // 継承 │ │ インスタンスメソッドB () { } │ staticメソッドB () { } ↓ クラスC extends クラスB implements インタフェースD, ... ↑ インスタンスフィールドA // クラスBのフィールドを継承 │ インスタンスフィールドB // クラスBのフィールドを継承 │ インスタンスフィールドC │ staticフィールドC │ │ サブクラス2() { } │ │ インスタンスメソッドA () { } // クラスBのメソッドを継承 │ インスタンスメソッドB () { } // クラスBのメソッドを継承 │ インスタンスメソッドD () { } // インタフェースDのメソッドを実装 │ インスタンスメソッドE () { } // インタフェースDのメソッドを実装 │ │ │ インスタンスメソッドC () { } │ staticメソッドC() { } │ interface インタフェースD extends インタフェースE ↑ │ staticフィールドD // public static final │ │ インスタンスメソッドD() { } // public abstract │ インスタンスメソッドE() { } // 継承 │ interface インタフェースE staticフィールドE // public static final インスタンスメソッドE() { } // public abstract

    • ベストアンサー
    • Java

専門家に質問してみよう