mishimaの日記: 変わったオブジェクト指向
日記 by
mishima
たまには日記にそれなりに有用なことでも書いておかないと、恥ずかしくて他人様に見せられない。そんなわけでとりあえず、「オブジェクト指向プログラミング」とは何か、ということの試行錯誤を表現すべく、いわゆる世間一般のオブジェクト指向言語ではない、ちょっとかわったものを挙げてみようと思う。
- CLOS (Common Lisp Object System)。
「構造体に仮想関数テーブルを付加した、いわゆるオブジェクト」という形ではない。オブジェクト(状態)とメソッド(処理)は、形式上完全に分離している。メソッドが呼び出されたときに動的に引数の形式を検査することによってポリモルフィズムを実装している。つまりポリモルフィズムこそがオブジェクト指向の本質だ、とこのシステムの設計者は言いたいわけ。たぶん。実際、ポリモルフィズムという点だけで見れば、呼び出し時に動的に評価するという仕組みは(メソッドのインターフェースがコンパイル時に静的に決定される C++ や Java といった)他の言語より格段に理想的。こういう実装を知ってしまうと、Java などの型チェックの自由度のなさ、ダウンキャストに対する警戒心などが情けなくなる。 - クロージャ。Lisp 系言語では標準装備。状態を内包した処理。デザインパターンで言うところのストラテジ。「構造体のメンバに関数ポインタを突っ込む」でも十分オブジェクトとしての最低条件を満たすだろうことと同様、クロージャも十分オブジェクトになりうる。というより、もう一つのオブジェクトの実装と呼んだほうがよさげ。
- signature。俺は G++ の拡張機能として知ったのが初めてなんだけど、もともとは ML にあった概念。継承の必要のないインタフェース。最初からすべてを踏まえた完全な設計がなされているならともかく、他所さまの作ったコンポーネントのソースコードに手を入れることなく自分の作ったものとうまくすり合わせるためにはこういった仕組みを使うほうが便利なんじゃないかと思う。
変わったオブジェクト指向 More ログイン