クラス
|
用語 |
クラス |
|
用語(英) |
Class |
|
別名 |
- |
識別情報
-
Term ID:
src/main/doxsite/glossary/object-foundation/class.dox -
English label: Class
-
Japanese label: クラス
-
Category: Object Foundation
-
Status: normative
-
Definition authority: SimpleModeling BoK
定義
クラス(Class)とは、Objectの集合を分類し、それらのObjectが持つ構造、状態、振る舞い、責務を形式的に記述する、Object Modelの主要なModel Elementです。ClassはObject側の名前付きTypeであり、そのTypeのモデル上の実現を記述します。
UML
UML 2.5.1では、ClassはObjectの集合を分類し、その構造と振る舞いを特徴付けるFeatureを定めるClassifierです。ClassはClassifierの特殊化であり、ClassifierはTypeの特殊化なので、Class自身がTypeです。SimpleModelingでいう「モデル上の実現」は説明上の役割を表し、UMLのRealization関係を意味しません。
オブジェクト関数パラダイム
ClassはObject側の概念的な幹、固有の状態、Invariant、Operation、Lifecycleを表します。複数のClassへ横断的に合成する部分構造やCapabilityはTraitへ、外部へ示す契約はInterfaceへ分離できます。Classから導かれるTypeは、関数、結果、作用、Type ClassなどのFunctionalな契約と接続できます。
CML
現行の公開CML(Cozy Modeling Language)文法は汎用の Class Object種別ではなく、Entity、Valueなどの具体的なObject種別を定義します。これらをClass相当のClassifierとして扱い、共通する部分構造はTraitとして分離できます。Cozyは意味に応じてScalaのabstract class、class、case class、traitなどを組み合わせて実現するため、Model上のClassとScala classは一対一対応ではありません。
Scala
Scalaのclass宣言はClassと、そのInstanceが持つTypeを同時に導入します。ただしScala Typeにはtrait、enum、opaque type、関数型、union type、intersection typeなども含まれるため、ScalaでもTypeとClassは同義ではありません。
simplemodeling-lib
simplemodeling-libのType Modeling Ruleは、Domain Modelの概念的な幹、constructor semantics、state、inheritance invariantをScalaの abstract class で表し、補助的で合成可能なCapabilityを trait で表します。これらはScala実現上の方針であり、Classの正規定義を変更しません。
公開成果物での用法
日本語の記事と動画では初出を「クラス(Class)」とします。「ClassがTypeを記述する」ではなく、「Class自身がTypeであり、Objectの構造と振る舞いを記述する」と説明します。第5回ではClassifier階層を詳説せず、Type、Interface、Traitとの役割の違いを中心に示します。
境界
-
ClassはTypeと同義ではありません。ClassはObject側のTypeの一種です。
-
ClassはTraitと同義ではありません。Classは概念的な幹を、Traitは合成可能な部分構造を表します。
-
ClassはInterfaceまたはClass Diagramと同義ではありません。
-
Classによって分類されるObjectが、必ずEntityとしての永続的Identityを持つとは限りません。