- 122 名前:nobodyさん mailto:sage [2014/02/02(日) 23:19:31.40 ID:???]
- >>166
依存性を小さくできる、パターンに従っていれば伝わりやすい、OO的に自然で理解に手間がかからない 上のファクトリは単純にStaticにしても動かない ファクトリはサブクラスにオブジェクト生成の詳細を任せるパターンだから、createReaderはオーバーライド前提になっている ReaderFactory::create()からサブクラスのcreateReader()を呼ぶのは、親にとって未知の子孫固有のメソッドを呼ぶこと そのためget_called_class()なり遅延束縛なりして実行時にstaticメソッドのバインド先を決定してやる必要があるという 謎設計に帰結する。遅延束縛がなかったころはさらに不自然だった。 OOPではクラスメソッドは(各インスタンスではなく)クラス自身の振る舞いを記述するものだと言っていいだろう コード上でメッセージをやりとりしてシステムを形成しているオブジェクト==インスタンスだとすれば、クラス自身は何か? この設定いかんによって、クラス固有のメソッドとして自然なものと不恰好なものを区別できる static張りまくって関数ポインタのかたまりを作る人もいし、それがよいケースもある しかし手続きからOOに入ってやりがちな、よくないstaticについてはstatic evilとかでぐぐれば情報はある
|

|