世の中に、オブジェクト指向言語は百花繚乱。さまざまな思想と、さまざまな目的のために、さまざまな言語がデザインされているんだ。それらは一応、オブジェクト指向っていう共通の理解の上にあるはずなんだけど、実際に使ってみるとけっこう勝手が違う。つまり、オブジェクト指向へのアプローチっては、1 つではないんだ。そこで、いろんな言語を比べてみて、それぞれの思想を理解しよう、ってのがこのページの目的だ。

言語は思考を規定する

オブジェクト指向ってのは、『対象のモデリング』っていう問題に対する解決法の 1 つ。別にオブジェクト指向プログラミング言語の定義じゃないし、C 言語みたいにオブジェクト指向をサポートする構文を用意していない言語でも、オブジェクトを指向するプログラミングはできる。

でもね。実際にプログラミングをしていると、使っている言語が前提にしているオブジェクト指向の考え方に染まりがちだ。「言語は思考を規定する」。しらずしらずのうちに、その言語的な考え方しかできなくなっているかもしれない。

でも逆に言えば、それぞれの言語を比較してみれば、思想や目的がはっきりしてくるんじゃない?いままで気付かなかった問題のモデリング方法に気付くかもしれない。それを浮かび上がらせてみたいんだ。このページは、言語の多様化を楽しむ方向へ走るぜ。

デザインパターンを叩き台にする

じゃあ、言語の違いを比較するには、文法的な違いさえ分かればいいのか?そうじゃないと思うんだよね。文法は、それぞれの思想の違いを端的に表すでしょいう。でも、それだけじゃあ、違う考え方を持ってる人を納得させるには不十分だ。その考え方の実践的な利点を示さなくてはいけないよね。

それには、実際のプログラムを叩き台にするのが一番!ということで、デザインパターンをお題にしていろいろな言語による実装を見てみることにした。なぜデザインパターンかというと、まず広く知られている。そして、デザインパターンで取り上げられているパターンは、実のところ Smalltalk や Objective-C などのフレームワークから抽出されたものが多いんだ。ということは、その源流となった実装を見るのは興味深いと思わないかい?だから、ある言語では非常に苦労して実装しているものが、他の言語だととってもスマートにできることがあるんだ。こういったことが明確に示されれば、とっても大成功だね。

Tabel of Contents

オブジェクト指向言語の比較

メッセージ送信の比較
メソッドの拡張

デザインパターンの実装の比較

Chain of Responsibility

Chain of Responsibility の実装の比較
C++ による実装
Java による実装
Objective-C による実装
Dylan による実装
Smalltalk による実装
Self による実装
NewtonScript による実装
AppleScript による実装
C による実装
NSResponder と responder chain の実装

謝辞

このページを書くにあたって、次の方々にソースコードと説明文を提供していただきました。sumim さん、2 さん、GNUE(鵺)さん、terra さん、かりやんさん。大変ありがとうございました。

もっといい実装方法があるとか、もっと言語を追加したいという方は、掲示板メールでお願いします。


[Home] [Download] [Archives] [BBS] [Cocoa Programming Tips 1001] [Core Foundation の秘密] [Safari Developer News] [はじめてのブラウザのつくり方] [Sketch BP] [スクリーンセイバーを作ろう] [Objective-C 最適化] [Authorization API 完全理解] [Mac OS X Programming Books Review] [オブジェクト指向の言語比較論]

mailto: mkino@xd5.so-net.ne.jp