パワータイプ
|
用語 |
パワータイプ |
|
用語(英) |
Powertype |
|
別名 |
- |
識別情報
-
Term ID:
src/main/doxsite/glossary/object-foundation/powertype.dox -
English label: Powertype
-
Japanese label: パワータイプ
-
Category: Object Foundation
-
Status: normative
-
Definition authority: SimpleModeling BoK
定義
パワータイプ(Powertype)とは、対象となるClassまたはObjectを区分する分類軸と、その軸で利用できる分類値を、明示的なModel Elementとして定義するClassifierです。SimpleModelingでは、GeneralizationがClassifier間の一般・具体の階層を表すのに対し、Powertypeは顧客種別や商品カテゴリのような分類軸と区分をモデル化します。
UML
UML 2.5.1では、PowertypeはGeneralizationSetの powertype として指定されるClassifierであり、そのInstanceがGeneralizationSetに属する具体Classifierへ対応します。SimpleModelingはこの用法に準拠しつつ、具体Subclassをすべて明示しない場合にも、分類軸と区分を独立したModel Elementとして扱えるように拡張します。厳密なUML写像が必要な場合はGeneralizationSetとPowertype Classifierを用い、区分値として扱う場合はEnumerationまたはProfileによる写像を選択します。
一般的な用法
業務システムでは、Powertypeは区分コード、種別マスタ、enumと近い形で実装されることがあります。ただしPowertypeはコード値の一覧ではなく、何をどの観点で分類するかというDomain Model上の意味を所有します。表示ラベルやデータベース上のマスタ表だけをPowertypeとは呼びません。
オブジェクト関数パラダイム
Object側では、PowertypeがObjectまたはClassifierの分類軸と分類値を表します。Functional側では、閉じたPowertypeを直和型、enum、パターン照合などへ接続し、分類値ごとの処理を型で検査できます。開いた分類を閉じたenumへ縮約するかどうかは、実現方針として別に判断します。
CML
CML(Cozy Modeling Language)は Powertype をObject種別として定義し、分類値をKindとして記述します。ClassやEntityなどの分類対象はPowertypeへの参照を持つことができます。CML上のPowertype、分類対象との関係、生成されるプログラム上のTypeは関連しますが、同一概念でも一対一対応でもありません。
Scala
閉じたPowertypeはScalaの enum 、 sealed trait とcase object、または値を保持する生成Typeとして実現できます。現在のSimpleModelerは、PowertypeのKindから列挙値を持つScalaのクラス・ファミリを生成します。分類値に論理値、保存値、表示ラベルを持たせる場合もありますが、Scala表現はPowertypeの正規定義そのものではありません。
simplemodeling-lib
現行の simplemodeling-lib は、Object ModelのPowertype全体を代表する単一の基底を定義していません。Powertypeのモデル表現とScalaコード生成はSimpleModelerが担い、生成コードの基底契約は simplemodeling-model が担います。 simplemodeling-lib のSchema、Data Type、Value Domainは境界上の値契約に利用できますが、Powertypeの分類意味を置き換えません。
公開成果物での用法
日本語の記事と動画では初出を「パワータイプ(Powertype)」とします。入門では「分類軸と、その軸で使う区分をモデル化する要素」と説明し、Generalizationとの違いを「Generalizationは一般・具体の階層、Powertypeは分類軸と区分」と示します。UMLのGeneralizationSetを詳説するのは、厳密なメタモデル説明が必要な場合に限ります。
境界
-
PowertypeはGeneralizationと同義ではありません。GeneralizationはClassifier間の分類学的Relationshipであり、Powertypeは分類軸と分類値を表すClassifierです。
-
PowertypeはAssociationやDependencyの一種ではなく、それ自体をObject間のRelationshipとして扱いません。
-
Powertypeは単なるenum、区分コード、表示ラベル一覧、マスタ表と同義ではありません。
-
PowertypeはStateMachineと同義ではありません。Powertypeは分類を、StateMachineは時間に伴う状態遷移を記述します。
-
CMLのPowertypeとScalaのTypeは一対一対応とは限りません。
参照
-
src/main/doxsite/domain-modeling/domain-model-elements.dox -
src/main/doxsite/glossary/object-foundation/classifier.dox -
src/main/doxsite/glossary/object-foundation/generalization.dox -
src/main/doxsite/glossary/object-foundation/type.dox -
/Users/asami/src/dev2025/simple-modeler/src/main/scala/org/simplemodeling/model/MPowertype.scala -
/Users/asami/src/dev2025/simple-modeler/src/main/scala/org/simplemodeling/model/MPowertypeKind.scala -
/Users/asami/src/dev2025/simple-modeler/src/main/scala/org/simplemodeling/SimpleModeler/transformers/scala/PowertypeScalaModelTransformer.scala -
/Users/asami/src/dev2026/simplemodeling-model/src/main/scala/org/simplemodeling/model/powertype/Powertype.scala -
docs/spec/glossary-entry-format.md