Java オブジェクト インスタンス

All rights reserved. 【Java】オブジェクト指向:インスタンス変数の初期化(コンストラクタ) 04.30. miyabisan2; コメントを書く; この記事は1分で読めます . JavaのObjectクラスにあるメソッドequalsは、何かのインスタンス同士が「同じ」かを調べるメソッドです。この記事では、そもそも同じとは何ぞやというところからスタートして、Objet.equalsの具体的な例とここは押さえておきたい! !というポイントまで、分かりやすくお伝えします。

ただ単に実体という意味の文脈で使われる場合は、オブジェクトもインスタンスどちらも同じ意味といえそうです。 実際に、Javaのコードで書いてみる 1.設計書の名前を、『車』という名前にする。 Car.java. 2019.11.21オブジェクト指向とは、プログラミングをする上でなくてはならない概念だ。プログラミングをする上で避けて通れないが、理解するのが難しい。と言われてもわからないものはわからない。オブジェクト指向とはいったいどんな考え方なのか? このページでは、オブジェクト指向のイメージを掴んでもらえるように、できるだけ簡単に説明した。オブジェクト指向について知りたい方は参考にしてほしい。目次まず、はじめに理解しておきたいことがある。オブジェクト指向は「概念」だ、ということだ。概念という言葉自体も難しいが、なんとなく意味はわかるだろう。物事や対象を丸ごとひっくる見たときの大まかな理解のことだ。なんとなく意味はわかっても、人それぞれ解答が違うだろう。時代や国によっても答えは違うはずだ。オブジェクト指向もこのように曖昧なものだと思ってほしい。愛や国家ほど漠然としたものではないが、人によって「どこが本質か?」「何が正しい説明か?」が違う。オブジェクト指向について説明している技術書やWebサイトは数多く存在するが、どの説明もバラバラだ。言葉も無駄に難しい。語っている本人たちは理解して語っているが、それを読む初心者にはたまったものではない。あるサイトでオブジェクト指向について調べてなんとなく理解できたようでも、別のサイトを見て説明が違っている場合、理解したと思っていたことが本当に正しいかどうかわからなくなる。実際、10年やっていても20年やっていてもどこが本質か?の答えはエンジニアによってバラける。100%理解しようとするからよくわからなくなる。「ベテランエンジニアは色々とごちゃごちゃ言っているけど、なんとなくこんなもんかな?」くらいの理解で構わない。その状態になれただけで十分な成長だ。あとは自分の成長と共に、理解が進んでいくし、自分の中で定義ができるようになるだろう。それでは、オブジェクト指向の説明に移っていこう。オブジェクト指向プログラミング(Object Oriented Programming: OOP)とは、プログラムを手順ではなくて、モノの作成と操作として見る考え方だ。オブジェクトとは「モノ」を意味する。「テレビ」というモノを操作するとき、中でどういうプログラムが動いているか知る必要はない。リモコンで操作すれば、動く。「こういう”モノ”を作りましょう」「そして、その"モノ"を使いましょう」というのがオブジェクト指向という考え方だと思っていい。なぜモノを作っておくと便利なのか?プログラムというのは上から順番に動作手順を書いていけばとりあえずは動く。しかし、場合によっては大変だ。次のレーシングゲームを想像しよう。とそれぞれプログラミングしてもいいが、1万種類車種があったらどうだろうか? このプログラミング担当者は苦痛だろう。なんとかプログラミングをこなしても、途中でマネージャーが「やっぱりCボタンを押したらバックする機能を追加しよう!」と言い出したらどうだろうか? もちろん1万個のプログラムを全部書き換えることになってしまう。絶望を感じるだろう。そうならないために、「車」というモノをはじめから定義しておいて、それを使ったほうが楽だ。こうしておけば、「Cボタンでバック」という機能を追加するとき「車」プログラムだけを変更すればいい。「車」というモノを用意しておけば、大人数で開発するときにも便利だ。「車」というプログラムは作成者だけが中身を知っていればよく、他の人は「Aボタンを押すと走る。Bボタンを押すと止まる」だけ知っておけばいいことになる。手順を全部書いたプログラムだと、他のプログラマーも中身を理解していないといけない。下手したらプログラムを壊してしまうかもしれないからだ。モノを用意して、それを他の人が触れないようにしておけば、他の人がプログラムを壊してしまう心配がなくなる。レーシングカーにトラックを登場させるとしよう。「Aボタンを押すと走る。Bボタンを押すと止まる」という機能は車と一緒だ。この機能は再利用すべきだろう。これもオブジェクト指向の考え方だ。すでにあるモノをうまく使って、加工したモノを作れば効率は良くなる。オブジェクト指向の考え方と、なぜその考え方が大切かイメージできただろうか? ここから詳細に入っていく。わかるところまで付いてきて頂きたい。オブジェクト指向には基本となる用語がある。これらはすべて理解して覚えておきたい。オブジェクトは、オブジェクト指向の根本だ。先ほども出てきたが、オブジェクトとは「対象」「物」という意味で、プログラミングにおいてはデータと処理の集まりを意味している。オブジェクト指向で現実のものを例えると、このブログを見ているあなたもオブジェクトであり、使っているPCやスマホもオブジェクトだと言える。あなたには「名前」や「性別」といったデータ(個体の情報)があり、何かを「見る」「聞く」「話す」といった処理を持っている。下で説明するクラスとの違いがわかりにくいが、設計図から作った実物がオブジェクトだ。下図を眺めてから次の説明を確認してほしい。 クラスとはオブジェクトの設計書のようなもので、オブジェクトの中のプロパティやメソッドをひとまとめにしたものだ。例えば実際に作られた車はオブジェクトだが、車の設計図はクラスだ。割と抽象的な概念なので、ここでは「クラスとは設計書である」と覚えておこう。オブジェクトが持っているデータのことをプロパティ(属性)と言う。車の例えだと、車というオブジェクトは「メーカー」、「排気量」、「色」といったプロパティを持っていると言える。データにはさまざまな種類があり、たとえば「速度」などといったオブジェクトの状態を示すものもある。メソッド(操作)とは、オブジェクトが持っている処理のことで、車の例だと「走る」、「曲がる」「止まる」など、オブジェクトが何らかのアクションを起こす処理のことだ。このオブジェクトで起こすことができるアクションのことを「振る舞い」とも言うケースもあるので、覚えておいてほしい。クラス・プロパティ・メソッドはJavaで書くと次のようになる。インスタンスとは「実体」「事例」という意味で、プログラムでオブジェクトを実際に使う時に生み出されるものである。設計図からオブジェクトを作ることをインスタンス化と呼ぶ。Javaでは、次のように記述する。オブジェクトが持つデータや処理のうち、別のオブジェクトから直接利用される必要のないものを隠すことを言い、利用する場合は外部から操作するために作られた処理を設けることを言う。先ほどのレーシングカーの例でも出てきた、オブジェクト指向の基本概念だ。プログラムが壊れにくくなるし、大人数で開発をするときすべてのコードを認識する必要がなくなる。特定のオブジェクトの機能を引き継いで使うことを継承と言う。レーシングカーの例だと"車"からトラックを作るという話があったが、あれが正しく継承だ。似たようなオブジェクトを複数作る時に、全てのプロパティやメソッドをいちいちプログラミングするのは非常に手間が掛かるが、継承を使うことにより、同じ機能を実装できる。これについては後ほど紹介するサンプルプログラムを見ると分かりやすいだろう。ポリモーフィズムもオブジェクト指向プログラミングの基本性質だ。世の中の家電は、説明書を見なくてもだいたい使い方がわかるだろう。また、車はどの車種であってもアクセルが右というふうに決まっている。同様にプログラムも同じ処理の名前で動いてくれると、処理名を覚える必要もないし、ミスも減らせてハッピーだ。クラスによって同一のメソッドで異なる処理が行えるという性質をポリモーフィズムという。よくわからない部分もあると思うが、これに関しては学習を進めてから理解すればいい。名前だけ覚えておこう。ある程度基本となるオブジェクト指向の用語を説明したが、理解できただろうか?さらに理解が進められるように、ここでJavaのサンプルプログラムを紹介する。プログラミング初心者でJavaがよく分からないという方は飛ばしていただいて構わない。サンプルプログラムはRPG(ロールプレイングゲーム)風のシチュエーションにしている。勇者、魔法使い、僧侶の3人のパーティが、ラスボスと戦うシーンを思い描いてほしい。RPGに登場する人間の基本的なプロパティ、メソッドを設定する。人間クラスを継承したクラスで、勇者特有の必殺技メソッドを持つ。人間クラスを継承したクラスで、魔法使い特有の攻撃魔法メソッドを持つ。人間クラスを継承したクラスで、回復魔法のメソッドを持つ。人間クラスを継承しており、ラスボスの邪悪な必殺技メソッドを持つ。プログラムの主処理を記述する。それぞれのオブジェクトを呼び出してRPG風のメッセージを表示する。また、最後に各キャラクターのステータスを表示する。 それでは解説していこう。まず各キャラクターのベースとなるHumanクラスから。Humanクラスには身長、体重、体力などRPGのキャラクターのベースとなるプロパティや、話す(talk)、食べる(eatFood)などのメソッドが設定されている。各プロパティは公開範囲がprivateなので、データを参照したり変更したりするには「setName」、「getName」といったsetter、getterと呼ばれるメソッドを使う必要がある。消化する(digestFood)というメソッドもあるが、これは体の内部のことで公開する必要もないため、カプセル化の際に隠しているのがわかる。それぞれのクラス名の右側に「extends Human」と書かれているが、これはHumanクラスを継承することを意味している。Humanクラスを継承することにより、話す、食べるといったHumanクラスが持つ人間の基本動作をそのまま利用することができるのだ。さらに、継承した機能に加えて、それぞれのキャラクターは必殺技や魔法攻撃のメソッドを持っている。継承した上で追加のメソッドやプロパティを設定することで、別の機能を実装できるのだ。また、最初に呼び出される際、「コンストラクタ」と呼ばれる処理によって、各キャラクターの身長、体重、体力などが設定される。コンストラクタとはオブジェクトを最初に作る時に実行される処理で、オブジェクトの初期化処理などを書くケースが多い。ここではプログラムの流れが書かれている。最初に各キャラクターのオブジェクトを生成しており、ここで初めてオブジェクトに命が吹き込まれてRPG風の戦闘が始まる。各キャラクターの攻撃メソッドにターゲットを指定して呼び出せば、ターゲットの体力が減少する。僧侶の場合はターゲットを指定して回復メソッドを呼び出せば、ターゲットの体力が回復する処理となる。メソッドのターゲットの指定には、Humanクラスを設定している。Humanクラスは全キャラクターが継承しているクラスなので、どのキャラクターでも対象として指定できるのだ。回復アイテムを使用すれば、アイテムによって回復するプロパティや分量が変わるように設計されている。Humanクラスの食べるメソッド(eatFood)を呼び出すことで、Humanクラスで設定された消化メソッド(digestFood)が呼び出され、回復する仕組みだ。消化メソッドはカプセル化によって隠されているので、呼び出し側は消化まで意識する必要はない。そして最後に各キャラクターのステータスを表示している。最初に生成したオブジェクトごとにプロパティの値は異なっており、また戦いによるダメージによって各キャラクターのプロパティが変わっているのがわかるだろう。オブジェクト指向の基本について、できるだけ分かりやすく紹介したがいかがだったろうか?オブジェクト指向とはいったいどのようなものか、イメージだけでも掴んでもらえたら幸いだ。もちろん、ここで紹介した内容がオブジェクト指向の全てではなく、理解するには更に知識を深める必要がある。おすすめなのは、技術書などを読んでみるだけではなく、実際にプログラミングしながら理解することだ。そうすることにより、プログラミングスキルを身に着けながら、オブジェクト指向に関する理解も深まりやすい。まずは上記プログラムを組んでみることをオススメする。JavaがわからなければPHPでも何でも構わない。Webで検索するとたくさんの実例が出てくる。トライしてみよう。このページの続きや関連ページは下記から一覧で確認できます。という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。エンジニアの入り口に立つために無料で2,3日中にお手元にお届けします。【ITエンジニア養成スクール & IT研修専門企業のリナックスアカデミーです。】エンジニアの入り口に立つために役立つようなコンテンツを日々ご提供していきます。講師や代表やスタッフ陣が毎日楽しく書いています。ご質問・ご指摘等はぜひコメントください。大変分かりやすかったです嬉しいコメントをありがとうございます。引き続きご愛読のほど、よろしくお願い致します。自分が何気なく使ってるメソッドやプロパティがどういった概念の上でなんの役割を成しているのかが具体例を通してよく理解できました、大変分かりやすい説明でした。コメントありがとうございます。引き続きご愛顧いただけますと幸いです。非常に分りやすかったです!今まで見た、オブジェクト指向の説明で一番わかりやすかった。お褒めのコメントをいただきありがとうございます。AsReaderと言うBarcode Readerのハード営業ですが、受託開発も受ける為、開発言語が理解出ない事があり、このsite は初心者への配慮があり、これからも利用させて頂きます。ありがとうございました。いつもご愛読いただきありがとうございます。様々な箇所で引数として(Human target)というものが使われており、いつもご愛読ありがとうございます。引数targetとは、人間クラスの変数(入れ物)です。上記のコードでは、勇者クラス・魔法使いクラス・僧侶クラス・ラスボスクラスは、全て人間クラスを継承したクラスとして定義されています。superはどこから出てきたのでしょうか?いつもご愛読いただきありがとうございます。Javaで親クラスの変数やメソッドに子クラスからアクセスしたいときに、superを使用するには、クラスの継承を先に行う必要があります。オブジェクト指向の必要性が分かり、勉強になりました。

