クラス(class)

Last-modified: 2020-05-23 (土) 16:32:21

オブジェクト指向について

  • オブジェクト指向プログラミングは、実際にある物体の状態、機能に着目したプログラム
  • クラスは「設計図」、インスタンスは「実体」

クラスの定義

class クラス名
{
 フィールド;
 メソッド;
 コンストラクタ;
    ・
    ・
    ・
}

メンバ(member)

  • クラスで定義する変数をフィールド(field)と言う。
  • クラスで定義する関数をメソッド(method)と呼ぶ。
  • これらクラス内に記述する(される)フィールド・メソッドはクラスのメンバと呼ぶ。

クラス・構造体に含まれるメンバーの種類

フィールド・メソッド以外にも以下のものはメンバー

  • フィールド
  • 定数
  • プロパティ
  • メソッド
  • イベント
  • 演算子
  • インデクサー
  • コンストラクタ
  • ファイナライザ
  • 入れ子の型

フィールド(field)

  • クラスのスコープで宣言される変数

メソッド(method)

  • クラスが実行できる動作(処理)。
  • メソッドは値(パラメータ)を受け取り、メソッド内部で処理し、値を出力できる。

コンストラクタ(Constructor)

  • オブジェクト(インスタンス)を初めて作成する時に呼び出されるメソッド
  • コンストラクタは通常、オブジェクトのデータを初期化するために使用する
  • コンストラクタの名称はクラス名と同じでなければならない。
  • コンストラクタは以下のように定義する。
public class Person  //Personクラス
{
 public int    Age;  //フィールド
 public string Name; //フィールド
 public Person()   //コンストラクタ
 {
  Age  = 30;
  Name = "HAMADA";
 }
}

プロパティ(property)

  • プロパティ(property)は、クラスのprivateなフィールド(要は変数)の値の読み、書き、計算を行うメンバー
  • プロパティを使えば、クラスの外部からフィールドを隠したまま、値の取得と設定ができる。
  • プロパティには、フィールドを書き込むsetアクセサと読み込むgetアクセサがある。
アクセス指定子 プロパティ名{
 set { 値を設定する処理; }
 get { 値を返す処理;     }
}

public class Person   //Personクラス
{
 private int    age;  //フィールド
 private string name; //フィールド
 public Person()    //コンストラクタ
 {
  初期化処理;
 }
 public int Age       //プロパティ
 set {                //setアクセサ
     if (value > 0)
        age = value;
     }
 get { age = value;  }//getアクセサ
}
  • 実際に使うときは以下のように使用する。
Person person = new Person();
person.Age    = 30;
System.Console.WriteLine(person.Age.ToString());
  • プロパティには必ずしもsetとget両方をつける必要はなく、以下のように種類を設定できる。
    set+get読み取り・書き込み
    getのみ読み取り専用
    setのみ書き込み専用

クラスを利用する

  • 実際にクラスを使用するには、変数を定義し、その変数にインスタンスを代入する
クラス名 変数名;
変数名=new クラス名();

もしくは

クラス名 変数名 = new クラス名();

アクセス制限

  • クラスを使用する際は不必要に外部からアクセスできないように、アクセス権限を考慮する必要がある。
  • アクセス権限を考慮すると、不意な不具合等から保護できる。
  • これを「カプセル化(Encapsulation)」という。
  • アクセス修飾子をつける場合はメンバーの宣言・定義の先頭につける。
private int   Age;
public string Name;
アクセシビリティアクセス可能な範囲
publicどこからでも
protectedクラス内部と派生クラスの内部からのみ
privateクラス内からのみ

静的メンバ(static member)

  • クラスからインスタンスを作成すると、インスタンスに対してメンバーが作成される
  • インスタンスでなくクラスに実態をもつメンバーを作ることができる。
  • この、クラスがもつメンバーを静的メンバーと言う。
  • クラスのメソッド、フィールドにstaticをつけると、静的メンバになる。
  • 静的メンバーはクラスごとに1つの実態をもち、すべてのインスタンスで共有される。

静的メンバーの使い方

クラスのフィールド・メソッドを定義するときにstaticキーワードをつける。

static 型名 フィールド名

継承・派生(inheritance/derivation)

  • あるクラス(基本クラス)を継承した、派生クラスを作ることができる。これを継承という。
  • クラスを拡張(extend)するともいう。
  • もとになる既存のクラスを基本(基底)クラス(base class)、新しいクラスを派生クラス(derived class)という。
  • 例)「パソコン」クラスを継承した、「ノートパソコン」クラス
  • 派生クラスのオブジェクトは基本クラスのオブジェクトとしても使える。
  • 基本クラスのメンバにprotectedをつけると派生クラスからのみアクセスできる。

継承の使い方

構文

class 派生クラス:基本クラス

使用例

public class Japanese:Person
{
}

※Personクラスを継承した日本人クラス

未整理項目

protected

  • 基本クラスでprivateが指定されているメンバに、派生クラスからアクセスすることができない。
  • このとき、基本クラスのメンバにprivateではなくprotectedを指定することで基本クラスと派生クラスからのみアクセスできるようになる

virtual

  • 派生クラスからoverrideできるようになる

抽象クラス(abstract class)

  • オブジェクトを作成できないようにしたクラスを抽象クラスという

インターフェイス(interface)

  • すべてのメソッドの内容を定義できないようにしたものをインターフェイスと言う。

オーバーライド(override)

静的クラス

  • 静的クラスはインスタンス化できない(newできない)
  • 静的クラスのメンバにアクセスするにはクラス名自体を使用する