プログラミングと抽象化
最強の抽象化はなにか。
なんて、酷く抽象的な問いだけれど、答えは数だと思う。
人はいろんなものを数える。数にする。
数にすると何が嬉しいか、というと、数学を適用することが出来る。
モノだろうが量だろうが、人間だろうが概念だろうが、数にしてしまえば平等だ。
足したり引いたり掛け合わせたり、同じように活用することが出来る。
また、逆に数にすることでそのモノの本質が見えてきたりもする。
点の情報を波にしたり、もう一歩進んで円にしたりできる。
2進数にしてしまえば、ONとOFFでどこまでも飛ばしたりも出来る。
いまあなたの前にこの文章があるように。
そういったことを考えていると、抽象化のチカラというものが
見えてくるような気もする。
プログラミングをするとき、僕らは抽象化を行う。
(OOPの汎化とかのことではない)
実現したいことを、「結局はどういうことなのか」を考える。
そうすると何が嬉しいか、というと、デザインパターンを適用したりすることができる。
ただ一つのモノがあってほしくて、みんなでそれを使いたいんだ、
と言うときにはSingletonを組めばいいことがある。
要は状態ごとに違う振る舞いをして欲しいんだ、というときには
Stateパターンを組み入れればいい。
一つの処理の流れを共通化したいときはTemplateMethodパターンを使えばいい。
抽象化すると、考えを再利用することができる。
ニュートンが巨人の肩に乗ったように、僕らもGO4とかの肩に乗ることが出来る。
すごく乱暴なことを言ってるんだろうなぁと思うけど、そんなことを考えた。