ずいぶんと久しぶりに書く。
つか、独り言。後でもう少しちゃんと書こう。
オブジェクト指向の話。
とある例え話を見た。
なんかしっくりきたので、残しておきたい。
「動物に触ることができるか」っていう話なんだけど、
「動物とのふれあい」とかよくいうじゃない?
動物に触るって聞いたときに、
イメージしてるのって具体的な犬とか猫とかだと思うんです。
例えば、ワンコを飼ってる人だったら、自分の飼い犬を想像したり。
で、そのワンコには名前がついてるはず、例えばポチとしましょう。
ポチは「触れる」んですよね。でも動物は触れない。
動物は概念だから。存在しないから。
それがクラスとインスタンスなんだと。
なんかしっくりきた。
よく、クラスはオブジェクトの設計図っていうけど、
違う気がした。クラスは概念なんだと。
で、ちょっと「継承」って事を考える。
「継承が無いとオブジェクト指向じゃない」みたいな話もみたことある。
例えば、さっきの例だとポチのクラスは「犬」で、親クラスは「動物」みたいな話。
で、「動物」に例えば「吠える」っていうメソッドがあったとする。
「犬」にも吠えるってメソッドが継承されて、
「ポチ」に吠えるってメソッドがつく。
でも、「動物」は吠えないし、「犬」も吠えない。
吠えるのは「ポチ」だよね。
って考えると、やっぱり親クラスのメソッドは「インターフェース」なんだろうなと。
継承すると親クラスのメソッドとかフィールドとか使えて便利~♪みたいになるのは
やっぱ違うんじゃないかと思った。
「インターフェース」が定義されてるって考えるとなんかしっくりくる。
継承ってただの共通機能の寄せ集めになってる事が稀によくあるので、
それってきっと本来のオブジェクト指向の継承っていう事じゃないよね。
継承されるべきはインターフェースなんだろうなとふと思った次第。
継承されてきたフィールドとかメソッドって
一種のグローバルだと思うんです。
グローバルな変数とかメソッドって麻薬みたいなもんだと最近思う。
使ったその時はすごく便利。どこからでも呼べるし、
どこで定義してどこで使ってるかその時の「自分」は知ってるから。
でも時間が過ぎたり、色んな他の人が修正したりする中で、
どんどんメチャクチャになっていく。
で、そうなるともっとグローバルなものが必要になっていって・・・。
みたいな。
オブジェクト指向とかSOLIDとかとか、
今までに考えられて来たものってきっと、機能(役割)の分割(分担)の手法なんだろう。
機能の分割とみんな戦ってるんだな。
機能の構造化をするために、色んな手法があるんだな。
で、分割した機能は疎じゃないと。
原点回帰でそれって分割統治法ってことですよね。
昔の人もやっぱり凄いね。