Smalltalk - オブジェクト指向を理解する
この言語を覚えた頃は、FORTANなどに代表される手続き型と呼ばれる言語が殆で、Lispなどの関数型と呼ばれる言語もありましたが、プログラムの単位と制御をきちんと整理して記述する「構造化プログラミング」というのが持て囃されていました。構造化の行き着く先として、オブジェクトという概念が提唱され、データを中心としてオブジェクト同士がメッセージをやり取りすることで処理を進めるという考え方が、注目されていました。
オブジェクト指向プログラミング
オブジェクトはクラスという構造で実装され、メソッドを使ってメッセージを送ります。既存のクラスから継承という形で新たなクラスを作ることにより、既にあるクラスライブラリから容易に目的のオブジェクトを作ることができるので、コードを安全に再利用できるということで注目されました。もちろん既存のプログラミング言語に対しても、工夫をすることでオブジェクト指向にすることもできるのですが、純粋なオブジェクト指向プログラミング言語として、この Smalltalk が開発されました。
Smalltalk
まだ主に C言語を使っていた時代だったのですが、どうもオブジェクトが何なのか、メッセージを送るってどういうことなの?というのがピンと来なかったので、そろそろキチンとオブジェクトというものを理解しようということで機会を探してました。たまたま大学の講座で Smalltalk をやる講義を見つけたので申請し、いそいそと当時使っていた PC9801 互換ノート(?)PCである PC-286L に Smalltalk/V をインストールして講義に向かいました。
PC-286L
Smalltalk/V (出てくる画面は Mac版)
https://bellwood-lab.jp/software/331
比較的大きめの教室だったのですが、一番前に座り授業で出てきたコードをその場で打ち込んで実行していたのですが、さすがに講師の方も気になったらしく、時折こちらを向いて「あってる?」と視線を送ってきます。そこはニッコリと「大丈夫です」と返していたのですが、この時代にPCを持ち込んでくる生徒なんて居なかったので、少しばかりやりにくかったのかもしれません。こちらはそんなことばかりしていたので、手慣れたもんですが。
実は授業の形式でプログラミング言語を覚えたのは、これが始めてだったような気がします。コードは確かめられますが、考え方などはそうもいきません。疑問点があれば講義の後で質問する機会もあり、特に継承周りはわかったようでわからないことも多く、その場で解決できたのはとても良かったです。こんなに短期間で新しい言語を覚えられたことは無かったような気がします。
面白いのは Smalltalk/V は、最初から「環境」がついており言語ではありますが、今で言えば Scratch のようなもので(こちらが Smalltalk の影響を受けたのですが)、あれこれ考えるよりも慣れてしまうが一番だというのが良くわかりました。マウスで操作しつつクラスを派生させて、追加のメソッドを書き込んでいけば、コードが出来上がってしまうのです。オブジェクト指向プログラミング(OOP)の肝は、オブジェクトの相互作用なので、それまでの言語のように、上から下へ順番にコードを走らせていくのではなく、何かのキッカケでイベントが発生して、それに対応したコードを書いていくという形になるので、頭に切り替えが必要です。
Smalltalk を含むオブジェクト指向言語の説明は、以下がよくまとまっています。
35章 SimulaからJavaへ、そしてその先へ: 主なオブジェクト指向言語とその環境
そうそう、当時はこの本で勉強するのが定番でした。
SMALLTALK-80―対話形プログラミング環境 単行本 –
最後に決まりきった説明は ChatGPT にお願いしたので、転記しておきます。
SmallTalk/V の使い方も聞いてみたのですが、無料だと割り当てられた時間が足りないのか、説明の途中で終わってしまいました。残念。
ヘッダ画像は GNU Smalltalk のロゴ
https://commons.wikimedia.org/wiki/File:GNU_Smalltalk_logo.svg