8
3

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 5

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

Last updated at Posted at 2019-12-04

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
image.png
Apple の Object Pascal には名前が付いておらず、後になって Mac Pascal という名前が付けられたようですが一般的ではないようです。Lisa の Object Pascal も Macintosh の Object Pascal も言語仕様は同じものなので、ひっくるめて Apple Object Pascal と記述するのが正しい気がします。
MPW.gif
また、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:

3.1. Apple Object Pascal のクラス

Apple Object Pascal のオブジェクト指向拡張はオブジェクト型によって行われています。Object Pascal におけるクラスとはオブジェクト型の事なのですが、Apple は クラス という用語を使っていません。

オブジェクト型は型宣言部 (type) にて "型名 = objectend;" として定義します。

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() で行います。

ClassTest.p
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 には最低限のメソッドしか実装されていません。

ObjIntf.p
{
  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 と呼ばれていました。
image.png
最終的に無償公開されました。現在でも DL 可能です。

See also:

3.4.2. Metrowerks CodeWarrior Pascal

Metroweaks CodeWarrior は 1998 年の Pro 4 まで Pascal コンパイラが付属しました。Windows 版もありました。
image.png

See also:

参考文献

image.png

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

『オブジェクト指向プログラミング〈上巻〉』 には MPW Pascal の断片的な情報が載っています。入手は比較的容易ですが、全容を知るには情報が足りません。

MPW は開発者登録しないと購入できなかった 4 上に高額だったらしく 5、MPW Pascal の資料は殆ど残っていません。インターネット普及期には既にディスコンだったため 6、ウェブサイトにも殆ど情報がありません。

同様の理由で C+- (typo ではない) の言語仕様を調べるのも困難です 7
image.png

タイトル 著者 ISBN-10
(Amazon)
出版年
Macintosh Programmer’s Workshop
Object Pascal : 日本語版
Apple Computer (著)
アップルコンピュータジャパン (訳)
4756109519 1991/12/1

本書は、リファレンスマニュアルであり規格書の類です。よく言えば必要最低限のページ数で簡潔にまとめられています。とにもかくにも Object Pascal の源流を知るには貴重な資料です。

但し、入手難易度がかなり高いです。大学や図書館の蔵書も検索してみましたが、20件しかヒットしませんでした。表紙の画像もこの記事に貼られたものが最初ではないでしょうか?

See also:

索引

[ ← 2. Clascal のオブジェクト指向拡張 ] [ ↑ 目次へ ] [ → 4. Turbo Pascal のオブジェクト指向拡張 ]

  1. "Object Pascal Report", Structued Programming (Structured Language World) 9, 3 (1985), pp. 10-15.

  2. "Object Pascal Report", Apple Technical Report No.1 (1985)

  3. 当初は Object Pascal とアセンブラのみで、後に C と C++ が追加された。

  4. APDA (Apple Programmer's and Developer's Association) の事。参考文献に "APDA" の文字があったら、その書籍は入手困難です。

  5. 後に無償公開されました。

  6. Power Macintosh の時代になると MPW での Pascal サポートは打ち切られてしまいます。具体的には 1995/11 に打ち切られています。

  7. "Minimal C++ Report (C+- Specification)", Apple Technical Report No.2 (1985?)

8
3
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
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?