.

Breakthrough 映画 日本公開, ARK ポケモン やり方, 3月 ディズニー 混雑, 皇帝ペンギン 映画 Wiki, Ark Karkinos Calc, Imitation Rain ITunes, 踊る大捜査線 映画 犯人, 秋葉原 お土産 外国人, 報告してくる 彼氏 心理, 神奈川 警報 速報, Netflix 星野源 セトリ, 岩手県立大学 看護学部 カリキュラム, A Couple More 意味, 地下鉄 天王寺駅 待ち合わせ 目印, チッチ ぬいぐるみ NHK, ちっぽけな愛の歌 ベース Tab, ドクター ドリトル2 吹き替え, 進撃の巨人 イザベル 何話, ピーター かっ しん ぐ, イラストで お金 を生み出す秘訣, 北越谷 カフェ バイト, 武蔵野市 天気 洗濯, 車 放置 故障, 結果として 英語 ビジネス, トランプ 英語 数字, 岡村 ゴリ ダンス 曲, 南 栗橋 から の 下り の時刻表 東武 線, 福岡市 江戸時代 古地図, 丸井ブン太 ライブ Dvd, コメントする 英語 Sns, グラブル ツイッター連携 ログイン, 守谷市 モコバス 料金, 虹色デイズ アニメ 1話, キュウレンジャー 熱愛 その後, アンプリ チュード カラー チャート, ハワイ オプショナルツアー おすすめ ブログ, 英語 形容詞 反対語 一覧, こちらこそ 今後とも よろしくお願いいたします, キューピー プロユースマヨネーズ 口コミ, ソファーベッド 収納付き 一人暮らし, そら いろ ま ふら ー アルバム, 結婚式余興ムービー 業者 値段, 新神戸 広島 新幹線時刻表, 復活 英語 カタカナ, ニベア 日焼け止め 評価, その 図書館 には 読む べき 本がたくさん あります か 英語, いいね 光源氏くん 5話 動画, 名城線 2000形 編成表, 安心 類語 ビジネス, 山陽本線 広島 両数, RADWIMPS 愛し 歌詞, 堺市 小学校 夏休み コロナ, 話し相手が いない 英語, 丹波篠山ヴィンテージ トイ ガーデン, 派遣会社 ランキング 岩手, 春が来た ドラマ ネタバレ, 掃除屋 K シーモア, ワンオク アンビションズ ツアー セトリ, 卒業 斉藤由貴 MP3, だいすき ゆずの子育て日記 全巻無料, 悪の教典 9巻 ネタバレ, 西野カナ アルバム Rar, 桝太一 Zip いない, 告白 成功率 上げる, ソ連 世界恐慌 影響を受けなかった, ウルトラマンギンガ 時 系列, エバンゲリオン 踊る大捜査線 音楽, 親 見 になって, Ff14 カララント パールホワイト, 資料 にまとめる 英語, もう一度 竹内まりや カバー, 友達の仲を 引き裂く 方法, Google Play アプリ内購入, PASMO ポイント還元 エントリー, アヒル ふれあい 東京, 奈良県 ボランティア 子ども, 贖罪 ティックトック 歌手, 山本 萩子 出演 番組, 照り焼きチキン リメイク チーズ, 野鳥 観察 の 心得, Mitchie M Wiki, 郵便 宛先 英語 縦書き, RADWIMPS Tazuna 楽譜, パンズ ラビリンス 映画, 38系統 バス 横浜駅, に なると 用法,