クラスの定義や用語、設計の基本についてまとめました。
言語はC#で記載してます。
クラスとは
変数とサブルーチンをひとまとめにして独立性の高い部品を作る仕組み
平澤 章(2014).オブジェクト指向でなぜつくるのか 第2版 日経BP社
ある特定のモノの状態や機能に着目してまとめたもの
高橋 麻奈(2016).やさしいC# 第2版 SBクリエイティブ
データとそのデータに関する処理をまとめて定義したもの
髙江 賢(2018).基礎からしっかり学ぶC#の教科書 日経BP社
クラスは、プログラムを部品(役割やモノなど)に分け、その部品に必要な変数(状態)や処理(機能)をまとめることで、関連性の強い変数や処理を整理することができます。
また、クラス内の変数やメソッドは外部からの使用を制限する(隠す)ことができます。不要な部分を隠す(privateにする)ことで、グローバル変数の使用が減り、保守性が向上します。
複雑な処理を内部に隠して、外部から公開された手段のみでアクセスできるようにすることで、安全性と利便性を向上させる考え方を「カプセル化」と言います。
クラスの構文と用語解説
クラスの定義
classは、ブロック({}で囲われた範囲)内でメンバー(変数や処理)を定義します。
class クラス名
{
//メンバーを記述
}
クラス定義の例
Posterクラスを定義してみます。
//class クラス名
class Poster
{
//フィールド
// アクセス修飾子 型名 変数名;
Image img; //アクセス修飾子省略時はprivateが設定される
int height;
int width;
//コンストラクタ
public Poster()
{
img = Image.FromFile(@"c:\img\no_image.png")
height = 0;
width = 0;
}
//メソッド
//アクセス修飾子 戻り値の型 メソッド名(引数1,引数2…)
public void show
{
//処理を記述
}
//外部からのアクセス用にメソッドを記述
public int GetHeight()
{
return height;
}
public void SetHeight(int h)
{
//代入前に値のチェック処理などを記述
height = h;
}
//~~~省略~~~
}
用語解説
メンバー
メンバとも。英語表記は「member」。
クラスを構成する要素のこと。
大きくデータ(定数、フィールド)と処理(メソッドやコンストラクタなど)に分けられる(どちらか片方の場合もあり)。
前者は「データメンバー」、後者は「関数メンバー」と呼ばれる。
アクセス修飾子
メンバーの外部アクセスを設定するもの。下記5種類。
- private:クラスの内部からのみアクセス可能。
- public:外部からアクセス可能。
- protected:クラス内部と、クラスを継承した派生クラスからのみアクセス可能。
- internal:同じアセンブリ(.NET Frameworkアプリケーションの基本ビルド単位)のみアクセス可能。
- protected internal:同じアセンブリまたは派生クラスからアクセス可能。
【補足】
- C#でアクセス修飾子を省略した場合は、自動的にprivateとなる。
- クラスの継承や派生クラスは別記事にて。
フィールド
「メンバー変数」とも 。クラスで直接宣言される変数のこと。
クラスが使用する変数を宣言する。
不正な値の代入を防ぐため、privateで外部からの直接的なアクセスを防ぐ場合が一般的。
外部からのアクセスが必要な場合は、getメソッド(値の取得)やsetメソッド(値の設定)を用意し、その内部にバリデーション(値のチェック処理)を設ける。
【補足】
- アクセサ(accessor)を利用したプロパティ(property)を定義することで、より簡易な書き方ができます。詳しくは別記事にて。
コンストラクタ
オブジェクト作成時に初期化を行う処理がある場合に記述。
new(インスタンス化)した際に実行される処理。
クラス名と同じ名前で定義。
通常はアクセス修飾子はpublicを指定(外部からインスタンス生成するため)。
【補足】
- クラス全体の関連付けである静的メンバ(static ~)との関連は別記事にて。
- new(インスタンス化)についても別記事で。
メソッド
処理を順番に記述したメンバー。