オブジェクトとは?

このQ&Aのポイント
  • オブジェクトとは、データとそれを操作する機能をひとまとまりにしたものです。
  • 具体例として、配列を考えてみましょう。配列はデータ(数値など)を持ち、それを操作する機能(要素の取得など)を提供します。
  • オブジェクトは、データと機能が組み合わさったものであり、コードの再利用や保守性を高める重要な概念です。
回答を見る
  • ベストアンサー

「オブジェクト」について質問

javaの参考書に、オブジェクトについて、「データとそれを操作する機能をひとまとまりにしたものをオブジェクトといいますが、」と書いてありました。 質問1:抽象的過ぎて、上記の解説がわたしにはよく理解できませんでした。 初心者の私にも理解できるように、身近な具体例を織り交ぜてご説明頂けましたら幸いです。 ^ 質問2:「データとそれを操作する機能をひとまとまり」と書いてありますが、これを配列に例えると、 例えば、int [] n ={3,5,7};という配列があったとします。これに int data=n[0];のように配列要素へのアクセスを行うと、配列は自身の持ってるデータを渡しますよ?これはまさしく「配列はデータを持っていて(上記例ではint型の数値を持っていて)、それを操作する機能(上記例では配列の0番目の要素を変数dataに引き渡す)を持っている」こういうことですか?

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

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

  • ベストアンサー
  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.4

回答1 オブジェクト というのは現実のものをクラスとして表したもの。 例えば人、例えば車、国とか花とか黒板、鉛筆、パソコン、風、水、先生、子ども、エトセトラ こういったものがオブジェクトになるの。 車を例に挙げると、車というのはまた複数のオブジェクトを中に持っているわね。 タイヤ、エンジン、フレーム、ナンバープレート・・・ こういうのがこの車を表すデータになるわけ。 そして車の 走る、ガソリンを入れてもらうなどが操作と機能になるの。 回答2 配列 というものをオブジェクトとして考えてみて どんな機能があるのか考えると ・データを保持する ・指定されたインデックスのデータを渡す とかいいかもね。 Arrayというクラスに getAt(int index)というメソッドを用意してあげて こんな感じね。 class Array { int[] n; public Array(int[] ary) { n = ary; } public int getAt(int index) { return n[index]; } } class Main { public static void main(String[] args) { Array n = new Array(new int[]{3,5,7}); int data = n.getAt(0); } } ※コンパイル確認していないのでミスあるかも?

wantanton
質問者

お礼

丁重なご回答有り難う御座います! 特に配列がオブジェクトである例を例示してくださいまして、わかりやすかったです! ありがとうございます!

その他の回答 (4)

回答No.5

このあたり100人が100種類の回答をするかもしれませんが、 以下は私の見解です(といっても多くのOOPの本の内容と だいたい同じだと思います(^^;)。 質問1 ですが、例えば 矩形の領域に何かを描くことを考えると 1) 矩形の位置と大きさを決める。 2) 矩形内を描画する。 なんて操作が必要でしょう。すると、 A) 矩形の位置と大きさ B) 描画する図形データ をどこかに保持しておく必要が有るはず。 このような、A), B) の「データ」をその内部に保持し、 1), 2)のような「操作」を実行できるものを 「オブジェクト」といったりします。 「オブジェクト」は最初に述べたような 「矩形の領域に何かを描く」というような役割を 持っていて、オブジェクト指向分析ではこれを「責任」 と呼んでいます。 まず、プログラムを「責任」に分解して それにオブジェクト(データと操作)を割り当て、 さらにオブジェクト群の連携を考えてゆくことを 「オブジェクト指向で設計する」 といったりします。 このあたり若干の発想の飛躍が必要なので、最初は 判らないかもしれませんが、上記の説明などを踏まえて、 具体的なソースに触れてみると、 もう少し理解が進むかもしれません。

wantanton
質問者

お礼

丁重なご回答有り難う御座います! オブジェクトの概念について、だいぶわかりやすかったです!!! また一歩理解が進みました!

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

>>、「データとそれを操作する機能をひとまとまりにしたものをオブジェクトといいますが、」 質問1:抽象的過ぎて、上記の解説がわたしにはよく理解できませんでした。 単純に配列から1つの値を持ってくるだけでは、「機能をひとまとまりにした」とは言えないでしょう。現実のプログラムでは、その配列は商品単価だったり、年齢を意味していたりします。なので、機能とは、単に0番目を拾ってくるではなく、「単価を○%値上げする」とか、「月初での年齢を計算する」とかいう機能であり、それらをクラスにまとめたりしています。 そういう機能の処理はデータとペアで初めて意味があるので、それらをひとまとまりにすれば、プログラム作成が楽になり、メンテナンスも容易になると考えられて、それらをクラスとかオブジェクトと呼んで、「オブジェクト指向」ってのが(過去に)もてはやされ、あたかも「銀の弾丸」「黄金ハンマー」みたいに、ソフト開発の万能薬扱いされました。 でも、開発環境の現場では、「やっぱり、銀の弾丸って存在しないよね」「クラスって使いにくいよね」という評価を下す人もいます。 まあ、あまり「オブジェクト」という単語にこだわる必要は無いと思います。

