Clascal と Object Pascal について私が学んだその他の注目すべき点は次のとおりです。オブジェクトの割り当てと初期化の組み合わせからそれらの分離まで、まったく同じ進化を遂げました それは Aim-C が 10 年後にやった!
1983 年初めにクラスカルでは、コースは
そのフォームを返す特性としての)新しい方法論、ゼロまたは余分なパラメーターを取り、SELF に代入することによってそのフォームのオケージョンを返す—おなじみですか? これは、「慣習的な」方法論 (動的ディスパッチなし の 1 つ) として繰り返し実装されるようになったため、不適切な方法に名前を付けることができませんでした。 それについて引用された完璧な点は、慣習的な Pascal 組み込みの New()
Free メソッドも組み込まれています。 そして、オーバーライドされた各 Free内部メソッドの採用を未然に防ぐことです。クラスは、
OVERRIDE を有効にするために選択することもできます。 ファイル ハンドルやオブジェクト ケースの形式など、購入したすべてのリソースを作成するための方法論には、その後に SUPERSELF.Free;を含める必要がありました。INTERFACE TYPE Object=SUBCLASS OF NIL FUNCTION New: Object; 標準; 手順無料。 デフォルト; 終わり; 特定の人物=SUBCLASS OF オブジェクトの識別: 文字列; FUNCTION New(識別: 文字列): 特定の人; 標準; 手順無料。 オーバーライド; 終わり; VAR gHeap: ヒープ; オブジェクトの実装方法; FUNCTION New{: Object} BEGIN SELF :=Object(HAllocate(gHeap, Size(THISCLASS))); 終わり; PROCEDURE Free BEGIN HFree(アドレス(SELF)); 終わり; 終わり; 特定の人物の方法; FUNCTION New{(theName: String): 特定の人;} BEGIN SELF :=特定の人(HAllocate(gHeap, Size(THISCLASS))); IF SELF <> NIL THEN 識別 :=theName.Clone; 終わり; PROCEDURE Free BEGIN identify.Free; SUPERSELF.Free; 終わり; 終わり;1984 年半ばまでに、クラスカルはこれを
CREATE
方法論に変更しました。 ABSTRACT は過剰なクラス内にあります。 quiet がオブジェクト ケースを形成するために通常の Pascal 組み込み New()を使用しないことを示します。 または、すでに初期化されている可能性のあるオブジェクトを使用して、サブクラスが初期化のためにそのスーパークラスに名前を付けるのが簡単になるようにします。動的にディスパッチされる方法論。 また、割り当てを形成するヒープ ゾーンのワールドワイド変数を参照するのではなく、ヒープ ゾーンを使用して、VM システム専用の参照の局所性を提供しますクラス名の前に
T.INTERFACE TYPE TObject=NIL FUNCTION のサブクラス CREATE(object: TObject; heap: THEap): TObject; 概要; 手順無料。 デフォルト; 終わり; TPerson=TObject のサブクラスを識別する: TString; FUNCTION CREATE(theName: TString; オブジェクト: TObject; ヒープ: THeap): TPerson; 標準; 手順無料。 オーバーライド; 終わり; TObject の実装方法。 PROCEDURE Free BEGIN FreeObject(SELF); 終わり; 終わり; TPerson の方法; FUNCTION CREATE{(オブジェクト: TObject; ヒープ: THeap: TObject): TPerson;} BEGIN IF オブジェクト=NIL オブジェクト :=NewObject(ヒープ, THISCLASS); SELF :=TPerson(オブジェクト); WITH SELF DO 識別:=theName.Clone(ヒープ); 終わり; PROCEDURE Free BEGIN identify.Free; SUPERSELF.Free; 終わり; 終わり;それは、Aim-C 開発者にとって非常になじみのある強力なエクストラを仲介し始めていますよね?
言語である Object Pascal は、Smalltalk の用語をかなり採用し、「コース」を「オブジェクト」に改名し、
OBJECT
を導入するようになりました。クラスの概要を説明するためのキーワードが古くなっています。 また、SUPERSELF.を INHERITEDに変更しました。 dot!—再び、OOP に慣れていない開発者は「スーパークラス」が紛らわしいことに気付きましたObject Pascal も、長い最終段階で、通常の Pascal 組み込み
を採用しました。 )New() は、オブジェクトの割り当てを形成します (対応するFree()
と一緒に) 導入するよりも直接的に割り当てを解除しますフォームシステムからコンパイラによって意図も推論されるという理論的根拠のための、それに対する別の特性。 また、メソッドを追加するために METHODS OF ファブリケーションを使用するための累積を排除し、そのビルドでは、方法論にクラス ID と長さを適切なプレフィックスとして付けます。 .Clascal から Object Pascal への最終的な主な切り替えは、
New()がオブジェクト割り当てのために荒廃した状態で、CREATE
メソッドは、initialize 割り当て後の物品。 また、値を返す選択に優先してプロシージャが作成され、通常の Pascal 組み込み New()が老朽化しているという理論的根拠のために、それらはもはや勝ちませんすでに割り当てられている可能性のあるオブジェクトも、割り当てを形成するヒープゾーンを獲得することもありません。 クラス TFooの場合、初期化方法には IFooを作成するという規則があります。ゼロと区別しやすいように
fをフィールド名の前に付けて、他のスタイルの切り替えも行われました。 -引数の特徴的なメソッドをのぞき見.IMPLEMENTATION解説に優先して直接含める部分。これは次のようになります:
TYPE TObject=OBJECT PROCEDURE IObject; 概要; 手順無料。 デフォルト; 終わり; TPerson=OBJECT(TObject) fName: TString; PROCEDURE IPerson(theName: TString); 標準; 手順無料。 オーバーライド; 終わり; 実装手順 TObject.Free BEGIN Free(SELF); 終わり; 手順 TPerson.IPerson(theName: TString) BEGIN fName :=theName.Clone(); 終わり; 手順 TPerson.Free BEGIN fName.Free; 継承無料; 終わり;基本的に私が読んだドキュメンテーションに基づいて、最も簡単な原因の初期化メソッドが「常に
Initialize
という名前が付けられているのは、作成した言語が OVERRIDEを強化しなかったためです。方法論の特別なパラメータ リストの採用。