仕事先からもらった資料でオブジェクト指向の勉強中。だいたいは知っていることだけど、時々は知らないことも出て来て勉強になる。
カプセル化と情報隠蔽
これまで両方ひとまとめにしていた(資料では「そういう技術書もある」と補足されていた通り)ので、カプセル化の概念がいまひとつわからなかったが、これで合点がいった。
汎化(継承)と拡張(extends)
もらった資料では継承と拡張の違いがよくわからなかったので検索して調べた。
汎化
「is a」関係、つまり、「ユースケースB is a ユースケースA」または、「アクタB is a アクタA」の関係が成り立ちます。
拡張
なるほど。汎化の場合は、「〜のうちの一種」という関係で、抽象化の逆になる、ということか。
また、アクター間でも汎化が使える、というのは新しい気づきだった。オブジェクト側でばかり考えていた。これまで、アクターが汎化されるようなケースでいろいろ悩みがちだったので。
抽象クラスとインターフェイス
抽象クラス……データ項目と抽象操作をまとめたもの。
インターフェイス……抽象操作のみをまとめたもの。
Enumulateインターフェイスとか、よくわからず使っていたけれど、なるほど、抽象操作(メソッド)という観点で把握すればいいのか。
ユースケース記述
ユースケースの内容を詳細に記述する。このDescriptionsから処理を書き起こしていけばいいわけで、わかりやすい。これまでユースケースから「えいや」でそのまま処理を起こしていたので、自分でも「どうも大雑把だな」と感じていたし、先生にも「関数化が未熟」と指摘されていた。ここのところをきちんとやれば改善されそう。
シナリオ記述も同様。
ロバストネス分析とMVC
エンティティオブジェクト……現実世界のオブジェクトを表現する。これは主にMVCで言うModelになると思われる。
この説明のおかげで、MVCの意義がやっとわかってきた。というかコントロールオブジェクトの意義がやっとわかってきた。コントローラにすべての機能を渡すのは「fatty(肥大化) controller」として嫌われるというのはまぁ分かるんだけど、こういう基準があれば、fattyかどうかの判断がしやすい。
管理オブジェクトというのもあるらしい。オブジェクトの生成や削除を管理し、リストを持つことで外部からの利用が便利になる。これもなかなか為になる。