Smalltalkの思想を模倣した設計思想

ほとんど全てがオブジェクト


  • メソッドもオブジェクト
  • クラス定義もオブジェクト
    • 詳しく:クラス構造の定義とグローバルオブジェクト化宣言を同時に書いている
  • nil(Javaのnull)すらもオブジェクト
    • NullObjectパタンが簡単に!

全てがオブジェクトだとどうなの?


  • 全てが何かのクラスに所属している
  • 全てに操作のためのメソッドが存在する

オブジェクトじゃないもの


  • 式(メソッド扱いを除く)
  • 制御構文
    • 「式」として扱われる
  • 定義構文
  • シンタックス・シュガー

式?


  • 値を返すもの
    • メソッド
    • 演算
    • 制御構文

ほとんど全てがメソッド


  • 演算子もメソッド
    • 再定義が可能
    • ValueObjectの"=="は同値性を保証するのに大活躍

メソッドじゃない演算子


 =  ?:  ..  ...  !  not  &&  and  ||  or  ::

メッセージ・ドリブン


DuckTyping - もしもそれがアヒルのように歩き、アヒルのように鳴くのなら、それはアヒルである

  • メッセージ・パッシングした先のオブジェクトが
    • 「何のクラスか」が大事なのではない
    • 「そのメソッドを持っている/持っていない」が大事
  • 持ってなかったらどうなる?
    • NoMethodError が飛ぶ


最終更新:2010年01月24日 19:18