Because We Love Happy Coding

フリーライターからエンジニア × 講師。発信力だけあり余ってる感じ

オブジェクト指向とUML

今日もまたコーディング。だって僕らはHappy Codingが大好きだから。

仕事先からもらった資料でオブジェクト指向の勉強中。だいたいは知っていることだけど、時々は知らないことも出て来て勉強になる。

カプセル化情報隠蔽

  • カプセル化……データと操作をひとまとめにして扱うこと。
  • 情報隠蔽……データへの直接アクセスを阻止すること。

これまで両方ひとまとめにしていた(資料では「そういう技術書もある」と補足されていた通り)ので、カプセル化の概念がいまひとつわからなかったが、これで合点がいった。

汎化(継承)と拡張(extends)

もらった資料では継承と拡張の違いがよくわからなかったので検索して調べた。

www.itsenka.com

汎化

「is a」関係、つまり、「ユースケースB is a ユースケースA」または、「アクタB is a アクタA」の関係が成り立ちます。

拡張

ユースケースAに対して、機能を追加するようなユースケースBの関係を示します。

なるほど。汎化の場合は、「〜のうちの一種」という関係で、抽象化の逆になる、ということか。

また、アクター間でも汎化が使える、というのは新しい気づきだった。オブジェクト側でばかり考えていた。これまで、アクターが汎化されるようなケースでいろいろ悩みがちだったので。

抽象クラスとインターフェイス

  • 抽象クラス……データ項目と抽象操作をまとめたもの。

  • インターフェイス……抽象操作のみをまとめたもの。

Enumulateインターフェイスとか、よくわからず使っていたけれど、なるほど、抽象操作(メソッド)という観点で把握すればいいのか。

ユースケース記述

ユースケースの内容を詳細に記述する。このDescriptionsから処理を書き起こしていけばいいわけで、わかりやすい。これまでユースケースから「えいや」でそのまま処理を起こしていたので、自分でも「どうも大雑把だな」と感じていたし、先生にも「関数化が未熟」と指摘されていた。ここのところをきちんとやれば改善されそう。

シナリオ記述も同様。

ロバストネス分析MVC

  • ロバストネス分析……エンティティオブジェクト、バウンダリオブジェクト、コントロールオブジェクトで分析する手法。らしい。

  • バウンダリオブジェクト……アクターとシステムの接触点を示す。画面とか。これはMVCのViewになると思われる。

  • エンティティオブジェクト……現実世界のオブジェクトを表現する。これは主にMVCで言うModelになると思われる。

  • コントロールオブジェクト……ユースケースに対応する。ユースケースの完了と同時に消滅する。

この説明のおかげで、MVCの意義がやっとわかってきた。というかコントロールオブジェクトの意義がやっとわかってきた。コントローラにすべての機能を渡すのは「fatty(肥大化) controller」として嫌われるというのはまぁ分かるんだけど、こういう基準があれば、fattyかどうかの判断がしやすい。

管理オブジェクトというのもあるらしい。オブジェクトの生成や削除を管理し、リストを持つことで外部からの利用が便利になる。これもなかなか為になる。

追記

必ずしもロバストネス分析MVCと一致するわけでもないらしい。

https://inoccu.com/blog/2014/01/26/153315.htmlinoccu.com