公開中のスタック
本ブログはほぼ更新を停止しており、紹介した殆どのスタックが再現紹介を終了しています。画像だけでもお楽しみ頂けるかとは思いますが、やはり動作するスタックの方が楽しめるかと思いますので現在も公開できるスタックをまとめ、アクセスしやすくしました。
・再現紹介できるスタックは以下のとおりです。
古田様作品 「魔女入門書」「魔女入門書2」
大串様作品 「ぐるぐる女子高生」「長崎紀行」
細馬様作品 「Kuala lumpur」「Sagan」
掌田様作品 「10行ラジコン」
・新作スタックは以下のとおり
yodopk様作品 「ミサイル防衛システム」
「ぐるぐる女子高生」と「10行ラジコン」はブログ内のデスクトップでお楽しみいただけますが、それ以外は画面サイズの関係で別ウィンドウでお楽しみください。
【雑感】HyperCardとオブジェクト指向
本記事は2017/10/11に勢い余って投稿したものの、読み返してみてSmalltalkのことをなにも知らないのに書く内容ではないなと思って、数時間で取り下げたものです。数人の方しか目にしていなかったと思います。先日、はてなのアクセス解析をみていたら、Twitterがアクセス元の本記事へのアクセス記録がいくつかありました。投稿当時ご覧になったどなたかが本記事をツイートして下さったようです。タイトルにひかれてアクセスしたのに記事がなくなっていて申し訳なかったなと思い、再掲することとしました。修正したいと思う点もあるのですが、あえて投稿当時のままにします。内容については誤認が多々あろうかと思いますが、ご批判、ご指摘、ご意見などコメントに頂けたら幸いです。2018/1/2
----------------------------------------------------
知っている方には「何をいまさら」という内容です。
某所で否定的に、HyperCardはオブジェクト指向なのか、とか、HyperTalkのどこにOO(Object-Oriented)の要素があるのかという趣旨の文章を読みました。
その昔、HyperCardはオブジェクト指向だと聞いていたのに、Javaに触れた時に全くHyperTalkでの経験が活きなかったことを覚えていて、ある時までHyperCardはオブジェク指向ではない、少なくとも私が学んだオブジェクト指向の概念には嵌らないと考えていた時期がありました。
しかし、私だってそれから少しは大人になったので、今は考えを改めました。
以下はWikipediaからの引用(2017/10/11時点)です。
アラン・ケイが「オブジェクト指向」という言葉を創った当初は、Smalltalk システムが体現した「パーソナルコンピューティングに関わる全てを『オブジェクト』とそれらの間で交わされる『メッセージ送信』によって表現すること」を意味していた。しかしのちに、C++ の設計者として知られるビャーネ・ストロヴストルップが(自身、Smalltalk の影響は受けていないと主張する)C++ の設計を通じて整理し発表した「『継承』機構と『多態性』を付加した『抽象データ型』のスーパーセット」という考え方として広く認知されるようになった(カプセル化、継承、多態性)。現在は、両者の渾然一体化した曖昧な概念として語られることが多い。
上記の「パーソナルコンピューティング」を「HyperCard」に置き換えたら、HyperCardはまさにアラン・ケイのいうオブジェクト指向の定義にぴったりなのです。
この数年、偽HyperCardを作るにあたって、HyperCardの仕様を調べたり、挙動の確認をだいぶ行いましたが、HyperCardは徹底的にメッセージ送信で制御されるソフトウェアであるということを実感しています。
例えば、おなじみの
on mouseUp
play boing
end mouseUp
ですが、
on mouseUp
end mouseUp
は、ご存知のとおり、HyperCardによってボタンやフィールドやカードに送信された"mouseUp"メッセージを受け取るハンドラを定義するところ。
play boing
は、一見ここでPlayコマンドを実行するように見えますが、実際には"play"メッセージを"boing"という引数とともにHyperCardに送っていて、"play"メッセージを受信したHyperCardがplayコマンドを実行するのです。
※偽HyperCardは設計時にこの仕様を理解していなかったのでそういう挙動をしません。
メニューを選択すれば"domenu"メッセージ、スタックを閉じれば"closeStack"メッセージ、何もしなくても"idle"メッセージがカードに送られ、とにかく、ひたすらメッセージ送信です。
メッセージは以下の順で送られます。
[ボタン/フィールド]-[カード]-[バックグラウンド]-[スタック]-[Homeスタック]-[HyperCard]
これらは、まさしくオブジェクトであり、加えてメニューやウインドウもオブジェクトといってよいでしょう。
この順番のことをHyperCard付属のHyperTalk Referenceスタックでは「the message-passing order」と呼んでいるのですが、市販の書籍などではこのようにメッセージが送られることを「継承」とよぶことがあり、上記C++の説明にある「継承」との混乱が今現在でもあるように思います。
Smalltalkは1972年に開発が開始、1980年に公開
C++が1983年に登場
HyperCardは1987年に登場
HyperCardの開発期間も考えたら、HyperCardがSmalltalkのオブジェクト指向に影響受けたのは当然のように思います。ビルアトキンソンら初期のApple開発陣がXerox社でSmalltalk環境を見学していることや1984年にアラン・ケイがアップル・フェローとなったことも理由にあげられるかもしれません。