機能の原点に立ち戻るとうまい抽象化ができることに気づいた
機能とはそもそも何かと抽象化のポイント
機能とは次のもののことを指すみたいです。
機能(きのう、英: function)とは、もののはたらきのこと[1]。相互に連関し合って全体を構成しているものの各要素や部分が、それぞれ荷っている固有の役割[1]。また、そうした役割を果たすこと[1]。平易な文章ではしばしば大和言葉を用いて「はたらき」と表現・表記されることも多く、漢字表現を使う場合でも「役割」と言って済ませることも多い。「作用」とも。
https://ja.wikipedia.org/wiki/機能
ここで重要な点は2つあります。
- 機能の話をするときは、暗黙的に全体が存在する
- 機能とは全体における構成要素が担っている固有の「役割」である
つまり、機能とはそれ単体で独立して存在するわけではなく、何かしらの全体(文脈ともいえる?)における、役割を指します。機能の話をするときに、実際の構成要素がなくても大丈夫なのです。イメージとしては、履歴書の募集条件が機能で、実際に応募してきた募集条件を満たす人が構成要素でしょうか。
ここがうまい抽象化のポイントとなります。
(機能というと、どうしてもリアルな構成要素をともなってイメージしてしまうため、ここからは、機能の代わりに要求される「役割」という言葉を代わりに使っていきたいと思います。また、役割を実現するものと言う意味で、構成要素のことも「実体」という言葉を代わりに使っていきたいと思います。)
どのように抽象化につながるかというと、例を見てください。
例1:
心臓
役割: 血液を循環させる
実体: 心臓
例2:
裁縫バサミ
役割: 裁縫という文脈における布の裁断
実体: はさみ
役割を果たせれば何でもよいので、実体はその実なんでもよいのです。心臓の代わりに、人工的なポンプでも(技術的に可能であれば)大丈夫です。裁縫バサミの代わりに、カッターでも、歯で噛み切ってもよいです。
実体のもつ性質と再利用の話
裁縫バサミをもう少し深ぼって見たいと思います。
なぜ「布の裁断」の役割に実体として裁縫バサミが選ばれているのでしょうか?
それはハサミのもつ「2枚の刃でものを切断する性質」がその役割に最適だったからです。
カッターよりも、歯で噛み切るよりも、先人はハサミのほうが良いと思い、既存のハサミからより布の切りやすさに特化した裁縫バサミが生まれたのでした。
これは、プログラミングで言うところの再利用の考え方に応用できそうなので、もう少し考えてみたいと思います。
性質には2種類あります。
- 特定の文脈に特化したもの
- 文脈横断的なもの
です。
例えば、心臓は体内で血液を循環させるのに特化しています。よくポンプのように例えられていますが、体から取り出したとして実際にポンプのように使えるわけではありません(サイコパス的発想)。
はさみは、比較的文脈横断的です。「2枚の刃でものを切断する性質」が応用性が高いの高いのかもしれません。例えば、家にあるハサミの種類を挙げてみてください。
- 文房具のハサミ
- 裁縫バサミ
- 調理バサミ
- 眉カット、鼻毛カットハサミ
- 散髪用ハサミ
最近はダンボール用のハサミとかありますね。これらは各要求される役割において、ハサミのもつ性質が適切なため、特化して再利用されているのでした。
このように、実際のプログラミングにおいても、再利用を考えるときに、それが文脈特化なのか、文脈横断的なのか考えると良さそうです。
Discussion