Java オブジェクト指向


Java-オブジェクト指向-

Javaのメイン、オブジェクト指向に突入。 Obj指向はどんなかんぎか考えてみると、

やまださんに収支計算させて、必要に応じて結果きいて たなかさんにタイピングさせて やましたさんに広告を考えさせて

とか、あらゆるクラスに作業を分担させて、相互に参照していくかんぎかのう。

クラス

クラスというのは、上の例でいくと、 やまださんというのは、収支計算するやつ たなかさんはキーパンチャー やましたさんは広告キャッチフレーズ考える

とかそういう属性をかいてるもんみたいなかんぎらしい。 それをインスタンス化というのをしたら、オブジェクトができる。 収支計算でも、インスタンス化したあとなら、A社B社なんでもいいし、 広告でも自動車用とかおかしとかいろいろかわる。

でもやってることはおなぎというかんぎかのう。

つまりJavaプログラミングの神髄は、 プログラムの中でどういうオブジェクトが必要か考えて、 その共通の性質ごとにクラスをつくるということじゃのう。

たとえば、 エンギンオブジェクトは、ガソリンを爆発させてパワーにかえるという性質にして、 シャフトオブジェクトは、パワーを回転にするという性質にして、 それを組み合わせてできるもんは車になったり、船のプロペラになったり飛行機になるとかそんなかんぎ?

クラスの定義

定義しないとそりゃ性質もくそもできんわな。

とりあえず、自動車クラスでは、 属性 エンギン 速度 操作 スピードアプ ダウン

としよう。

フィールド変数

クラスの属性を表す変数。intとかdoubleでかく。 特に今までのあれとかわらん。 a+b計算するクラスなら、int a;,int b;みたいにしていけばいいようだ。

メソッド

メソッドがなにかは振り返るとして、まあつまり操作をかくときにつかうな。


クラス

属性はフィールド変数、操作はメソッドでかく。併せてクラスのメンバというらしい。

ちなみにこうかく

	class クラス名 {
		フィールド変数     メソッド
	}

"class"が定義するための命令。

自動車クラスを書くとだね

	public class Car { //PublicなCarクラスです
		int speed;//speedという整数の変数を宣言
	
		int speedUp() {//speedUpというメソッドを定義
		speed = speed + 10;//speedはspeed+10です
		return speed;//上のspeedを戻らせる
		}
		
		int speedDown() {//speedDownメソッド定義
		speed = speed - 10;//speedはspeed-10ですよ
			if ( speed < 0){//0より小さいときは
			speed = 0;//speedは0です。
			}
		
		return speed;//speedに戻らせる
		
		}
	}

まあつまり、まずcarクラスですよーといい、 speedというフィールド変数きめて、 speed Up Downのメソッドつくってチョン ってことだな。

オブジェクトの作成

自動車クラスからオブジェクトをつくる、すなわちインスタンス化はこうかく

	new クラス名();

このカッコは前々から気になってるがなんだろうな。

作る数だけ書くこと。

つまり、インスタンス化することにより、わざわざ何個も命令かかなくても、これしたいならこのクラスみたいなことになるわけだな。

参照変数

ちなみにクラスつくると、そのときにデータ型がつくられるらしい。 それは参照型とよばれて、その変数は参照変数というそうだ。

	Car carObj = new Car();

とかくと、carObjがポータルみたいになって、インスタンス化されたクラスにいくというかんぎらしい。

オブジェクトのアクセス

ちなみに、オブジェクトさわるには

	(new Car()).speed = 0;

で、Carオブジェクトのspeedに0がはいるが、普通は参照変数を通じてやるらしい。

	Car carObj = new Car();
		carObj.speed = 0;

つまり、参照変数carObjつくって、 carObj.speed に 0いれるぜ

というかんぎ。

speedupメソッドならcarObj.speedup(); とかにする。

クラスの定義その2

車のやつでいくと、とりあえず車というのは速度を上げたり下げたりするものというかんぎである。で、エンギンをどう定義するか。

とりあえずエンギンは、排気量という属性があって、それから動力を取り出すというかんぎにするとする。

とりあえず排気量という変数と、それを1/10してパワーを取り出すメソッドをつくる。

%t;public class Engine {

		 int displacement =1500;
			int getPower(){
				return displacement / 10;
			}
		}

こんなかんぎだろう。

そして、Carにエンギンの定義を増やすには、フィールド変数を参照変数をいれてやればいいそうだ。

	Engine engine;

こんんかんぎ。


コンストラクタ

クラスで定義するもんでは、コンストラクタというものがある。 戻り値を持たないクラス名と同じ名前のメソッドで、クラスからオブジェクトつくるときに読み出される(そりゃそうだ)

なお、今まで書いてないけど動いてるのは、定義してない時だけ勝手になんもしないコンストラクタが作られていたからだそうで。ちなみに引数があるコンストラクタを定義したら、それはもちろん作られません。何か知らんが特に何もなくても絶対作った方が良いらしい。

ちなみに、Car.classに引数がないコンストラクタをつくるとこうなる

	Car() {
		speed = 0;
		engine = new Engine();
	}

これで、スピードを0と定義して、engineというオブジェクトをつくります。

ちなみにコンストラクタに値を与えておくこともできる。

	Car(int speed) {
		this.speed = speed;
		engine = new Engine();
	}

thisって何なんだとか考えてはいけないようだ。注釈なさすぎ。 で、(int speed)に入れる数値は、オブジェクト作るときに書くらしい。

	 new classname (引数) ;

となる。Carspeedにつねに10入れる場合は

	 Car carObj = new Car(100);

とかくそうで。よくわかんえ。