あるHPで以下のようなことがかかれていました。
-------------------------------------------------
この例では Java 環境ですでに存在するクラスからオブジェクトを作成する。しばしば、 Java オブジェクトは次のような文で作成される。
Date today = new Date();
これにより、新規 Dateオブジェクトが作成される。
-------------------------------------------------
で、どれがオブジェクトなんですか?
todayがオブジェクトなんでしょうか?
BASICならわかるのですが、オブジェクト指向ってさっぱりまかりません。だれか助けてください。
No.6
- 回答日時:
良い比喩がもう出てるようですが、わたしからも一点。
変数とオブジェクトは同じもの。
ちょっと乱暴かもしれませんが、そう思っておいてもかまわないと
思います。いや、もちろんtodayは実際にはtodayというオブジェ
クトの実体というよりその参照、例えるならアイコン、目印、
ポインタ、WWWページに対するURLみたいなものですが。
そのオブジェクトに対してお願いする(メッセージを送る)基本的
には唯一の窓口ではあります。
# 本当は「変数=オブジェクトの1形態であるインスタンス」で
# それとは別にnewでどこかに代入しなくてもクラス自体におねが
# いできる場合もあるのですが、ややこしくなるのでやめておきましょう。
Date yesterday = new Date();
だとデフォルトのDateオブジェクトがyesterdayという名前ででき
るだけなので、さらにこのあと昨日の日時になってくれるよう
お願いをyesterdayに対してしなければなりませんが、最初に
Date()のところで初期化用の値を与えて、そう、文字どおり
初期化させることもできます。どっちのやりかたをサポート
するかはクラスの設計によりますが、たいていどちらもあったり
します。
効率の問題から、intなどよく使うものについてはBASIC流の
値そのものをもつような形にすることができますが、むしろ
そちらのほうが特別で、基本的には、上記のようにすべての
変数がなんらかのオブジェクトである、と考えたほうがよい
でしょう。
ようやく、オブジェクトというものが見えてきました。
あとは、多くの例文に触れて、学んでいきたいと思います。ありがとうございました。
No.5
- 回答日時:
> 変数とオブジェクトの違いをはっきり区別して理解したいのですが、何かいい例えありますか?
Java は、システムが大きな紙で、ページ数もたくさんある本を持っています。
その本は、利用者が自由に見ることができません。
オブジェクトを new するということは、その本の空いているページを探して、
指定したクラスの情報と、どういうクラスで使っているよ、と言うことを書き
込みます。これが、オブジェクトを生成する、ということにあたります。
その本は、利用者が自由に見ることができないので、「何ページに書いたよ」と
いうことを new は返してくれます。
ページ数をメモっておかなければ、後で、そのページを見ることができないので
変数にメモっておきます。
利用者も、本を持っているのですが、一ページの大きさがとても小さいです。
なので、オブジェクト自体を書き込むことができず、Java のシステムが持っている
本のページしか書き込むことができません。
> 変数を初期化しているような感じに思えます
「オブジェクトが生成された場所を示すもの(このたとえだと、ページ数)で、
変数を初期化してるんです。
この「変数」というのは、正確には「参照変数」と言います。
オブジェクトを指ししめすだけしか能が無いやつです。
因みに、利用者が持っている本の一ページは小さいのですが、小さなデータなら
書き込んでおくことができるようになってます。その「小さなデータ」というの
は、組み込みクラスと言われるもので、int や double なんかがそれにあたります。
整数を表現するのには、組込みクラスである int を使う方法と、(普通の)
クラス Integer を使う方法があります。
int を使う、ということは、手元の小さい本に直接値を書き込んでおくことに
相当します。クラス Integer を使うということは、Java が持っている大きな
本に、Integer 用のページを確保して、そこに値が書き込まれます。手元の本
には、その大きな本で使っているページ数だけが書き込まれます。
# 私が、ポインタ(参照)のことを説明するときに良く使うたとえです。
# わかりやすいかどうか、については、いまいち、自信がありません (^^;
# でも、回答に対する自信には、「あり」にチェックをつけるけど
組込みクラスである int を使う方法と、(普通の)
クラス Integer を使う方法の違いを、わかりやすく説明していただきありがとうございました。今後ともよろしくお願いします。
No.4
- 回答日時:
#2の ymmasayan です。
> なんとなくイメージがつかめてきたんですが、この式の場合、変数を初期化しているような感じに思えます。(todayが変数として)考え方間違っています?
むしろtodayという代表名でメモリーを確保してそこにクラスをコピーしたと考えるべきでしょうね。
当然 プロパティ(変数と考えていいでしょう)は初期状態ですね。メソッドは既にコピーされています。
因みに、プロパティの初期化は通常 init関数 で行います。
new → init のワンセットで独り立ちできるオブジェクトが完成することになります。
最後に、例えが説明不足でしたが、new で車の骨格を作り、init で塗色や内装を整えて、完成車になるという感じでしょうか。車が「走る」というのはメソッドですから、new の時点で走る機能が備わっている必要が有ります。
No.3
- 回答日時:
じゃあ僭越ながら私も補足を。
いっそ、オブジェクトの比喩として、「ファイル」とか「コマンド」
アプリケーションソフトの「アイコン」だと思うといいかもしれません。
なにかやってくれるかたまり。
Netscape myNetscape = new Netscape();
とすると、Netscapeというソフトを新しくひとつ作ってコピーした
ことになる、と考えてみましょう。myNetscapeがアイコンです。
中身はよくわかんないけど、これをクリックしてなにか動かしてみたり
終了させてみたりすることができる。
そのDateの例も、todayというアイコンが産まれたのです。
Date yesterday = new Date();
これでyesterdayというオブジェクトが産まれた。
でも、この状態だとただ初期状態のやつを二つ作っただけだから、
それぞれのプロパティを設定して実際の今日とか昨日の時刻を
設定してやらなきゃいけない。
そして、これができると、それぞれを比べてみたり他のソフトに
組みこんだりすることができる。
ゴージャスな時計だと、このDate型オブジェクトを二つも三つも
抱えてるかもしれない。その時計自体も時計オブジェクト、という
ものになりますね。
# ところで、「オブジェクト=インスタンス」でとりあえずいいと思いますが、
# 「クラスメソッド」なんてものが出てくるとまた混乱しちゃいそうですね…。
ありがとうございます。だんだんわかってきたような・・・
変数とオブジェクトの違いをはっきり区別して理解したいのですが、何かいい例えありますか?
No.2
- 回答日時:
a-kuma さんの回答で完璧と思いますが、多少素人わかりのする補足を。
オブジェクトを車だと仮定します。車名を例えばクラウンとすると、クラウンの設計図がクラウンというクラスです。設計図をもとに顧客の注文に合ったクラウンを1台生産します。これがオブジェクト(インスタンス:実体)です。オブジェクト指向では設計図と実際の車の両方をまとめてオブジェクトと呼んでいます。(私の理解)・・・設計図も実車もクラウンでひとまとめ。
ということで本題に戻ります。
Date:クラウン、today:車台番号 と考えると
Date today = new Date()
は「クラウンの設計図を使って新しい車を1台作り(右辺)、todayという車台番号を持った、顧客の注文通りのクラウンが誕生した(左辺)」ということになります。
却って、判りにくいでしょうかね。
なんとなくイメージがつかめてきたんですが、この式の場合、変数を初期化しているような感じに思えます。(todayが変数として)考え方間違っています?
No.1ベストアンサー
- 回答日時:
today がオブジェクトです。
ちなみに、Date がクラス。より、正確に書くと new Date() で、どこか知らないところに作成された
オブジェクトを指し示すもの(参照という)が today です。
無理矢理日本語で直訳すると、
クラス Date をさす変数を today という名前で宣言し、その初期値に
クラス Date のオブジェクトを新規作成して、その参照を設定する。
かな。
# かえって、わかりにくい? (^^;
因みに、もっと正確に書くならば、「オブジェクト」とは言わず、
「インスタンス」といいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- Java オブジェクト指向プログラミングの実践本を紹介してください 3 2022/09/19 04:56
- その他(プログラミング・Web制作) Pythonのオブジェクトの関数について 2 2023/05/11 19:15
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
- Illustrator(イラストレーター) 【シェイプ形成ツール】でうまく分割できない 1 2022/05/26 10:57
- Excel(エクセル) テキストの背後にあるオブジェクトとは 3 2023/01/03 20:22
- PowerPoint(パワーポイント) パワーポイントのアニメーションについて 4 2023/06/14 16:25
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) Excel VBA オブジェクトマクロ 使用指定について お詳しい方教えてください。 共通エクセルフ 2 2023/03/14 17:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
多人数のじゃんけんプログラム
-
COMコンポーネントって何?
-
VBA 同じ名前のオブジェクトを...
-
ワイルドカード<?>と型パラメー...
-
VBAのWindowオブジェクトとWork...
-
文字列でクラス型名を取得したい
-
Listに格納されているオブジェ...
-
オブジェクト名をforループ内で...
-
ArrayLsitのデータ取得
-
LISTBOXの内容が更新されま...
-
Visual Studioでのbmpファイル...
-
パワーポイントのVBAでテキスト...
-
.getElementById()のエラーにつ...
-
C#でフォームのオブジェクト名...
-
Listに格納されたオブジェクト...
-
Vbで通常使用するプリンターを...
-
Excelで =EMBED("Acrobat Docu...
-
VBAからノーツを起動
-
Java認定試験3級の問題です。 ...
-
BufferedWriterのcloseメソッド
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
パワーポイントのVBAでテキスト...
-
Excelで =EMBED("Acrobat Docu...
-
EXCEL VBAにて動的にCheckBOXを...
-
ワイルドカード<?>と型パラメー...
-
C#でフォームのオブジェクト名...
-
VBAのWindowオブジェクトとWork...
-
vb.net オブジェクト指向につい...
-
COMコンポーネントって何?
-
オブジェクトレベルとメタレベル
-
ビジュアルC++でボタンの有...
-
時間帯判定をする。
-
LISTBOXの内容が更新されま...
-
VBA 同じ名前のオブジェクトを...
-
オブジェクト名をforループ内で...
-
Object型からDouble型へのキャスト
-
ADO オブジェクトの渡し方
-
bmp画像をjpegやpng画像に圧縮...
-
Vbで通常使用するプリンターを...
-
戻り値がクラスオブジェクト
-
VBAでvlookup関数から、別シー...
おすすめ情報