オブジェクト指向の開放/閉鎖原則
»
今日社内でBertrand Meyerの勉強会やっててびっくりした。
参考:
開放/閉鎖原則について、昔書いた記事。
Open/Closeは、変更の論理を、追加の論理にすり替える、ということなのだけど、ぼくがコンパイル言語特有と言ったのは、Close=触らない=固められる、ということが名前にまで影響していると気づいたからです。それが、ポリモフィズム、あるいは動的束縛のトリック。
しかし、それをぶち壊したのが、ベックで、三つの兄弟を発見するまで親をつくるな、と。あくまで、帰納的に発見せよ、無用な抽象化をするな、と。
ところが、もとを正すとMeyerはソフトウェア開発の第一原則は、
という。Beckは、
という。同じでありながら、この違いわかるかな。
さらに、Duck Typing。あらかじめ用意した名前を持った何かしらの共通の振る舞いすら、いらない。帰納的な世界の発見が、開放/閉鎖原則を自然な形で支援している。
つまり、開放/閉鎖原則は名前が今では悪くて、変化に備える名前になっている。変化に対応する方向の名前、もしくは、人間の認知順に則した、帰納的、発見的世界感を表現する名前に変えたらいいと思います。
あるいは、開放閉鎖原則は、「言語設計者」や「フレームワーク設計者」の原則とすべきなのかも。 浦嶌くんが、「どこかを触らなくても、置いておけば動作が変わる感じ」と表現したのは、まさに言えてる。SpecialPR