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 5 years have passed since last update.

DelphiAdvent Calendar 2019

Day 9

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

Last updated at Posted at 2019-12-08

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)。
  • 抽象メソッド (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 のオブジェクト指向拡張 ]

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?