# 共通ドキュメント

## クラスとインスタンス

### クラスとは

#### wikipediaによる定義

クラスベースのオブジェクト指向においてオブジェクトの設計図にあたるもの。抽象データ型の一つ。

#### 問題解決のための定義

データ型とプログラムを一体化したもので、同一型のデータを複数作成でき、個々のデータに対してプログラムを実行できるもの

### インスタンスとは

クラスをもとに生成されたデータの実体

### 特徴

- インスタンスもプログラムなのでデータを入力でき、入力に対する処理ができ、結果を取り出せる
- クラスはデータ型なので、インスタンス自体が他のプログラムの入力になり、処理対象になり、結果になる
- データの組み合わせを表現できる
- データの組み合わせごとにインスタンスを生成できる

### メソッド

処理をあらわす

#### 特殊なメソッド

##### コンストラクタ

新しいインスタンスを生成するメソッド。インスタンスの中身を初期化するメソッドではない

    HogeClass hoge; //インスタンスの宣言
    hoge = new HogeClass(); //新しいインスタンスを生成してhogeに割り当てる。hogeの内容を初期化するのではない。

### フィールドとプロパティ

データをあらわす

### クラスの外部仕様

他のプログラムがクラスのインスタンスに対して何が出来るかを規定する。

クラスが自力で知る事の出来ないデータは他のプログラムから受け取れなければならない

#### 例 - 給与計算システムの労働者クラス

- (メソッド)労働者の労働時間合計計算
- (メソッド)労働者の1ヶ月の給与計算
- (データ)労働者識別子

### クラスの内部仕様

外部の要求に応えるための手順、データを規定する。

他のプログラムが使えるためにはそのプログラムが要求するデータを持たなくてはならない(インスタンスが知らないデータは渡しようがない)

クラスを使用するすべてのプログラムの要求に答えられれば良い

#### 例 - 給与計算システムの労働者クラス

- (メソッド)指定労働者の労働時間データ取得
- (メソッド)時給データ取得
- (データ)労働時間データ
- (データ)時給データ
- 休日の時給が別でなければ休日情報は不要

### クラスのデザイン

1. 外部の要求に基づきクラスの外部仕様を決定する。
2. 外部仕様を満たすように内部仕様を決定する。

#### 注

- 業務クラスの仕様は業務仕様そのものである。(業務仕様が存在するのに「どのようなクラスが出来るのかわからない」状況はありえない)

### ポイント

- 他のプログラムがクラスの内部仕様を知る必要はない
- クラスが他のプログラムの仕様を知る必要はない
- 内部仕様の変更が他のプログラムに影響を与えてはならない