一番かんたんなJava入門

これからJavaを始めようという人の為の超入門サイトです。丁寧、簡単にこだわった解説なので初心者にぴったりです。

【Java】 オブジェクトって何?

time 2013/06/21

sponsored link

オブジェクト指向?

 プログラミングを勉強している人なら、オブジェクト指向って聞いたことありますよね?
 経験豊かなベテランさんでもオブジェクト指向というものの解釈は一筋縄ではいかないようなものらしいので、シロウトの僕には正直、オブジェクト指向のことを語る程の経験も知識もございません。が、オブジェクト指向の概念を語ることはできなくても、オブジェクトを作ることはできます。オブジェクト指向を理解する為にはオブジェクトというのはどういうもので、どうやって使うのか?をしっかり理解することが先決だと思います。とりあえず難しいことは考えずにオブジェクトを作ってみましょう。

オブジェクトを作る為のクラス

 「オブジェクト」というのは直訳すると「物」です。物理的な物体を表すこともあれば、そうでないこともあります。今回はHumanオブジェクトを作ってみましょう。Humanつまり人間です。(もっとプログラミングを意識したオブジェクトを例にする方がいいかも知れませんが、あくまでオブジェクトというものの仕組みを理解しやすいように、人間オブジェクトにします。)
 Humanオブジェクトを作る為にクラスを使います。今までもクラスを作ってきましたよね。クラスの中のmainメソッドの中に、if文やfor文を使っていろんなプログラムを書いていました。今までmainメソッドの中に何を書いていたかというと、これをこうして、あれをこうして・・という風に「手続き」を書いていました。オブジェクト作るには、手続きを書くmainメソッドを持つクラスとは別に、オブジェクトを作る為のクラスを書く必要があります。同じクラスという括りですが、まったく別物と思っていたらいいと思います。
 ではHumanオブジェクトを作るためのHumanクラスを書いていきます。eclipseを使ってやりますよー。

human1

↑こんな感じでプロジェクトを新規作成して、その中のsrcというフォルダの中にパッケージを新規作成して、そのパッケージの中にHumanクラスを新規作成します。プロジェクト名とパッケージ名は何でもいいので好きなようにどうぞ。
 オブジェクトを作るためのクラス(Humanクラス)にはmainメソッドは要りません。HumanクラスにはHumanオブジェクトがどういうものなのかを書いていきます。
 まずは、Humanオブジェクトに「名前」というパラメータを持たせましょう。

Human.java

public class Human{
	String name;
}

「我輩は人間である。名前だけはある。」ってなもんで、名前しかありません。しかし、さすがに名前だけではちょっと寂しいので、Humanオブジェクトは生年月日も設定できるようにしましょう。人間なら誰でも生年月日がありますもんね。

Human.java

public class Human{
	String name;
        int birthday;
}

 できました。名前と生年月日をパラメータに持つ人間オブジェクトです。って言ってもパラメータに値が入っていませんね。さっそく入れましょう。

Human.java

public class Human{
	String name = "ノブオ";
        int birthday = 19770101;
}

 はい。これでノブオという名前の1977年1月1日生まれの人間オブジェクトの完成です。・・ってそうじゃないんです!!オブジェクトを作るためにHumanクラスを書くんですが、それ自体がオブジェクトではないんです。クラスはあくまでオブジェクトの設計図でしかありません。HumanクラスはいろんなHumanオブジェクトを作り出す為のテンプレートみたいなものなんです。だから、パラメータは埋めたらダメです。オブジェクトを作る為のクラスはあくまでただの設計図・テンプレートなので、こんなパラメータを持っていますよ。っていう枠組みだけを書きます。なので、パラメータの値を書き込む前の形、

Human.java

public class Human{
	String name;
        int birthday;
}

これで設計図としては完成です。ではこの設計図を元に実際にオブジェクトを作ります。

オブジェクトを作る

 オブジェクトを作るには、オブジェクトの設計図となるクラス(Humanクラス)とは別に、mainメソッドを持つクラスが必要です。当たり前です。プログラムを実行するというのはmainメソッドを呼ぶところから始まります。いくらオブジェクトを作る為のクラスをたくさん書いても、それを使うための手続きを書き込むmainメソッドがなければ何も始まりません。なので、Humanクラスと同じパッケージ内にmainメソッドを持つHumanTestクラスを作りましょう。

human2

↑同じパッケージ内にHumanクラス(オブジェクトの設計図となるクラス)とHumanTestクラス(mainメソッドを持つクラス)をこんな風に作りましょう。

HumanTest.java

public class HumanTest{
	public static void main(String[] args){
		
	}
}

 このHumanTestクラスのmainメソッドの中で、先ほど書いたHumanオブジェクトの設計図であるHumanクラスを使って、Humanオブジェクトを作ります。いいですかー?よく見ていて下さいよー。

HumanTest.java

