2. Clascal のオブジェクト指向拡張
Apple の Lisa には Lisa Pascal と呼ばれる製品/言語 1 が存在し、これをオブジェクト指向拡張したものが Clascal です。アプリケーション開発環境 Lisa Workshop 3.0 上で動作する Clascal は 1984 年の 9 月にリリースされました。最初の Clascal の正式なリリース日は不明ですが、少なくとも 1983 年には存在していたようです。
Clascal は Apple が Pascal に対して行った最初のオブジェクト指向拡張です。Clascal は Object Pascal ではありません。
開発は Apple の Personal Office Systems (POS) Division (The Lisa Division / The 32-Bit Systems Division) で行われたとの事です。
2023 年 1 月 19 日、Apple Lisa の 40 周年記念として、Lisa OS (と Tool Kit) のソースコードが公開されました。Clascal で書かれています。
See also:
- Clascal (Wikipedia:En)
- Lisa Office System (Wikipedia:En)
- Lisa Toolkit (Wikipedia:En)
- Clascal (wiki.freepascal.org)
- An Introduction to Clascal (wiki.freepascal.org にあるコピー)
- Revisiting Apple’s ill-fated Lisa computer, 40 years on (ars TECHNICA)
- Pioneering Apple Lisa goes “open source” thanks to Computer History Museum (ars TECHNICA)
- THE ART OF CODE: APPLE LISA (Computer History Musium)
- Lost World of Mac (bellwood-lab.jp)
2.1. Clascal のクラス型
Clascal のクラス型は別ユニットで定義する必要があります。プログラム本体で定義する事はできません。
2.1.1. クラス型の定義
Clascal のルートクラス 2 は TObject です。よって Clascal のすべてのクラスは TObject の下位クラスとなります。
クラスの定義は interface セクションで "クラス型名 = subclass of 親クラス" のように行います。
ルートクラスは
THOGE = SUBCLASS OF NIL
のように NIL からの派生として作るようです。
クラスに属するメソッド (関数/手続き) の実装は implementation セクションに "methods of クラス型名; ~ end;" のブロックを作り、グループ化して記述します。
unit Sample;
interface
type
TCls = subclass of TObject
ID: Integer;
function TCls.CREATE(object: TObject; itsHeap: THeap): TCls;
end;
implementation
methods of TCls;
function TCls.CREATE(object: TObject; itsHeap: THeap): TCls;
begin
if object = NIL then
object := NewObject(itsHeap, THISCLASS);
SELF := TCls(object);
SELF.ID := 0;
end;
end;
end.
Clascal のクラス型にはコンストラクタやデストラクタがなく (CREATE メソッドの実装は必須)、プロパティもありません。
- 多重継承はできません。
- override 指令の付いたメソッドは、自クラスで上位クラスの同名メソッドを上書きする事を意味します。
- abstruct 指令の付いたメソッドは抽象メソッドです。自クラスでは機能を実装せず、機能は下位クラスで実装する必要があります。但し、下位クラスで実装されなくてもエラーにはなりません。
- default 指令の付いたメソッドは、下位クラスで機能を実装される事を前提とします。default 指令の付いたメソッドが上位クラスにある場合、下位クラスで機能を実装せずにメソッドを呼び出してもエラーにならずに、この default 指令の付いたメソッドが呼び出されます。
- 自クラスを表すにはキーワード
SELF
を使います。 - 親クラスを表すにはキーワード
SUPERSELF
を使います。SUPERSELF は override メソッド内でよく使われます。
2.1.2. クラス型の作成と破棄
var
Cls: TCls;
begin
Cls := TCls.CREATE(NIL, mainHeap);
...
Cls.Free;
end;
CREATE メソッドを使ってオブジェクトを生成 (インスタンス化) し、Free メソッド (TObject で実装されている) で破棄します。
2.2. Apple と Pascal
Apple][ の時代から Apple 社のコンピュータには Pascal がありました 3。
この Pascal Syntax Poster はジェフ・ラスキンが考案したもので、スティーブ・ジョブスがトム・カミフジにデザインを依頼して出来た Apple][ Pascal の構文図です。
※ 流石ジョブスというか、ラスキンの努力が (半分くらい) 台無しなポスターに仕上がっています (w
- The History of Apple’s Pascal “Syntax” Poster, 1979-80 (vintagecomputer.ca)
- Pascal Syntax Poster (pascal-central.com) <- 高画質版のポスター画像が置いてあります
- 宝物のApple Pascal Syntax Poster (合同会社ギズモン)
古い Mac OS や Lisa Office System (Lisa OS) 等はその大部分が Pascal で書かれていましたし、Adobe のフォトショップも初期のバージョンは Pascal で書かれていました。
See also:
- The Legacy of the Apple Lisa Personal Computer: An Outsider's View (David T. Craig)
- ADOBE PHOTOSHOP SOURCE CODE (Computer History Museum)
- A Brief History of Apple Computer's Work with the Pascal Language (applefritter.com)
参考文献
タイトル | 著者 | ISBN-10 (Amazon) |
出版年 |
---|---|---|---|
オブジェクト指向プログラミング〈下巻〉 | カート・J.シュマッカー (著) 大谷 和利 (訳) |
4890520929 | 1990/9/15 |
Clascal は断片的な情報しかなく、エミュレータ等で実行して検証する事もほぼ不可能に近いです。日本語で書かれた Clascal の情報なんていうのはこの書籍くらいにしか存在しないのではないでしょうか?
索引
[ ← 1. オブジェクト指向拡張とレコード ] [ ↑ 目次へ ] [ → 3. Macintosh 用 Pascal のオブジェクト指向拡張 ]
-
Apple][ および Apple III Pascal のスーパーセット。Lisa Workshop の最初期から Lisa Pascal はオブジェクト指向拡張されているので、"Lisa Pascal (製品) = Clascal (言語)" という認識でいいように思う。 ↩
-
親クラスのない (それ以上上位に遡れない) クラスの事。 ↩
-
概要は「用語集 (標準 Pascal 範囲内での Delphi 入門)」を参照。 ↩