型
|
用語 |
型 |
|
用語(英) |
Type |
|
別名 |
- |
識別情報
-
Term ID:
src/main/doxsite/glossary/object-foundation/type.dox -
English label: Type
-
Japanese label: 型
-
Category: Object Foundation
-
Status: normative
-
Definition authority: SimpleModeling BoK
定義
型(Type)とは、値がどの文脈で利用でき、どの操作、変換、結果、作用、合成がその値に対して成立するかを静的に規定する、SimpleModelingのオブジェクト関数パラダイム(Object-Functional Paradigm)における意味契約です。
UML
UML 2.5.1のTypeは、TypedElementが表現できる値を制約する抽象的なModelElementです。ClassifierはTypeの特殊化であり、Class、Interface、DataTypeはClassifierの特殊化です。したがってUMLではClassやInterface自身がTypeであり、Classが別のTypeを外側から実現するという関係ではありません。SimpleModelingはこの関係を維持しつつ、正規用語「型」の中心をObject-Functionalな意味契約に置きます。
一般的な用法
プログラミング言語では、class宣言によって導入される型だけでなく、関数型、直和型、交差型、型別名、適用型などもTypeに含まれます。したがってTypeとClassを同義語として扱いません。
オブジェクト関数パラダイム
Object Modelでは、抽象的なTypeを前面に出すより、Class、Interface、Trait、Data TypeによってObjectの構造、契約、再利用可能な部分構造、値の意味を記述します。関数側では、値、関数、結果、作用、合成可能性をTypeで記述します。SimpleModelingのTypeは両者を接続し、Object ModelをScalaなどの型システムへ実現するための共通契約になります。
CML
CML(Cozy Modeling Language)は、Entity、Value、Trait、Powertype、StateMachineなどのObject種別と、そのAttribute、Association、Operation、Constraintを形式化します。これらの記述は実現時にTypeとして利用されますが、CMLのModel Elementと実装言語のTypeは同一概念でも一対一対応でもありません。
Scala
Scalaではclass、trait、enum、opaque typeなどの宣言がTypeを導入し、さらに関数型、union type、intersection type、applied type、type lambdaなどを表現できます。高kindのType ConstructorとKindはScala接続では重要ですが、Object Model入門では発展項目として扱います。
simplemodeling-lib
simplemodeling-libはModel全体を代表する単一の Type 基底を定義しません。意味に応じてScalaのabstract class、class、trait、case class、enum、opaque type、関数型、Schema Data Type、Runtime Data Typeなどへ責務を分けます。これはTypeの実現方針であり、Typeの正規定義そのものではありません。
公開成果物での用法
日本語の記事と動画では初出を「型(Type)」とします。Object Modelの説明ではClass、Interface、Trait、Data Typeを具体語として使い、TypeはObject-Functionalな契約またはScala接続を説明するときに使います。ClassifierはUMLとの関係を厳密に説明する場合だけ補助的に使います。
境界
-
TypeはClass、Interface、Traitのいずれとも同義ではありません。
-
CMLのModel ElementとScala Typeは同一概念でも一対一対応でもありません。
-
Type ConstructorとKindはTypeと関係しますが、同じ概念ではありません。