読者です 読者をやめる 読者になる 読者になる

デザパ

今日は牧場行ってきた。

ヤギとかウシとかヒツジとか。ヒツジは近くまで来てくれなかった。あとソフトクリームがうまい。

そのまま高知まで行って大回りで帰ってきたけど、遠すぎる。疲れた。

あ、誘う友達がいないので家族とです。

 

出発したのが10時くらいだったからそれまでにちょろっと勉強。デザインパターンの見直ししてた。それもGoFから。

このあたりの設計とかはどうやって勉強したらいいのかなぁ。哲学の勉強してたときの知識がある程度役に立ってるのはある。

 

コンポジションとかモナドとか、結局は状況=Contextを表現してんのかな、って感じ。

Yamada = new Person("YAMADA")

new Student(Yamada)

だったら「生徒としての山田さん」を表してる。「山田さんが生徒である」という状況。

Student extends Person

Yamada = new Student("YAMADA")

だったら「山田さんという生徒」を表してる。こっちは物。

状況によって「物を与える」が「物を贈る」になったり「押し付ける」になったりするのと同じように、「人」が状況によって「生徒」になったり「教師」になったり「息子」になったり「上司」になったりする。その違いを明示するのが「命名」なんだろう。状況によって「モノ=Object」も「コト=Behavior」も働きが変わる。意味が、変わる。

あと状況というものはそれだけが存在するんじゃなくて、周囲との違いから見つけられる相対的なものだから、生徒という山田さんがいたら別の人が教師をやってないと変なわけで、そのあたりの対称性というか、片側があったらもう片側もあったほうが理解はしやすいんじゃないかと思う。

プログラミングは機能を詳細に分解していく作業だからただプログラミングしてるとひたすら複雑化する。だから詳細をまとめあげて求めている機能の高さまでマクロ度を戻すのがカプセル化だ。コーディングとカプセル化は対立してて、求められる機能のために手段となる機能を見つけていくのがコーディング、いくつもの機能をまとめあげてひとつの機能のように見せる鍵になるのがカプセル化にあたる「命名」っぽい。そんな感じ。うん。

変数も関数も結局のところカプセル化であって、オブジェクト指向だけが特別なわけじゃない。オブジェクト指向の特別なところはむしろ機能を物として見るためのグルーピングかも。カプセル化の手段をひとつ提供してるだけなのか、捉え方を変えたという意味で大きな進展があったのか。継承とか集約とかはおまけ。