public class HumanTest{
	public static void main(String[] args){
		Human human = new Human();
	}
}

 はい出来ましたー。パチパチパチ・・。
 しかしこれ、初心者には「・・は?」となるところだと思います。やたら「human human」言われても意味分からん。って。大丈夫、ゆっくり解説します。非常に大事なところです。

クラス型変数

Human human = new Human();

 まず、理解しやすいように上記の1文を2つに分けます。

Human human;
human = new Human();

 この形、なんとなく見たことありますよね?そうです。変数の宣言と初期化です!宣言と初期化をつなげて書くと、一列で書けますよね?一列で書いた形が上のやつです。

Human human;

↑これで、Human型のhumanという名前の変数を宣言しています。

int num;
String name;
Human human;

 ↑これらは全く同じで、変数の宣言の形「変数型 変数名;」です。intやbooleanのような元々用意されている変数型を基本データ型変数と言うのに対して、クラスでその内容を定義して作った変数をクラス型変数と言います。整数型、文字列型の変数があるように、Human型の変数を自分で勝手に作ってしまったわけです。Human型の変数ってどんな変数かと言えば先ほど作った通り、名前と生年月日というパラメータを持っている変数(オブジェクト)です。「オブジェクトを作る」というのは「自分で定義したクラス型変数を作る」ということと同義と言えます。

Human human;

 ↑このように型名は大文字、変数名は小文字であることに注意!
 クラス型変数の型名はクラス名そのままです。クラス名の頭文字は大文字にしているので、型名も同じように頭文字は大文字です。変数名は、ただの名前なので、別に「human」じゃなくても「nobuo」とかでもプログラム上問題ないです。ただ、プログラムのお手本を見ていると、クラス型変数の変数名は型の名前(クラス名)を小文字にしたものを使っていることが多いです。(変数名の頭文字を小文字にするのはクラス型変数に限ったことではなく慣例的原則です。)
 では、クラス型変数の宣言に続いて、「初期化」の部分です。

human = new Human();

 オブジェクトを作る時は、new演算子を使います。

new クラス名();

の形でオブジェクトを作ります。
で、その作ったオブジェクトを変数humanに代入することで、変数humanをHumanオブジェクトとして扱えるようになるわけです。ただし、クラス型変数は参照型なのでオブジェクトそのものではなく・・、っていうややこしい話はまたの機会に。。
 とりあえず簡単ではございますが、これでオブジェクトは作れました。何せ「new クラス名( );」とするだけなので。しかしHumanオブジェクトを作ったはいいものの、実はまだこの人間オブジェクトには名前も生年月日も具体的には設定していません。このままではこのオブジェクトは、名前不明で生年月日も不明という全く身元不明な人間を表すオブジェクトになってしまっています。次回はこのHumanオブジェクトの名前と生年月日というパラメータを設定するにはどうすればいいかをやります。
 とりあえず、設計図となるクラスを書いて、そのクラスをnewしてオブジェクトを作るという基本的な部分をまずは抑えておきましょう。
 オブジェクトの説明はまだまだ続きがあります。仕組みもちょっと複雑なので全てを一度に理解するのは難しいです。なんとなくでいいので順を追って少しずつ理解していくのが一番の近道ですよ。

sponsored link

Androidアプリを作ろう

コメント

  • […] setUrl とかあんまりわからない ⇛ オブジェクトについて調べましょう。http://nobuo-create.net/java-beginner-17/ […]

    by インターンシップ1日目 | Hack €2015/05/29 13:22

  • 「クラス型変数の型名はクラス名そのままです。」

    というのは、きまり事項ですか?

    by たかひろ €2015/08/03 10:22

  • もちろんです。

    型名と変数名を混同されないように理解して下さい。

    Human human;
    Human human1;
    Human nobuo;
    ↑型名 ↑変数名

    by Nobuo@管理人 €2015/08/03 12:39

  • by インターンシップ1日目 | Hack €2015/05/29 13:22
    「クラス型変数の型名はクラス名そのままです。」

    というのは、きまり事項ですか?

    by たかひろ €2015/08/03 10:22

    by 匿名 €2015/08/03 13:41

  • by URLにリンクを付ける/サムネイルの表示/URLのドメインのみの表示(インターン3回目) | Hack €2015/11/17 15:37

down

コメントする



CAPTCHA


一番かんたんなJava入門

Androidアプリの作り方

忘備録

私の作ったAndroidアプリ

私の作ったWordPressテーマ

プロに教わるオンライン学習

管理人

Nobuo_CREATE

Nobuo_CREATE

WordPressテーマPrinciple、マテリアルを作ったり、Androidアプリを作ったり、Java入門サイトを作ったり、本を書いたりしています。どうぞよろしく。 [詳細]



sponsored link

オススメ書籍

[オススメpoint]

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

[オススメpoint]

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊!

只今、急拡大中

ゲームを作りたい人専門

個人フットサル予約サイト

ガチ専門

JavaからのRuby on Rails入門

JavaからのRuby on Rails入門