クラス |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
そして、オブジェクトは、
捉え方によって様々な設計が出来る。
例えば、「時計」。
出来合いの部品を集めて組み立てる
だけなら、1つの設計図で十分かもしれない。
そんな時は、
「時計」を1つの「物(システム)」として
捉えて、1つのクラスで設計すればいい。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
自前で時計の部品も作って組み立てるなら、
部品ごとに細かく設計図を分けた方が
いいかもしれない。
そんな時は、「時計」を複数の「物(部品)」の
集合体の「物(システム)」として捉えて、
複数のクラスで設計すればいい。
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
クラスは物を作る単位
「時計」をいろいろな単位に分けて考える
単位 |
クラス |
種類 |
時計 |
目的 |
時間を計る |
部品 |
・時計組立(全体設計)
・風防
・ムーブメント
・フレーム |
機能 |
・時間表示
・アラーム
・ライト |
・・・ |
・・・ |
同じ物でもいろいろな捉え方、分け方ができる
作る物の目的や種類、機能など
必要に応じてクラスを分けて設計する |
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
つまり、
クラスは見方を変えると「物」を作る単位とも言える。
物の「種類」や「目的」、「部品」や「機能」などの単位で
クラスを分けて設計する。
そうすることで、オブジェクトごとに役割を分担したり、
他に影響を与えずに交換や追加・変更をしやすくなる。
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
クラス設計
設計には、利点と欠点、長所と短所を伴う。
作る物に応じて、いろいろ考えてクラスを設計
していく必要がある。
そして、これはプログラムの場合も同じ。
これからは、プログラムを「物」として捉えて、
クラスを使って設計していく。
これからのプログラム設計の中心になる。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
クラスの構成の概要
主な構成はフィールドとメソッド。
これらのクラスを構成する項目を
クラスメンバと言う。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
クラスを作る時の決まり
基本的に、1つのクラスで
1種類のオブジェクトの設計を行う。
プログラムでは、
通常、1つのクラスで1つのファイルを使う。
1つの設計図で1種類の物を作るイメージ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
クラスもフィールドもメソッドも数の制限は無い。
(今回は説明上、フィールドとメソッドは基本3つにした。)
プログラムの場合はメモリ容量とか環境によって制限される。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
別項目になっています。こちらからご覧下さい。
|
|
別項目になっています。こちらからご覧下さい。
|
|
 |
|
 |
|
クラスの概要 |
|
項目 |
内容 |
3、クラスの使い方の基本 |
1、オブジェクトの内容を考える |
2、クラスを設計する |
3、インスタンスを生成する |
4、インスタンスを設定する |
5、インスタンスを使う |
6、インスタンスを削除する |
|
|
|
|
|
 |
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
最初に、作る物がどんな「物」か考えてみる。
作る物の目的や機能や構成を考える。
まずは、大まかな内容。
例:一般的な「自動車」を作る。
「自動車」がどんな物か考えてみる。
自動車の目的・・・
自動車の機能・・・
自動車の構成・・・
自動車はどんな「物」か? |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
設計するには、
作る物がどんなものかよく理解してないとできない。
日頃からいろいろなことを「オブジェクト」として捉えて
考えてみること。
目的や必要な機能を考えるトレーニングになる。
もちろん、プログラミングにも役に立つ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
次にクラスを設計する。
検討したオブジェクトの内容を設計図として書いていく。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
次に、完成したクラスからオブジェクトを作る。
設計図のままでは物は使えない。
実体化させないといけない。
クラスからオブジェクトを作ることをインスタンス化、
作られたオブジェクトをインスタンスと言う。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
オブジェクトとインスタンスの違い
オブジェクトは、「物」全般のこと。
なので、「物」は何でもオブジェクト。
インスタンスは、クラスを使って作られた「物」。
なので、インスタンスもオブジェクト。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
 |
|
|
オブジェクトとインスタンスの違い |
|
オブジェクト |
いわゆる「物」全般のこと。
事象を抽象化した概念。
objectは英語の物や目的などのこと。 |
インスタンス |
クラスを使って生成された「物」のこと。
実体化したデータ。
インスタンスもオブジェクト。
instanceは英語の事象や事例、実体などのこと。 |
|
|
|
|
|
|
 |
|
 |
|
今後セッションでは「物」の事を
オブジェクトまたはインスタンスと言います。
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
次はインスタンスの設定。
インスタンスを作ったらまず初期化する。
作った直後、フィールドの値は設計図の初期値のまま。
必要に応じて、そのオブジェクトに「固有」の設定をする。
例えば、自動車なら、
納車する前に「お客さんごと」に必要な設定にあたる。
車体の色や燃料など、自動車の使う前の状態を設定する。
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
完成したオブジェクトを使う。
これで、別のインスタンスから使うことができるようになった。
例では、運転手オブジェクトが自動車オブジェクトを使った。
つまり、物と物が関われるようになった。
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
インスタンスは使わなくなったら削除する。
これ以降、そのインスタンスは使えなくなる。
例では、自動車を廃車にしたイメージ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
クラスを使う流れの基本
オブジェクトは、
「設計して」、「作って」、「設定して」、「使う」。
必要なくなったら「廃棄」。
普通に自動車を使うのと同じ流れ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
この流れを繰り返すことで
クラスで、複数のインスタンスを作ることが出来る。
設計図から同じ製品をどんどん作るイメージ。
作り出したインスタンスはそれぞれ別の物なので別々の動作ができる。
この自動車クラスのインスタンスをレースゲームの自動車に例えると
プレイヤーごとにフィールドの値を設定してデータの管理がするイメージ。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
ポイント
つまり、インスタンスの持っているフィールドやメソッドは
インスタンスごとのもの。
インスタンスを削除した場合は、
そのインスタンスが持っていたフィールドも、
その値もメソッドもいっしょに消えて使えなくなる。
同じクラスを使って、また新しくインスタンスを作った場合は、
フィールドもメソッドも全く別の新しいものになる。
当たり前のことですが重要なので押さえておくこと。 |
|
|
|
|
|
 |
 |
|
 |
 |
|
|
 |
 |
|
 |
 |
|
|
|
|
|
|
|
|
|
|
|