![]() ![]() |
Eiffel は、可読性と信頼性のために、強く型付けされています。あらゆる実体は、特定の型で宣言され、参照型または拡張型のいずれかになります。
どんな型 T も、 T の実例へ適用する操作を定義しているクラスに基きます。型についての二つのカテゴリー間の違いは、型 T で宣言された実体 x の意味論に影響を与えます。すなわち、大部分に共通な場合である参照型について、 x のための可能な値は、オブジェクトへの参照です。そして、拡張型について、その値はオブジェクトです。両方の場合に、型規則は、そのオブジェクトが T の実例になることを保証します。
ACCOUNT のような拡張されていないクラスは、参照型をもたらします。結果として、先のクライアントの例における acc のような、型 ACCOUNT の実体(前に説明した acc の宣言がある図を見てください)は、型 ACCOUNT のオブジェクトへの、可能な実行時の参照を明示しています。
対照的に、ACCOUNT を拡張型で宣言された実体
acc の値は、下図で示したようなオブジェクトであり、参照を伴いません。前図との違いは、単に、
acc の値がいまや ACCOUNT オブジェクトであり、そのようなオブジェクトへの参照ではない、ということです。この場合に必要とされる生成命令はありません(図は、
ACCOUNT オブジェクトの owner 項目への PERSON オブジェクト -- それ自体、参照
-- がアタッチされている、ということを示していません)。
ライブラリのクラスに基づく、拡張型の重要なグループは、基本的な型である、INTEGER 、REAL 、DOUBLE 、 CHARACTER 、そして BOOLEAN を含んでいます。明らかに、型 INTEGER で定義された実体の値は、整数であり、整数の値を包含するオブジェクトへの参照ではありません。これらの型に関する操作は、"+" や "<" といった、前置演算子と中置演算子によって定義されます。
これらの利便性の結果として、型システムは、統一され、整合性を保ちます。すなわち、基本型を含むすべての型は、参照型または拡張型のいずれかのクラスから定義されます。
基本型の場合には、効率性の明白な理由のために、ISE Eiffel のコンパイル機構は、標準的な算術演算と論理演算を、ルーチン呼出しを通じてではなく、対応する機械語の演算を通じて直接実装します。しかし、このことは、コンパイラの最適化だけの問題であり、それは、型組織<type edifice>の概念的な一様性<homogeneity>を妨げるものではありません。
![]()
URL
for this page: http://www.eiffel.com/doc/manuals/language/intro/types.maker.html.
Copyright 1994-1998 Interactive Software Engineering Inc. All rights reserved.