半人前プログラマーの技術談議

開発した物と,C#を入門者向けに解説した記事を書いています!

【C# オブジェクト指向】クラス インスタンス part2-1

calendar

reload

こんにちは!シロウです!

今回はオブジェクト指向について解説します.

はじめに

何故,オブジェクト指向を学ぶ必要があるのか.

一言で言えば,プログラムの可読性,拡張性,保守性を上げる為に学ぶ必要があります.

オブジェクト指向とは,あるデータの情報(データ)や機能(処理)を,クラスというプログラムの単位にまとめ,そのクラス(のインスタンス)を組み合わせて大きなプログラムを作っていくという考え方.

他の人のプログラムを見た時に,プログラムが読みやすければ,解読や修正も比較的短時間でできる.

何か機能を追加したい時に,部分的に実装して組み込めば簡単にできる.

(モジュールのように使うことができる.)

バグなどの不具合が見つかった時に,クラス単位でバグを探す事ができるので,全体から探すよりも短時間で修正できる.

(原因も見つかりやすい.)

などなど,メリットしかないです!

では次の項から本題に入ります.

 

クラス

先ほども,ちらっと説明に出てきましたが,もう一度整理します.

クラスとは,

ある情報(データ)や機能(処理)を持ったプログラムのかたまり

です.

※ある情報とは,データ型(int型,string型など)で宣言されたデータの事です.

また,

ある情報をフィールド,

機能をメソッド

と言います.(これらをまとめてメンバと呼ぶこともある.)

とりあえずは,

変数(定数)とメソッドを持ったかたまり ⇒ クラス

と思って貰ってもいいでしょう.

 

クラスの宣言

C#でクラスを記述するときには,次のように書きます.

このように,クラスをプログラムコードに記述することを,

クラスを定義する

または

クラスを宣言する

と言います.

例えば,このように記述します.

 

インスタンス

クラスについては,解説しましたが,

クラスを宣言するだけでは,使うことができません.

実は,クラスと言うのは設計図みたいなもので,中身が存在しません.

中身を作る為に,インスタンスを生成するという操作が必要になります.

生成には,newというキーワードを使います.

例えば,このように記述します.

生成するイメージを図にするとこんな感じです.

f:id:pokoshirou:20181009204606p:plain

実際には,このように使う事が多いです.

new クラス名() で生成したクラスのインスタンスを変数に代入しています.

この変数はクラス名の型になるので,代入する事ができます.

例えば,このように記述します.

Car型のcarにnew Car()で生成したCarクラスのインスタンスが代入されています.

このように,クラスはデータ型(int型,string型など)のように扱えるということです.

ちょっとややこしいのでまとめると,

① Car carでCar型の変数 car を宣言する.

② new Car(); でCarクラスのインスタンスを生成する.

③ 変数 car はCar型の変数だから,②で生成したインスタンスをそのまま代入する事ができる.

また,このように記述しても同じになります.

先ほど,クラスは設計図みたいなものと言いました.

何故ならクラスは,何度でも使う事ができるからです

イメージとしてはこんな感じです.

f:id:pokoshirou:20181009210235p:plain

コードで記述すると次のようになります.

このように,クラスは同じ構造の物を作りたい時に凄く便利です.

インスタンス変数

最後にインスタンス変数を解説して,今回は終わろうと思います.

インスタンス変数は,生成したインスタンスが持つ変数(フィールド)の事を言います.

インスタンスを生成しただけでは,中の情報まで操作をしていないので,

フィールドの情報は空のままです.

インスタンスを生成した後は,インスタンス変数に値を代入する事ができるようになります.

代入するには,次のように記述します.

例えば,このように記述します.

これで生成したインスタンスに情報を与える事ができました!

最後にソースコードを貼って終わろうと思います

 

ソースコード

 

Carクラスには,publicという修飾子が付いていますが,後々解説するのでとりあえず今は付けて置いてください.

 

実行結果

f:id:pokoshirou:20181009213309p:plain

 

 

今回はここまで!

次回は,コンストラクタ,static,インスタンスの配列について解説しようと思います!