おもしろ 技術・科学

ふたたびオブジェクト「指向」を考える

投稿日:

最近、仕事でほんの少しSmalltalkに関わっている。と言ってもSmalltalkでバリバリプログラムを書こうというようなことではなくて、Smalltalk処理系で作られたプログラミング環境を使ってゴニョゴニョということをやっているのだ。

Smalltalkといえば、かれこれ30年近くも前に雑誌で読んでワクワクした言語/開発環境/処理系である。オブジェクト指向という用語もその時に知った。

世の中でオブジェクト指向プログラミング言語というのがまともに使われだしたのはC++とJavaができてからだと思う。僕が会社に入った頃にはオブジェクト指向なんて知らないという人が多数派で、やっと構造化プログラミングが当たり前になる頃だった。だから僕もわりとまともにオブジェクト指向っぽくプログラミングを経験したのはJavaからだ。でもずっと頭の片隅にこれってオブジェクトじゃないよなあ、あくまで「指向」だよなあと感じてきた。だってJavaでもC++でもオブジェクトは書かないでクラスを書いてそいつから実行時にオブジェクトを作って動かすからオブジェクト指向という触れ込みなのだ。コードを書くときにオブジェクトっぽい考え方で書けるだけで実際にはオブジェクトなんて作らないで動いていると言っても過言ではないのだな。別に動けばいいじゃんって言う人には別にどうでもいいことだろうけど。

そういう頭の片隅の疑問に常にくっついていたのがSmalltalkだったような気がする。

オブジェクトの考え方の基本は、とにかくオブジェクトというものがあって、そいつにメッセージを送るとなにか起きる。もちろんメッセージで返事が来ることもあるし、そいつが他のオブジェクトにメッセージを送ったりする。オブジェクトの挙動を変えるためにも「こんなメッセージが来らこうやって動くようになれ」というメッセージを送るのだ。すると送られたオブジェクトは新しいメッセージに反応できるようになる。これが本来のオブジェクトのプログラミングなのだ。

どうもSmalltalkはそういう本来の姿を残しているらしい。

というわけで、図書館を検索したら「Smalltalkで学ぶオブジェクト指向プログラミングの本質」という本を見つけた。

この本の最初にこんなことが書かれている。

Smalltalkではインスタンスとクラスを分けません。クラスもインスタンスであり、クラスのクラスであるメタクラスもインスタンスになっています。つまり、すべてがオブジェクト。その理由はオブジェクトに重点を置き、交わすメッセージを大切にするからです。クラスおよびクラス間の継承・集約・関連など、これらはオブジェクト指向の主たる要目ではないのです。

なかなかシビれるパラグラフではないか。

この本をちらちら読みながら「考える脳考えるコンピューター」という本を読んでいると、Smalltalkの動作は脳の細胞の働きに似ているような気がしてきた。なんというか、ニューロンとかシナプスとかの動作を真似るとしたらSmalltalkの記述が一番素直なのではないかと感じたのだ。

もちろんSmalltalk処理系は脳じゃなくてつまらないコンピュータだから、脳よりはコンピュータ的な動きをするわけだけど、プログラムやデータや処理自体がきっちり分かれている他のコンピュータ言語よりはずっと脳に近づいているような気がするのだな。

結局現存するプログラミング言語はコンピュータが持つあまりにも少ない資源をいかに効率よく使うかということに気を使っている言語だ。でもひょっとしてそんなことを気にしなくてもいい時代が実は近づいているのではないだろうか?だとしたらC++やJavaなんてアセンブラとさして変わらない低級言語でしかない。まあ、Smalltalkだってそういう制限と付き合いすぎてクラスなんて概念を創りだしてしまったわけだけだから似たりよったりだけど、実はオブジェクトを現実世界に解き放つ役割を担うのに一番近い言語なんじゃないだろうか?

と、少し妄想チックになってきたけど、上記に書いた二冊の本をあわせて読むとなんとなくそんなことを考えてしまうのだな。

Smalltalkで学ぶオブジェクト指向プログラミングの本質

考える脳 考えるコンピューター







書いた人

nyao

nyao

本を書きたい人にITの基礎から学んでもらって、Kindleで著者デビューするまでをサポートします。 ITってよくわからないという人のために勉強会をやっています。 「読書と編集」という屋号でお仕事をしています。

プロフィールを表示 →

-おもしろ, 技術・科学
-, , ,

Copyright© NyaoPress 読書と日常 , 2018 All Rights Reserved.