オブジェクト指向言語を使っていくにおいて、
「クラス」や「インスタンス」や「メソッド」や「プロパティ」や「コンストラクタ」を使っていくだけなら、
手順を覚えておけばとりあえずできます。
しかし自分は思いました
「なんでこんなことをする必要があるのか?」
コンピュータープログラミングは「便利なものは効率よく作る」ことが存在意義なので、
余計な手間がかかると感じることには敏感でいなければなりません。
なのでここからは、「オブジェクト指向を使う意義」の話をしていきます。
まずは「関数の応用」としてクラスを使う意義について考えていきましょう。
「関数」についてと「部品化」についてのおさらい
まず、処理を「関数にする」とは、処理を「部品化する」ことであると、
『プログラミング入門 ⑬「部品化」という考え方』の項で説明しました。
そんでもって、部品化によって綺麗な構造を作るのがプログラミングの極意で、
「樹」のように優れた構造を目指すべきだということを書きました。
理屈上、オブジェクト指向無しの古いプログラミング言語でも、
ソースコードのファイル分けをキッチリとやって、
それぞれのファイル内で効率良く関数を作っていけば、どうにかソフトウェアを作っていくことはできます。
しかしながら、昔の人はそれでは限界があると考えたわけです。
オブジェクト指向をやる意義には諸説ありますが・・・
その一つに「関数に種別をつける」という発想があります。
「関数の頭に種別がくっつく」という発想
まず、オブジェクト指向プログラミングは、
関数を作る場合、クラスを紐づけて「メソッド」として作っていくので、
クラスが「所属先」になり、それが「種別」みたいになります。
特に「静的メソッド」や「静的プロパティ」だとそういう話になります。
「静的メソッド」や「静的プロパティ」の場合は、
単純に「クラス名.メソッド名」と記述して使うものなので、
「関数(メソッド)の頭に種別の名称がつく」という使い方になります。
例えば、Javascriptだと、数学系の関数はMathクラスに収まっているので、
「Math.sin」とか「Math.PI」とか書いて使ってきます。
もし、オブジェクト指向プログラミングが無かった場合、
単純に「sin」とか「PI」とかを書くことになりますが・・・
膨大な数の関数を扱う場合、時に種別が欲しくなる時もあるわけです。
なので、「関数の所属先としてクラスが必要になった」
というのが、オブジェクト指向の意義のうちの一つにあたります。
- オブジェクト指向の意義の一つに「関数にクラスという種別を付加する」というのがある。
コメント