タイプとクラス

1.タイプとクラス。 オブジェクト 値。



Lada言語のタイプとクラスの定義は、キーワードのみが異なります。 タイプとクラスの両方にプロパティ、メソッド、イベントを設定でき、クラスとタイプの両方に対して操作(関係または述部)を定義することもできます。 型またはクラスを作成する対象を決定することさえ困難な場合があります。



例1. Timeクラスを作成します。

授業時間

{

薄暗い時間:整数

薄暗い分:整数

薄暗い秒:整数

}

例2. Timeタイプの作成。

タイプタイム

{

薄暗い時間:整数

薄暗い分:整数

薄暗い秒:整数

}

型とクラスの両方で、Dim演算子はプロパティを定義します。 そして、クラスと同様に、タイプ(またはクラス)TimeのHourプロパティと言うことができます。 しかし、それらの間には、型が値オブジェクトを作成し、クラスが参照可能ないわゆる参照オブジェクトを作成し、各オブジェクトが個性を持つという点で大きな違いがあります。 型として定義されたデータの場合、個性は重要ではありませんが、クラスによって作成されたオブジェクトの場合、これは基本的なポイントです。 クラス(たとえば、クライアント)によって作成されたオブジェクトは、独自の性格を持ち、単一のコピーで存在できます(そして、1つの実際のクライアントにのみ対応します)。 Clientオブジェクトにアクセスするオブジェクトは、参照またはポインターによってこれを行います。 したがって、Clientオブジェクトにアクセスするすべてのオブジェクトは、1つのオブジェクトを処理していることを確認できます。 Clientオブジェクトに加えられた変更は、このオブジェクトのすべてのユーザーが利用できます。

クラスによって作成された2つのオブジェクトを比較する場合、参照またはポインターによってオブジェクト自体を識別する必要があります。 原則として、参照オブジェクトのコピーは作成されません。 必要な場合を除き、ネットワーク上での複製またはアーカイブ。 ただし、いずれにしても、コピーが作成された場合は、更新を同期する必要があります。 それどころか、実際には異なるオブジェクトであり、メモリの異なる領域にある場合でも、2つの値オブジェクトの比較は、これらのオブジェクトのプロパティを比較することによって行われます。

値オブジェクトの値は、まさに意味そのものにあります。 同時に、同じ時間値を持つ何百ものオブジェクトが存在する可能性があり、それらはすべて交換可能です。 値を変更できますが、新しいオブジェクトになります。 反対に、参照オブジェクトのプロパティの1つを変更(たとえば、Clientオブジェクトの位置や給与を変更)しても、新しい(別の意味での)オブジェクトは作成されません。 プロパティを変更しますが、それでも同じオブジェクトです。

Dim演算子を型に適用すると、値オブジェクトが作成されます(オブジェクトの作成に必要なすべての操作を実行します)。 Dim演算子をクラスに適用すると、クラスオブジェクトへの参照が作成され、オブジェクト自体を作成する他のアクションは実行されません。 ただし、オブジェクトを参照するには、オブジェクトも作成する必要があります。 オブジェクトのタイプとクラスは色で区別できます。 これを変更することにより、クラスのDim演算子を使用してオブジェクトを作成でき、逆の場合も値オブジェクトへのリンクを作成できます。 これも起こります。





2.平等の操作関係。 割り当て。



1つのタイプの質問を引き起こさない場合の値の比較。 クラスによって生成されたオブジェクトとはまったく異なる状況。 ここでは、比較についてではなく、オブジェクトの識別について説明しています。この識別は、一般的な場合、すべてまたはプロパティのグループの値の等価性ではなく、オブジェクトの特定の内部コンテンツによって決定されます。これは、オブジェクト自体だけでなく、オブジェクトに対する態度とその重要性にも依存します問題のコンテキストで。 哲学的な詳細を省略して、この概念の実装は、オブジェクトへの参照を確認することです(オブジェクト識別)。

したがって、等値関係の操作は、値と参照オブジェクトに対して別々に実行されます。 値の場合、これはオブジェクトのプロパティの同等性をチェックし、参照オブジェクトの場合、これはオブジェクトの識別です。

同じ違いにより、割り当て操作の内容が異なります。 したがって、オブジェクトを割り当てたら、値をコピーします。 つまり 等号の右側の識別子を識別する値は、等号の左側の識別子を識別する値に完全にコピーされます。 参照オブジェクトを割り当てる操作を実行するときの完全に異なる画像は、オブジェクトではなく、リンクをコピーします。 したがって、クラスオブジェクトのプロパティの変更は、このオブジェクトのすべてのユーザーが利用できます。 タイプオブジェクトの値を変更しても、変更可能なオブジェクトにのみ影響します。

この違いの別の結果は、デフォルトでプロシージャに渡されるパラメータに現れます。 デフォルト値の場合は値が渡され、参照オブジェクトの場合はオブジェクト参照がパラメーターとして渡されます。 色を操作することにより、参照オブジェクトのコピーまたは値オブジェクトへの参照をプロシージャに直接渡すことができます。



3.字句解析の値。



タイプオブジェクトには値があるため、それらはテキスト形式の10進数、バイナリ、ドットを通る数字、プレフィックス、サフィックスなどの値で表されます。 ただし、字句解析の結果として語彙素ではなく値オブジェクトが取得されるため、これは明らかに字句解析に影響します。 新しい型を作成すると、新しい値が作成され、その式はテキスト形式で対応する型の値と値として分析する必要があります。 はい、そして間違いなく。

