こんにちは。Milkです。
前回は、プログラムの基本的な仕組み。「変数」と「代入」についてお話しました。
さて今回は、このプログラミング講座の1つの山場と言って良い内容に到達します。
それは、「クラス」というものです。
このクラスとは、オブジェクト指向型言語の根幹をなすもので、これが組み込まれている、組み込まれていないによって、過去の手続き型言語と区別されます。
まぁ・・・それほど恐れなくて大丈夫です。最初は、「うーん。なんとなく分かった。」という程度で大丈夫ですから。
それでは、そのクラスについて一緒に見てみることにしましょう。
前回のおさらい
一応、前回のおさらいを行います。
- 値を記憶させる場所を変数と言う。
- 変数には型と呼ばれる種類がある。
- 変数に値を入れることを代入と言う。
- 代入は「=」によって表される。(右辺の計算結果が左辺の変数に代入される)
//int型のsuji_mae、suji_ushiro、keisan_kekka変数を宣言。0の値で初期化 int suji_mae = 0; int suji_ushiro = 0; int keisan_kekka = 0; //suji_maeに10を代入 suji_mae = 10; //suji_ushiro変数に15を代入 suji_ushiro = 15; //keisan_kekka変数に計算結果を代入 keisan_kekka = suji_mae + suji_ushiro;
クラスの基礎
それでは、今回の本題に入りましょう。
いつものように、SimpleCalcのForm1.csのプログラムソースを開いて下さい。
これを以前、意味のあるグルーピングを行ったように、囲ってみたいと思います。
グルーピング
Form1.cs
少し分かり難いかも知れませんが、Form1.csの全体を色で分けて、意味のあるグルーピングを行いました。
- インポート文
- ネームスペース
- Form1クラス
- Calcクラス
に分かれていることが見て取れます。また、各々のクラスの中には、メソッドという単位のグループが複数含まれていることも分かると思います。
それでは、Calcクラスにスポットを当てて、クラスの仕組みについて理解していくことにしましょう。
クラスの構成
クラスは基本的に以下の項目によって構成されます。
- 共通変数
- コンストラクター
- メソッド
共通変数
共通変数とは、クラス全体で扱うことが出来る変数のことです。
画像の中では、一番上に「変数宣言」と囲んである部分になります。(suji1、suji2 です。)
以前、グルーピングは { } (中括弧)によってなされていると言いました。
共通変数とは、クラスの一番最初の { } の中に書かれていることで、クラス全体で利用が出来ます。
これに比べ、上から二番目に書いている「変数宣言」は、Executeメソッドの { } の中に書かれているので、Executeメソッドより内側に入る { } の中でしか利用できません。
このようにクラス全体で利用可能な変数(代入が可能)を共通変数と呼びます。
逆に、その時に利用するために宣言した変数(例の場合、Executeメソッド内の変数)のことを、一時変数と呼んだりします。この変数は、共通変数とは異なり、利用できる範囲が限られているためです。
コンストラクター
クラスと同じ名前が付いたメソッドのことをコンストラクターと言います。
少し特殊なメソッドになります。
メソッドとは、ある計算をさせる処理のひとまとまりのことを指しますが、このコンストラクターは、クラスをインスタンス生成する際に最初に実行されるメソッドです。
さて、難しい名前が出てきましたね。
インスタンス生成
クラスと言うのは、鋳型の様なものだと思って下さい。実は、プログラムでクラスについて書くと、それは鋳型の形について書いているのと同じことになるのです。
どういうことか?
図にすると、この様なイメージになります。
Calcクラスは、共通変数、コンストラクター、そしてメソッドを持っています。
これを鋳型にして、利用することで、全く同じ構造のモノを生成して使います。
使い方は以下の様になります。
- 【利用するクラス】【名前】= new 【利用するクラス】();
//デフォルトコンストラクターを利用して、インスタンス生成する場合 Calc CalcA = new Calc(); //コンストラクターを利用して、インスタンス生成する場合 Calc CalcB = new Calc(a, b);
Form1.csの中で、「new」と書かれている箇所があります。実は、Calcクラスを鋳型として、実際にインスタンス生成を行っている箇所なのです。
この仕組みを利用すれば、毎度同じクラスの形を一からプログラムで書く必要がありません。
仮に、Calcクラスと同じ構造のクラスを100個も使わないといけない!となると、100回もCalcクラスの構造を全部書かなければなりません。
このように、鋳型を作って、それと同じ形のモノを生成して利用することをインスタンス生成と言い、この再利用出来る仕組みを持っていることが、オブジェクト指向型言語の一番の特徴になります。
さて、コンストラクターに話を戻しましょう。
コンストラクターとは、インスタンス生成を行う際に自動で実行されるメソッドです。インスタンス生成とは、メモリの中に実際に必要な場所を確保する作業です。そして、その時に前もって処理を行わせたい時があります。
例えば、共通変数に値を既に設定しておきたいなどです。この場合には、コンストラクターに共通変数へ値を代入するプログラムを書いておけば、インスタンス生成をする際に自動で実行がされます。
また、何か値を渡して、それを設定したい場合は、
- 【利用するクラス】【名前】= new 【クラス名】(渡したい値);
として( ) の中に渡したい変数や値を書きます。
この部分は実際に使用するときに解説していきましょう。
メソッド
さて、この部分はもうあまり解説は必要ありませんね。
処理を行いたいプログラムをひとまとめにしたかたまりに名前を付けて、メソッドと呼んでいます。
このメソッドは、クラス内に幾つも持つことが出来ます。また、パブリック又はプライベートなどの設定を行うことで、このメソッドを他人から利用可能か、あるいは利用出来ないかを設定することも出来ます。
この点も、実際にクラスを利用する時に解説を行いましょう。
まとめ
それでは、最後にまとめを行います。
今回は、クラスの基礎について解説を行いました。
クラスは大まかに以下の構成になっています。
- 共通変数
- コンストラクター
- メソッド
変数は宣言した場所と、それより内部の{ }の中で利用して代入が出来ます。
また、クラスとは鋳型であり、この鋳型を使ってインスタンス生成を行うことで、同じ構造のコピーを作成できます。
- 【利用するクラス】【名前】= new 【利用するクラス】();
また、インスタンス生成を行う際に、自動的に実行されるメソッドをコンストラクターと言います。
この講座では、これらが理解できれば満点です。
では、今回はここまで!!
質問や、ここをもっと詳しく!という場合は、twitterあるいはコメントで気軽にご連絡下さい。
それでは、楽しいプログラミングライフを!!
adios!!
※途中の画像で、CalcがClacと表記されている箇所があります。申し訳ありません。Calcに置き換えて読んでいただけば幸いです。