クラス

用語

クラス

用語(英)

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を持つとは限りません。

関連語

  • 分類子

  • インターフェース

  • トレイト

  • オブジェクト

  • クラス図

参照