3. Macintosh 用 Pascal のオブジェクト指向拡張
Apple の Object Pascal の源流はラリー・テスラー氏が 1985 年に書いた "Object Pascal Report"1 2 です。Object Pascal は Apple のテスラーのチームと Pascal の生みの親であるニクラウス・ヴィルト氏が開発したものです。Clascal との関係はハッキリしませんが、Clascal を叩き台として Object Pascal へとブラッシュアップしたような印象を受けます。
当初、Macintosh にはセルフ開発用環境が用意されておらず、Lisa を使ったクロスコンパイルが行われていました。クロスコンパイル用環境 Lisa Workshop で使われたのが (Lisa) Object Pascal で、1986 年の 3 月にリリースされました。
その後、セルフ開発用環境である Macintosh Programmer's Workshop (MPW) が 1986 年の 10 月にリリースされました。MPW 用の言語の一つが (Macintosh) Object Pascal です 3。
Apple の Object Pascal には名前が付いておらず、後になって Mac Pascal という名前が付けられたようですが一般的ではないようです。Lisa の Object Pascal も Macintosh の Object Pascal も言語仕様は同じものなので、ひっくるめて Apple Object Pascal
と記述するのが正しい気がします。
また、MPW Pascal にはオブジェクト指向部分以外の拡張もあり、ダン・アレン氏は次のような言葉を残しています。
MPW Pascal overcomes most of Brian Kernighan's objections to Pascal included in his famous memo "Why Pascal Is Not My Favorite Programming Language."
See also:
- Object Pascal (Wikipedia)
- Larry Tesler 氏のサイト
- Macintosh Programmer's Workshop (Wikipedia: En)
- The Macintosh Programmer's Workshop (Dr.Dobb's)
- MacApp (Wikipedia: En)
- Macintosh Programmer's Workshop (MPW) Object Pascal の簡単な使い方 (Qiita)
3.1. Apple Object Pascal のクラス
Apple Object Pascal のオブジェクト指向拡張はオブジェクト型によって行われています。Object Pascal におけるクラスとはオブジェクト型の事なのですが、Apple は クラス
という用語を使っていません。
オブジェクト型は型宣言部 (type) にて "型名 = object ~ end;" として定義します。
3.1.1. オブジェクト型の定義
以下のコードでルートクラスを作れます。
type
TClass = object { オブジェクト型 TClass の定義 }
FID: Integer;
end;
普通のルートクラスは ObjIntf.p で定義されている TObject です。MacApp アプリケーションを作る場合には通常 TApplication を継承します。多重継承は行えません。
uses
ObjIntf;
type
TClass = Object (TObject) { TObject を継承したオブジェクト型 TClass の定義 }
FID: Integer;
end;
Apple Object Pascal のオブジェクト型にはコンストラクタやデストラクタがなく、プロパティもありません。
- 多重継承はできません。
- 可視性指定子はありません。
- 自クラスを表すにはキーワード
SELF
を使います。 - Clascal にあった抽象メソッドはありません。
3.1.2. オブジェクト型の作成と破棄
生成と破棄は New() と Dispose() で行います。
program ClassTest;
type
TClass = object
FID: Integer;
FFirstName: string;
FLastName: string;
function GetName: string;
end; { TClass }
TClassEx = object(TClass)
end; { TClassEx }
function TClass.GetName: string;
begin
GetName := Concat(FFirstName, FLastName);
end;
var
ClassEx: TClassEx;
begin
New(ClassEx);
ClassEx.FID := 100;
ClassEx.FFirstName := 'Hello,';
ClassEx.FLastName := 'world.';
writeln(ClassEx.FID );
writeln(ClassEx.GetName );
Dispose(ClassEx);
end.
TObject から派生していれば、Dispose() の代わりに Free() メソッドを呼ぶ事もできます。
uses
ObjIntf;
type
TClass = Object (TObject)
...
procedure Free; override;
end; { TClass }
...
procedure TClass.Free;
begin
inherited Free;
end;
ObjIntf.p の TObject には最低限のメソッドしか実装されていません。
{
File: ObjIntf.p
Pascal Interface to the Macintosh Libraries
Copyright Apple Computer, Inc. 1986 - 1988
All rights reserved.
}
UNIT ObjIntf;
INTERFACE
TYPE
TObject = OBJECT
FUNCTION ShallowClone: TObject;
{Lowest level method for copying an object; should not be overridden
except in very unusual cases. Simply calls HandToHand to copy
the object data.}
FUNCTION Clone: TObject;
{Defaults to calling ShallowClone; can be overridden to copy objects
refered to by fields.}
PROCEDURE ShallowFree;
{Lowest level method for freeing an object; should not be overridden
except in very unusual cases. Simply calls DisposHandle to
free the object data.}
PROCEDURE Free;
{Defaults to calling ShallowFree; can be overridden to free objects
refered to by fields.}
END;
END.
See also:
3.3. 命名規則
Apple の Object Pascal のコードはなんだか読みやすく、初めて読んでもさほど違和感がありません。
- クラスは型 (Type) を拡張して作られているので、名前を T で始める。
- インスタンス変数はオブジェクトのフィールドでもあるので名前を f で始める。
- 名前の境界はアンダースコア(
_
)で区切らず大文字で示す。
これらは Apple 社が推奨した命名規則です。Borland 系のオブジェクト指向 Pascal もこれを踏襲しています。
3.4. その他の Macintosh 用 Object Pascal
オブジェクト指向拡張されている Pascal は他に Symantec の THINK Pascal や Metrowerks の CodeWarrior Pascal があります。
3.4.1. Symantec THINK Pascal
Symantec THINK Pascal は WPM Pascal と高い互換性を持っています。初期は LightSpeed Pascal と呼ばれていました。
最終的に無償公開されました。現在でも DL 可能です。
See also:
- Ingemar's guide to Think Pascal 4.5d4 (think-pascal.org)
- Think Class Library(TCL) (Wikipedia: En)
- (0.1.1.1.) Propagated Uses (Uses Propagation / Unit Propagation) - <0> はじめに (標準 Pascal 範囲内での Delphi 入門) (Qiita)
3.4.2. Metrowerks CodeWarrior Pascal
Metroweaks CodeWarrior は 1998 年の Pro 4 まで Pascal コンパイラが付属しました。Windows 版もありました。
See also:
- CodeWarrior (Wikipedia)
- CodeWarrior (Wikipedia:En)
- PowerPlant (Wikipedia:En)
- メトロワークス、『CodeWarrior Professional』の新バージョンと『Ruputer』用IDEを発表 (ASCII.jp)
参考文献
タイトル | 著者 | ISBN-10 (Amazon) |
出版年 |
---|---|---|---|
オブジェクト指向プログラミング〈上巻〉 | カート・J.シュマッカー (著) 大谷 和利 (訳) |
4890520910 | 1989/12/15 |
『オブジェクト指向プログラミング〈上巻〉』 には MPW Pascal の断片的な情報が載っています。入手は比較的容易ですが、全容を知るには情報が足りません。
MPW は開発者登録しないと購入できなかった 4 上に高額だったらしく 5、MPW Pascal の資料は殆ど残っていません。インターネット普及期には既にディスコンだったため 6、ウェブサイトにも殆ど情報がありません。
同様の理由で C+- (typo ではない) の言語仕様を調べるのも困難です 7。
タイトル | 著者 | ISBN-10 (Amazon) |
出版年 |
---|---|---|---|
Macintosh Programmer’s Workshop Object Pascal : 日本語版 |
Apple Computer (著) アップルコンピュータジャパン (訳) |
4756109519 | 1991/12/1 |
本書は、リファレンスマニュアルであり規格書の類です。よく言えば必要最低限のページ数で簡潔にまとめられています。とにもかくにも Object Pascal の源流を知るには貴重な資料です。
但し、入手難易度がかなり高いです。大学や図書館の蔵書も検索してみましたが、20件しかヒットしませんでした。表紙の画像もこの記事に貼られたものが最初ではないでしょうか?
See also:
- A Brief History of Apple Computer's Work with the Pascal Language (applefritter.com)
- 『Macintosh Programmer’s Workshop Object Pascal 日本語版』を読んでみる (Qiita)
索引
[ ← 2. Clascal のオブジェクト指向拡張 ] [ ↑ 目次へ ] [ → 4. Turbo Pascal のオブジェクト指向拡張 ]
-
"Object Pascal Report", Structued Programming (Structured Language World) 9, 3 (1985), pp. 10-15. ↩
-
"Object Pascal Report", Apple Technical Report No.1 (1985) ↩
-
当初は Object Pascal とアセンブラのみで、後に C と C++ が追加された。 ↩
-
APDA (Apple Programmer's and Developer's Association) の事。参考文献に "APDA" の文字があったら、その書籍は入手困難です。 ↩
-
後に無償公開されました。 ↩
-
Power Macintosh の時代になると MPW での Pascal サポートは打ち切られてしまいます。具体的には 1995/11 に打ち切られています。 ↩
-
"Minimal C++ Report (C+- Specification)", Apple Technical Report No.2 (1985?) ↩