wantanton
質問者

お礼

丁重なご回答ありがとうございます! あまりオブジェクトにこだわりすぎてもだめですね、、

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.2

そうですね。 配列をオブジェクトと考えると、「i番目の要素を取り出す」というのはメソッドになります。 たとえば、「A市立第一中学校」をオブジェクトとすると、 ・校長先生の名前を得る ・引数で与えた苗字を持つ生徒(オブジェクト)のセットを得る ・引数1で与えた生徒(オブジェクト)を転校生として、引数2で指定した学年の、引数3でで指定したクラスの転校生として追加する などが、操作手段(メソッド)になります。 ただ、No1の人が書いているように、この程度のことは入門書に書いてあると思うんですが。

wantanton
質問者

お礼

ありがとうございます! 分かりやすい例示までしていただいてありがとうございます!感謝です!

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.1

> 初心者の私にも理解できるように、身近な具体例を織り交ぜてご説明頂けましたら幸いです。 その参考書に書いてあるんじゃないの?

wantanton
質問者

お礼

ありがとうございます! たしかに書いてありました 笑

関連するQ&A

  • 配列は何故オブジェクト?

    僕はプログラミング初心者です。 javaの参考書で、配列について記述されていた章にて以下の記述がありました。 「データとそれを操作する機能をひとまとまりにしたものをオブジェクトといいますが、その意味では配列もオブジェクトです」と。 そこで、配列がオブジェクトである理由について、以下の仮説を立ててみました。正しいですか? 配列 ・データを保持する(配列要素を保存する) ・指定されたインデックス(牽引番号)のデータ(配列要素)を渡す 例えば、int [] n ={3,5,7};という配列があったとします。このソースコードにより、配列は箱に入れられヒープに保管されます。これにより、配列はデータを持っていることを意味する。これに int data=n[0];のように配列要素へのアクセスを行うと、配列は自身の持ってるデータ(配列要素) を変数dataに渡します。これは配列は、指定されたインデックス(牽引番号)のデータ(配列要素)を渡す機能を実行している。 つまり、上記から配列はデータとそれを操作する機能を持っており、オブジェクトといえる。

    • ベストアンサー
    • Java
  • 配列について質問

    僕はjava初心者です、ご回答は優しくお願いします! 質問1:配列の定義について、本質的には「配列要素の集合」のことでしょうか? 違ったら、その本質をご教示ください。 質問2:配列は、オブジェクトだとjavaの参考書には書かれていました。そして、オブジェクトとは、「データとそれを操作する機能(メソッド)がひとまとまりになったもの」とも書いてありました。 ここでいう「データ」とはなんですか?配列要素のことですか? 質問3:配列とは、ヒープ内にある「配列要素の集合を保管した箱」でしょうか?

    • ベストアンサー
    • Java
  • JavaのObjectからintへの型変換について

    JavaのObject[][]からint[][]への型変換について、質問があります。 Jtableの表の中身を構成する要素【Object[][]】を取り出し、一部をint[][]として数字の条件と比較したいと考えております。 Object型の配列を簡単にintに変換できる方法は例えばどの様なものがあるのでしょうか? 教えていただけるとありがたいです。

    • ベストアンサー
    • Java
  • 無名配列の作成方法について質問

    以下はJavaの参考書の問題集に掲載されていた、無名配列を作成するソースコードです。 この書き方について疑問があるので、質問させて頂きます。 int[][]n=new int[2][]; n[0]=new int[3]; このn[0]=new int[3];が、無名配列を使って要素に値を設定していると解説に書かれていました。 しかし、この参考書では、別のページで無名配列の作成方法として、int[]n; n=new int[]{1,2,5};のように、要素リストを代入する書き方が、無名配列の例として 紹介されていました。。 質問1:何故、n[0]=new int[3];の書き方も無名配列なのですか? 質問2:そもそも「無名配列」とは何ですか?参考書にもネットで調べても その解説がほとんど無かったので、、、

    • ベストアンサー
    • Java
  • じゃんけんプログラムとアルゴリズムについて質問

    以下の、過去に私が質問した、2次元配列とじゃんけんアルゴリズムの質問のURLの見た上で私の質問に答えてください。 URL:ttp://okwave.jp/qa/q7038056.html 質問: public static int janken(int n){ int[][]tb1={ {9,9,9,9}, {9,0,1,2}, {9,2,0,1}, {9,1,2,0} }; int m=rand3(); System.out.println(m+" "); return tb1[n][m]; } 上記ソースコードの2次元配列について、何故「9」という数字があるのか、又1次元目と2次元目の要素数が「4」あるのかわかりませんでした。 上記のURL先で頂いた回答を元に、私は理解に努めました。その理解が正しいか判定してください。 私の理解: 「この勝敗表をあらわす2次元配列について、それぞれのプレイヤーのジャンケンの『手』 を要素番号『1,2,3』に対応させている。要番号1,2,3を使用するためには、Javaでは要素番号は0から始まるため、「要素数」が4つ必要。だから、要素数が4ある。よって、この要素番号『0』はこのプログラムに於いては不要。 また、2次元目の要素番号『0』に関連する要素に『9』という数字がチョイスされてるが、『9』という数字のチョイスに特に意味はないが、、0、1、2以外の数字であることに意味はある。因みに、その2つの要素番号に対応する要素が勝敗の結果の番号になる。」 こういうことでしょうか?

    • ベストアンサー
    • Java
  • 配列の定義について

    配列とは、同じ形式のデーターを連続した記憶領域で確保するためのものである。 配列を構成する個々の領域を要素と呼び、要素の位置を添え字で示す。 Javaでは配列の先頭の要素を(0)番目と呼ぶ。 今、hairetsuという名前で10個の整数からなる配列を定義したい。 この場合の配列は(0)番目から始まり、終端は(9)番目である。 これを定義するには (int[] hairetsu;) (hairetsu = new int[10];) のように2行で行う方法と、 (int[] hairetsu = (new int[10];) のように、一行で行う方法がある。 Javaでは定義済みの配列の要素数は、配列変数名.(length)で知ることができ、 終端は(length + 1)番目となる。 したがって(length + 1)番目以降を使おうとすると、 配列要素の範囲外で(例外)が発生する。 この文章の( )の中は間違っていますか?

    • ベストアンサー
    • Java
  • オブジェクト指向モデルの抽象化について

    下記の設問について質問です。 設問:次の文が正しいか否かを答えよ 「オブジェクト指向モデルでは、抽象化の対象となるオブジェクトの操作をあらかじめ指定しなければいけない」 ~~設問以上~~ まず前提知識として抽象化というのはクラス、メソッドの名前だけを、 中身は何も書かないで予め宣言しておくことという理解でよいでしょうか。 その場合、上記「」内の文で誤っているところとしてはオブジェクト指向モデルでは抽象化は必ずしも必要ないから誤っているという理解でよいでしょうか。

    • ベストアンサー
    • Java
  • Javaの配列の宣言方法のメリット?

    1週間ほど前からJavaを独学している者です。 C言語をその前からやっていて、初心者レベル程度ならわかると思います。 そこで、質問です。 C言語の配列宣言:   int array[10]; Javaの配列宣言:   int array[] = new int[10]; 二つの言語とも、要素10個のarray1次元配列変数を宣言していると思います。 C言語の書き方はシンプルなので、納得がいきますが、Javaの方はどうしてこの形で宣言をするのかわかりません。(自分が言語製作者ならシンプルな書き方を採用します) だから、このような宣言の方法をとるということは何か理由があるのだと思います。 自分が思うところ、JavaはC言語より、柔軟で多機能だとおもうので、その影響で汎用性をますために、 長くなっているのかな~?と思っています。 こんごJavaの学習を進めていくと、例えば、   int array[] = new double[10]; //←エラーになりました みたいに型のちがう、宣言が出てきたりするのでしょうか? ちらっと、学習に使っている本をみたところ、動的配列の作成は別の操作で実現しているようなので、 「動的とは関係ないのかな?」と思っています。 長くなりましたが、Javaの配列宣言のメリットを教えてください。

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

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

  • Eclipse による Java プログラミングの配列について質問です

    Eclipse による Java プログラミングの配列について質問です。 下の二つの問題に対して、それぞれのソースコードを教えてください。よろしくお願いします。 1. int型配列aの要素の中で,正の値だけを順に配列bの要素に 代入して,その結果を表示するプログラムを作成しなさい. ※配列aの要素と配列bの要素をそれぞれ表示すること. (実行例) 配列a={5 -1 3 4 -2 7} 配列b={5 3 4 7} 2. int型配列dataの要素の中で,最大値と何番目の配列の要素が 最大値か表示するプログラムを作成しなさい. ※配列dataの要素も表示すること. (実行例) 配列data={31 41 59 26 53 58 37 97 93 23 84} 最大値は97です 最大値は7番目の配列の要素です

    • ベストアンサー
    • Java

専門家に質問してみよう