用語

用語(英)

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と関係しますが、同じ概念ではありません。

関連語

  • 分類子

  • クラス

  • インターフェース

  • トレイト

  • データ型

  • オブジェクト関数パラダイム

  • Cozy Modeling Language

参照