|
〜クラス編〜 内部構造 |
|
いよいよ、Javaの内部構造へと入っていくです〜。Javaの内部構造というのは、オブ ジェクト指向と、すごく密接な関係になっているです。まずJavaの内部構造をやる前に オブジェクト指向という考え方に触れるです〜 オブジェクト指向とは? あまり難しくは触れないです。オブジェクト指向というのは、身近な物をそのまま プログラムにあらわすような考え方で、データと処理を一体化できる考えをもって いるです〜。例えば、身近な物(者)人間を例にしてあらわすと人間には、身長、体重 その他いろいろなデータがあるですね!これらののデータのことをフィールドと言 うです。属性とも言うです〜。そして食べる、走る、歩く、寝る、考える、プログラミ ングをするといった処理というものをするですね!こういう考え方をデータと処理を一 体化したものと呼ぶです〜。ちなみに今まではどうだったかと言うですと・・・データ はデータで、処理は処理と言った風な考え方だったです。つまり分けて考えていたので す。データと処理を一体化することによってプログラムが分かりやすくなるのです〜。 そのデータと処理を一体化することをカプセル化と呼んでいるですね!そしてそれがで きる言語の中のひとつがJavaなのです〜!さらにオブジェクト指向にはすごい機能があ るのです〜。それについては、ここから先でやっていくようなことです。 それでは、今言ったことを踏まえてやって行きたいと思うです〜 クラスの内部構造 クラスというのはclassのことです。以前Javaには、かならず1つ以上のクラスが存在 するって言ったと思うです。(言っていなかったら、今知ってくださいです。良い訳で すね・・・)そして今回から内部構造を知るためにもう1つ別なクラスを作って行きた いと思ってるです。 クラスの内部は大まかには次のようにできてるです。 class クラスの名前{ データ1; データ2; : 処理1(){} 処理2(){} : } データというのは、フィールドと呼ばれている物で簡単に言うと変数ですね! 処理1というのは、振る舞いと呼ばれる物でメソッドのことです〜 ふだん使っていたいろいろなクラスもこんな感じで作られているです。 それでは実際にサンプルプログラムを作ってみたいと思うです。
このプログラムにはさっき説明した通りに、2つのクラスから構成されているですね 2つのクラスのうち、main()メソッドがあるRei10_1クラスから見て行きたいと思うです 3行目に突如登場するKeisan k = new Keisan();この1行。この書き方ってどこかで見 たことないですかね?きっと見たことがあると思うです〜。それは入力のときにやった 書き方と一緒なのです〜。具体的には、Keisanクラスのkという名前のオブジェクトを 作っているのです〜。入力のときには、ここで説明が終わってしまったはずです。しか し今回は、まだまだ進むですよ〜。このオブジェクトというのはいったい何かと言うで すと、それはクラスで作られた部分を実体化した物です。Keisanクラスで書かれている 内容をメモリに取り組むということを行っているです。Keisanクラスは、確かに書かれ ているですが、それを実際に使うにはメモリの中に入れてあげないといけないです〜 メモリというのは、パソコンの中にある物でプログラムはみんなメモリの中で処理され ているですね!もっと分かりやすく言うですと、クラスの中に書かれている物は設計書 のような物で実際にはまだ設計されているだけで事物はできていないのです。 そしてその実物を作るのがnew演算子なのです。オブジェクトを作る演算子です〜 これによって実物ができあがるのです。さっき言った実体化というのはこのことです。 実体化した物をオブジェクト(インスタンス)と呼んでるです。 5、6行目などに出てくるk.aなどはいったい何かと言うですとクラスの中で宣言され たフィールドにアクセスしているです。オブジェクト名.変数名でアクセスできる です。オブジェクト名.が付いているだけで普段使っている変数と違いはないです〜 普段使っている変数のことをローカル変数と言うです。そして今回でてきたこの変数の ことをインスタンス変数というです。オブジェクト(インスタンス)を作ることによっ て使用できる変数だからインスタンス変数と呼ぶですね! 11行目などに出てくるk.add()などは、入力のときに説明した通り、ここで言う Keisanクラスのadd()メソッドにアクセスしているです。このadd()メソッドの場合だと 足し算を行ってくれているですね!他にもKeisanクラスには引き算、掛け算、割り算な どをやってくれるメソッドを作ったはずです。それぞれのメソッドにアクセスすると ちゃんと処理をしてくれると思うです。オブジェクト名.メソッド名でアクセスできる ですね!このメソッド名の呼び方も変数のときと一緒でインスタンスメソッドと呼ぶ です。 次にこれらがアクセスしていた新しく作ったKeisanクラスを見ていくです〜 クラスの内部を大まかに説明したときと一緒ですね!最初にフィールド(変数)を宣言 して次に処理(メソッド)を宣言しているですね!実は先にフィールドを書かなくては いけないという決まりはないです〜。ただこっちの方が分かりやすいと思うのでこう書 いているです。今回のKeisanクラスは計算が土台となっているので、足し算や掛け算な どのメソッドを入れているです。他にも自分で追加することもできるですよ〜例えば 余りを求めたいメソッドを追加したいときはKeisanクラスの中で余りを求めたい メソッドに名前をつけて(ここではmod)にしてvoid mod(){ ans = a % b;}などと 書いてあげればいいです〜。3行で書くところを1行で書いてしまったですが、 void mod(){ ans = a % b;}のように処理が1つだったらこういう風に書くこともできる です。処理が2行でも3行でも書くことはできるですが、見づらくなるのでやめたほうが いいと思うです。具体的には↓のような感じです void sub(){ans = a % b; a=10; b=100; System.out.println("分かりづらいです");} これは、main()メソッドのときでも同じことは言えるです。だってmain()もメソッド だからですね! 今回出てきたけれどまだやっていないvoidについては、次回に触れるです。 今回のポイント @ クラスの宣言の仕方はclass クラス名 A クラスの中にはフィールド(属性)とメソッド(処理)があるです。 B クラスは実体化(オブジェクトを作ってあげてはじめて利用できるですね!) 書式:クラス名 オブジェクト名 = new クラス名(); または次のように書くこともできるです。 書式:クラス名 オブジェクト名; オブジェクト名 = new クラス名(); C フィールドやメソッドにアクセスするには.(ピリオド)を使うです。 書式:オブジェクト名.フィールド名(メソッド名); D クラスの中で宣言されている変数やメソッドをそれぞれ インスタンス変数、インスタンスメソッドと呼ぶです。 またメソッド内で宣言されている変数をローカル変数と呼ぶです。 TOPに戻る Java講座に戻る |