型定義を使用して言語の語彙を決定することは困難で責任がありますが、プロパティの継承では字句解析のルールを継承することに注意してください。 例2のデフォルトの区切り文字として「Time」タイプの定義を持つ「。」ドット文字を使用すると、次のTimeタイプの値を作成できます。



例3. Time型の値を割り当てます。



Dim t:時間

T = 2.30.45



そうするのはそれほど簡単ではないことは明らかであり、同じ数の区切り文字を持つ値のタイプを区別する必要があり、ここでは接尾辞(または接頭辞)を追加するだけです。 さらに、翻訳者は新しいタイプの値を決定する一意性を決定できます。

字句解析中に値を決定する(値オブジェクトを作成する)必要性(および入力中に発生します)は、入力した時点からオブジェクトとしての値が実際にテキストに存在するという事実に起因します。 また、ドキュメントに付随して、これらの値は重要な役割を果たすことができます。 したがって、たとえば、承認日、完了日、金額、コメントなど。 入力されたテキストだけでなく、ドキュメントの本質的な特性。その分析は、ドキュメントの作成中だけでなく、その移動、アーカイブ、および一般的にいつでも必要になる場合があります。 Ladaシステムでは、テキスト、プログラム、スキーム、マップ、プランの編集はユニバーサル環境で行われることを思い出してください(言語が変更されても、環境は変わりません)。



例4.接尾辞Tを持つWeightタイプの作成



タイプ重量

{

薄暗いトン:整数

薄暗いキログラム:整数

薄暗いグラム:整数

T

}



例5. 253キログラム、26グラムのWeightタイプの値を割り当てます。



薄暗いW:重量= 0.253.26T



問題は1つだけです。 型定義は字句解析に影響するため、ユーザー定義型は、翻訳前および字句解析前であっても空間で定義する必要があります。

字句解析の重要なポイントは、ポイントの前後の値の存在です。 通常、ポイントの前に値がない場合、それは0と見なされます。同様に、最後のポイントの後の値がないことは、対応するプロパティの値が0であることを示します。ただし、整数型から継承する場合、整数字句解析では数字がありません。 ここでデフォルトで何かを受け入れることができます。

タイプWeightの定義は次のようになります。



例6.接尾辞Tを持つWeightタイプを作成し、デフォルト値を定義します。



タイプ重量

{

薄暗いトン:整数= 0

薄暗いキログラム:整数= 0

薄暗いグラム:整数= 0

T

}



ただし、同じ型に対して複数の構文を定義できます。 これは、属性Extract = 1で構文バリアントをグループ化することにより行われます。

例6.異なる構文でWeightタイプを作成します。



タイプ重量

{抽出= 1

{Dim Ton:整数= 0

薄暗いキログラム:整数= 0

薄暗いグラム:整数= 0

T

}

{

薄暗いキログラム:整数= 0

薄暗いグラム:整数= 0

kg

}

{

薄暗いグラム:整数= 0

gr

}



}



字句解析では、次の等しい値がタイプWeightとして認識されます。



例7. Weightタイプの等しい値。



0.2.0T、2.0kg、.2.0T、.2.T、2.kg、2000g



最後の値も2キログラムですが、新しいタイプとの操作の実行(比較を含む)を決定する必要があります。



4.ユニット。



型定義と同様に、プロパティを参照オブジェクトに割り当てて、クラスのプロパティ値のデフォルトのセミコロンがセミコロン「;」であることを合意として受け入れることもできます。 このような構成を値ではなく、集約(Aggregate)と呼びます。

集計の文法は値の定義と類似していますが、クラスの定義は語彙分析に影響しません。 次の翻訳段階で、値(および場合によってはオブジェクト)と型の一致の分析が行われます。 まず、参照オブジェクトを使用した一部のアクションの実行は、すでに作成されたドキュメントの問題であるためです。 実際、参照オブジェクトの作成でさえ、タイピング中には発生しませんが、少なくとも翻訳の結果としてではなく、プログラムの実行中に最大として発生します。 第二に、集合体の要素としては、値だけでなく、集合体の実行までクラスが未定義であり、一般にこのオブジェクトは実行時まで作成できないオブジェクトもあります。



例6. Locationクラスの定義。



クラスの場所

{

Dim Top:整数

薄暗い左:整数

}



例7. TopプロパティとLeftプロパティの値を集計によってLocationクラスのオブジェクトに割り当てます。



薄暗いL:場所= 2; 2 '割り当てによる実装。



5.アイデンティティ。 定義済みの比較。



参照オブジェクトと値の両方について、オブジェクトの同等性ではなく、一部のプロパティまたはプロパティのグループの同等性をチェックする必要があります。 たとえば、オブジェクトの色、位置、またはサイズ(クラスが異なる場合があります)。 この操作はID(記号「〜」)と呼ばれます。 この操作では、IDがチェックされるプロパティのリストを括弧内に示すだけで十分です。 たとえば、クライアントが同じオブジェクトを使用して、姓、名、愛用者によってIDを判別できる場合があります。 一般に、2つの異なるオブジェクトは、成長、給与、およびまれに、名、姓、および愛顧によって同一である場合があります。 または、2つのオブジェクトを色または位置で比較できます。



例3. Hourプロパティを使用して、Time型の値のIDを確認します。

薄暗いT1、T2:時間

...

T1〜T2(時間)の場合




All Articles