メソッド指向について

SIEの開発している最中に思いついたこと

SIEを開発している途中で、以下のようなことを思いつきました。ふさわしい言葉がなかったので、ここでは仮に「メソッド指向」としておきます。誰かが、もうすでに思いついていそうですが、アイデアの備忘録として、ここに書き残しておきます。

メソッド指向

メソッド指向はオブジェクトを中心に考えるのではなくて、メソッドを中心に、開発を進めていく考え方です。次の特徴があります。

  1. オブジェクトやクラスがメソッドを持つのではなくて、メソッドがオブジェクトを持つ(オブジェクトが付属品)
  2. メソッドの返り値はメソッド
  3. 処理中のオブジェクトは隠蔽される(JavaScriptの場合、リテラル以外はすべてカプセル内部へ)

オブジェクト指向の場合、共通する属性があれば、クラスにメソッドやプロパティとしてまとめておきます。ですが、メソッド指向の場合、「クラス」や「プロパティ」という概念はありません。メソッドとオブジェクトがあるだけです。

コードの例(JavaScript)

 //addメソッドを呼び出す
 var add = Function.method("add"),
       b = Function.method("add");
 add.number(2);
 add.number(12);   //この時点で、内部の数値オブジェクトは14
 add.element("p"); //p要素のオブジェクトを生成。新しいaddメソッドを返す
 b.number(2);
 var scale = Function.method("scale");
 scale.number(2)   //scaleメソッドは2倍メソッドと定義
 //以下はmatrix.scale(2)と同じ効果
 scale.matrix({
    a : 1,
    b : 0,
    c : 0,
    d : 1,
    e : 0,
    f : 0
 });
 //pointオブジェクトを2倍しているので、x座標は20、y座標は40となる
 scale.point({
    x : 10,
    y : 20,
 });

実際に実装可能かどうかはわかりません

もし、後日、時間があれば、上記の例を実装してみようかと思います。