日々常々

ふつうのプログラマがあたりまえにしたいこと。

メソッド≠関数

クラス作ってインスタンス作ってメソッド作って。同じメソッドを様々な場所から呼ぶ。
それで「オブジェクト指向的な実装」とか言われると流石に否定したくもなります。
そりゃ単なる構造化。
インスタンス生成の手間が増えてる分、デメリットしかないじゃない。


極端な話、状態を持たないクラスのインスタンスを作る必要はありません。
あるメソッドに決まったパラメータを、なんど与えても、どんな時にでも、同じ値が返ってくる。メソッドの大抵がそのように実装されているならば、まずオブジェクト指向プログラミングは出来ていません。例えば、Javaで実装したプログラムのメソッドを、無作為にstaticとしても成り立ってしまうようであれば、それは手続き型言語で書いた方が良いです。その方が見通しも性能も良いと期待できます。オブジェクト指向言語の価値を著しく損なっていますし、同時にプログラマ手続き型言語の実装スキルを無駄にしている可能性もあります。

メソッドは、インスタンスの状態を変更もしくは取得するものです。固定の演算を行うものではありません。関数とは似て非なるものです。覚え初めの頃は、メソッドはファンクションや関数みたいなものと教えられたりするかもしれませんが、別物だと言う認識は必要です。関数をJavaで実装するとstaticメソッドになりますが、だからと言って関数=メソッドや、関数≒メソッドと思い込んではいけません。

メソッド呼び出しは「何が起こるか判らないけれど、それっぽい事が起こるもの」だと思っています。実装なんて呼び出し側にとってはどうでもよく、興味をもたれた時点で負けくらいの感覚です。呼び出し側の期待に精一杯応えるのがインスタンスの役割で、その為に実装されるものが具象クラスです。クラスはインスタンスが期待通りの結果を出すためにお膳立てをし、インスタンスは整えられた条件の中でメソッド呼び出しに応えるのです。

なんだかこうして考えると、信頼で成り立っている人間関係に思えてきました。裏切られたときは責任の押し付け合いが始まっちゃう辺りもそれっぽいかも。