ハルの読書と勉強録

読書の記録や勉強の覚書です。

クラスについて~定義と用語~

クラスの定義や用語、設計の基本についてまとめました。

言語は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(インスタンス化)についても別記事で。

メソッド

処理を順番に記述したメンバー。

参考書籍

関連記事