日本語を知っているだけでは優れた小説を書けないように、クラスという概念を知っているだけでは優れたクラスは作れません。
優れたクラスを作れるようになるためには、構造の理解とはまた別の知識が必要です。
そして、それができるようになってはじめて、あなたはオブジェクト指向エンジニアとして一人前になったといえます。
では、優れたクラスはどうやったら作れるようになるのでしょうか?
続きをご覧ください。
まず、システムを作るときそのシステムが何をして、何をしないのかを決める”仕様”が必要です。
仕様が決まったら、クラスを洗い出します。
クラスを探し出す作業は、システムの仕様から名詞を探す作業です。
では、実際に学習塾の成績管理システムを考えてみましょう。
・学習塾があり、各学年ごとに複数の学級がある。
・1学級には複数人の生徒がおり、各科目ごとに担当する教師がいる。
・月に1回模擬試験があり、その成績を管理する。
・成績は志望校の合格判定に使用され、この結果はプリンターから出力され家庭に郵送される。
①クラス仕様の決定
②「操作」の洗い出し
③そのために必要な「属性」を考える
という手順で行います。
操作はプログラム的にはメンバ関数に相当し、属性はデータメンバに該当します。
内部に隠ぺいされてしまう属性よりも外部からの窓口となる操作の方がはるかに重要です。
この仕様はどのクラスの仕様であるかという認識はとても重要な視点です。
なぜでしょうか?
ある属性や操作が別のクラスに実装されてしまうと、クラスの破壊や分割などめんどくさくなってしまいます。
プログラムは「何をするか」だけでなく、「誰がするのか」という視点も重要です。
誰がは基本的には仕様(文章)の主語です。
仕様を記述するときのコツは明確なところを明確にするのは当たり前ですが、あいまいなところを明確にすることが大事です。
明確にすれば抽象化されて変更に強くなります。
分析は大きく分けて静的モデリングと動的モデリングの2つに分けれます。
静的モデリングはシステムがどのようなクラスで構成されているのかということを分析し、動的モデリングはそのクラスから生成されたインスタンスがどのように振る舞うかを分析します。
シミュレーション的な要素を持っている。
オブジェクト指向はシミュレーションからはじまりました。
問題領域から名詞を洗い出せば、クラス候補を探すことは難しくありません。
これがクラスになるかはあとでゆっくり検討すれば自然に決まってきます。