何気なくYouTubeでカンファレンスの動画を漁ってたら素晴らしいプレゼンを見つけたのでメモ。
元ネタ
PHP Conference 2014「擬人化から始めるPHPerのためのオブジェクト指向超入門」 (SpeakerDeck)
Intro
- オブジェクト指向アプリケーションを構築するということは、適切なソフトウェア機構を考えだすこと
- 私たちは、実世界に存在しないオブジェクトを考えだすことで、現実世界の情報、プロセス、相互作用、関係、そしてエラーでさえも表現します。(オブジェクトデザイン p.002より)
- 生命のないものに対して、生命と知性を与えます。
- 無生物の擬人化は、はっきりと直接的に無生物に生命を与えている。
- 擬人化された世界では、親しみを持たせ、対象に関心を高め、対話形式を用いることで明確性を高め、客観性を出す効果が期待できる。(Wikipedia「擬人化」より)
オブジェクト指向を擬人化で始める
- 実世界にない存在を考えだす
- 生命と知性を与える
- 対話形式を用いる
性格(ロール)を決める
- 情報保持役
- モデルやエンティティ
- 情報を知ってる
- 保持するデータから計算するのもOK
- MVCのM
- 構造化役
- ざっくりグループ化する
- リスト、配列、ハッシュとかキューとか
- エンティティの関連とかを表現するときも
- サービス提供役
- 特殊な処理を提供する
- Worker, Writerみたいに -erになっているクラスを見つけたらその子は大抵これ
- 制御役
- 他の複数のオブジェクトから状況を聞き出して判断する
- 判断した結果を指示する
- 調整役
- あるオブジェクトから情報を受け取って他のオブジェクトに渡す
- MVCのC
- インタフェース役
- ユーザーインタフェースとか
- MVCのV?
書き出してみる
- 名前**(超重要)**
- 適切な名前をつけよう
- 売れないキャラは大抵名前が微妙
- 役割
- ↑6つの中に当てはめる
- 特徴(属性)
- たくさんはないはず
- できること(責務)
- 役割に沿っているか確認する
例
-
オレ:社長
「自叙伝出せないかなぁ」-
Aさん:秘書
→Bくん:事務
「社長語録まとめて提出して」 -
Aさん:秘書
→Cさん:広報
「ライターさんと調整よろしく」
-
-
オレ:社長
「コピー10部ソートしてホッチキス止めよろしく」-
新人君:コピー係
→こぴお:複写係
「お願いします」 -
新人君:コピー係
→ソータ郎:ソート係
「お願いします」 -
新人君:コピー係
→止め吉:ホチキス係
「お願いします」
-
性格が決まると
PHPにするには
- クラス名=役割
- プロパティ=特徴
- メソッド=できること
Bくん::事務
class 事務 extends Model {
public $name;
public function 語録を記録する($contents) {
return $this->語録->$save(....);
}
public function 語録をすべて取得する() {
return $this->語録->find('all');
}
}
オブジェクトとインスタンス
- オブジェクトはBくん=実体
$b = new 事務;
- Bくんは事務のインスタンスである=実例
$b instanceof 事務 === true
- Bくんは情報保持役のインスタンスである=実例
$b instanceof Model === true
まとめ
- オブジェクト指向の設計がわかると実装を理解できるようになる
- まず擬人化して図を書くことから始めると学びやすい
- オブジェクトデザインを入門書として読んでみてほしい