見出し画像

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 について教えて下さい。
Smalltalkは、オブジェクト指向プログラミング言語の一つです。Smalltalkは、1970年代後半にアラン・ケイらによって開発され、グラフィカルユーザーインタフェース(GUI)を開発するための実験言語として始まりました。
Smalltalkは、クラスベースのオブジェクト指向言語であり、すべてのものがオブジェクトとして表現されます。Smalltalkの最も重要な特徴の一つは、メッセージパッシングモデルを採用していることです。オブジェクトは、他のオブジェクトにメッセージを送信し、その結果を返します。
Smalltalkは、簡潔で読みやすい文法を持っています。Smalltalkの文法は英語に似ており、プログラムが自然言語に近い形で書けるようになっています。Smalltalkは、コードが実行中に変更される「ライブプログラミング」という機能を備えています。これにより、コードを書きながら、その結果を即座に見ることができます。
Smalltalkは、GUI開発に適しており、SqueakやPharoなどのフレームワークを用いることで、簡単にアプリケーションを作成することができます。また、Smalltalkは、多くのテストフレームワークや開発ツールを備えているため、品質の高いソフトウェアを開発することができます。
最後に、Smalltalkは、歴史的な価値がある言語であり、多くのオブジェクト指向言語に影響を与えています。Smalltalkは、オブジェクト指向開発に興味がある方にとって、興味深い言語であると言えます。

ChatGPT

SmallTalk/V の使い方も聞いてみたのですが、無料だと割り当てられた時間が足りないのか、説明の途中で終わってしまいました。残念。

ヘッダ画像は GNU Smalltalk のロゴ
https://commons.wikimedia.org/wiki/File:GNU_Smalltalk_logo.svg

いいなと思ったら応援しよう!