5. (標準) Pascal へのオブジェクト指向拡張
1993 年の (標準)Pascal へのオブジェクト指向拡張はドラフトのまま放置されました。
余談ですが、このドラフトには 『J&W』改訂者のジム・F.マイナー氏や、Apple のカート・J.シュマッカー氏、Borland のデビッド・インターシモーヌ氏が参加しています。
5.1. ドラフトのオブジェクト指向拡張案
クラス型は型宣言部 (type) にて "型名 = class (親クラス) ~ end;" として定義します。
3.1.1. クラス型の定義
次のようにしてクラスを定義できるようです。
type
TCls = class (root) { root を継承したクラス型 TCls の定義 }
FValue: Integer;
end;
ドラフトでのクラスをざっと確認しましたが、次のような特徴があるようです。
- ルートクラスは Root です。
- 多重継承可能です。
- クラスには 3 つの種類があります。
-
具象クラス (Concrete Class):
具象クラスは、オブジェクトを作成できる唯一のクラスです (class)。 -
抽象クラス (Abstract Class):
抽象クラスは、クラス階層のプレースホルダーです (abstract class)。 -
プロパティクラス (Property Class):
プロパティクラスは、特性・属性・またはプロパティを提供します (property class)。
-
具象クラス (Concrete Class):
- 抽象メソッド (abstract) があります。
- オーバーライドメソッド (override) があります。
- コンストラクタ (
CONSTRUCTOR Create;
) があります。 - デストラクタ (
DESTRUCTOR Destroy;
) があります。 - (オーバーライドメソッドでよく使う) INHERITED 文があります。
3.1.1. クラス型の作成と破棄
クラスの作成と破棄は次のようにして行うようです。
type
TCls = class(root)
...
end;
var
Cls: TCls;
begin
Cls := TCls.Create;
...
Cls.Destroy;
end;
コンストラクタとデストラクタですね。デストラクタは明示的に呼び出すようになっているようです。次のような代替案も示されてはいますが、具体的な事は書かれていません。
- オブジェクトを破棄するための定義済み手続き (Free メソッドや Dispose のような) を呼んだときにデストラクタが呼び出される
- オブジェクトが不要になると暗黙的にデストラクタが呼び出される (ARC のような)
ドラフトの実装は存在しないため、実際にどのような動作をするのかを試す事はできませんが、なんとなくやりたい事は解る気がします。
索引
[ ← <4> Turbo Pascal のオブジェクト指向拡張 ] [ ↑ 目次へ ] [ → 6. Dephi のオブジェクト指向拡張 ]