言語によるオブジェクト感覚の違い
C++ と Smalltalk
両者ではオブジェクト指向の考え方をある程度切り換える、あるいは、それぞれを母国語とするプログラマとの談義を有益なものにしたいときには互いに事前のすりあわせが必要らしいです。--sumim
その片鱗をみることができる文献
追記:
いまさらですが、それまで漠然とかかえていた上記のような疑問は現在ほぼ解決しています。
- [はてな]「オブジェクト指向の概念の発明者は誰ですか?」
- [はてな]「“オブジェクト指向プログラミングとは何か?”」
Smalltalk(アラン・ケイ)は“オブジェクトへのメッセージ送信”というメタファをしてその「オブジェクト指向」と、C++(ストラウストラップ)は抽象データ型からの発展型(あるいはそれとは別のクラスのあり方)をしてその「オブジェクト指向」と位置づけ、その進化の初期の過程で整備されました。両者のコンセプトは直交とまでいかずともたがいに馴染まない要素(たとえば、C++ で単なる関数の起動にすぎないものに対する Smalltalk のメッセージ送信というメタファ、Smalltalk のすべてがオープンでアクセス可能というスタンスに対して C++ の情報隠蔽が必須という考え方)を持っています。
しかし、オブジェクト指向にはじめて接したユーザー(プログラマ)はそれぞれの言語の設計者の趣向とは無関係に、それらの特徴の一部あるいは全部の組み合わせにより新しい概念である「オブジェクト指向」を理解しようとしました。具体的には C++ のそれ(例の三原則)をベースに Smalltalk のエッセンス(メッセージング)を調合してユーザーなりの「オブジェクト指向」を組み立てたわけです。
また、こうして作られたユーザー本位の“新しい”概念にもとづいて、さらに多くの新ブジェクト指向言語が作られ、使用され、あらためてオブジェクト指向自体も一般化され理解され、語り継がれてきたわけです。もともと別だった2つの考え方のキメラ(あるいは似たような役割りを重複して持っている状態)なわけですから、それらを分離することなしに突き詰めて考えていけないのは当たり前です。対象とする言語の成り立ちによっては、突き詰める(分離して考える)こと自体命取り(本質を見失う)危険性すらはらんでいます。---sumim
Lisp
ANSI Common Lispには標準で CLOS というオブジェクト指向をサポートするライブラリがついている。
どんな感覚なのかは、Wiliki:Lisp:Geometry にその片鱗が載せられている。
あと参考になるのは LispでWebサーバーを作った話 とか。--SHIMADA
Scheme
Schemer's way 言語自身でOOPを実装していなくて、ライブラリで実現(したければ)するタイプの言語。で、実装形態は幾つも有り得る…という話 --戯
ここでは言及されてないがSchemeで不可能な形態のOOP実装だって有り得るだろう --戯
>言語自身でOOPを実装していなくて、ライブラリで実現(したければ)するタイプ
極端なことをいうと Smalltalk もある意味、このタイプですよね。--sumim
このページを編集 (3096 bytes)
|
以下の 2 ページから参照されています。 |
This page has been visited 7952 times.