7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DelphiAdvent Calendar 2019

Day 4

<2> Clascal のオブジェクト指向拡張 (Pascal へのオブジェクト指向拡張の歴史と Delphi)

Last updated at Posted at 2019-12-03

2. Clascal のオブジェクト指向拡張

AppleLisa には 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:

2.1. Clascal のクラス型

Clascal のクラス型は別ユニットで定義する必要があります。プログラム本体で定義する事はできません。

2.1.1. クラス型の定義

Clascal のルートクラス 2TObject です。よって Clascal のすべてのクラスは TObject の下位クラスとなります。

クラスの定義は interface セクションで "クラス型名 = subclass of 親クラス" のように行います。

ルートクラスは

THOGE = SUBCLASS OF NIL

のように NIL からの派生として作るようです。

クラスに属するメソッド (関数/手続き) の実装は implementation セクションに "methods of クラス型名; ~ end;" のブロックを作り、グループ化して記述します。

Sample.pas
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 の構文図です。
image.png
※ 流石ジョブスというか、ラスキンの努力が (半分くらい) 台無しなポスターに仕上がっています (w

古い Mac OS や Lisa Office System (Lisa OS) 等はその大部分が Pascal で書かれていましたし、Adobe のフォトショップも初期のバージョンは Pascal で書かれていました。

See also:

参考文献

image.png

タイトル 著者 ISBN-10
(Amazon)
出版年
オブジェクト指向プログラミング〈下巻〉 カート・J.シュマッカー (著)
大谷 和利 (訳)
4890520929 1990/9/15

Clascal は断片的な情報しかなく、エミュレータ等で実行して検証する事もほぼ不可能に近いです。日本語で書かれた Clascal の情報なんていうのはこの書籍くらいにしか存在しないのではないでしょうか?

索引

[ ← 1. オブジェクト指向拡張とレコード ] [ ↑ 目次へ ] [ → 3. Macintosh 用 Pascal のオブジェクト指向拡張 ]

  1. Apple][ および Apple III Pascal のスーパーセット。Lisa Workshop の最初期から Lisa Pascal はオブジェクト指向拡張されているので、"Lisa Pascal (製品) = Clascal (言語)" という認識でいいように思う。

  2. 親クラスのない (それ以上上位に遡れない) クラスの事。

  3. 概要は「用語集 (標準 Pascal 範囲内での Delphi 入門)」を参照。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?