構造基盤としてのオブジェクトモデリング
一般に、オブジェクト・モデルには大きく二つの役割があります。一つは、対象とするモデルの概念、関係、責務 (Responsibility)、制約 (Constraint)、状態 (State)、振る舞い (Behavior)を形式的に記述することです。もう一つは、そのモデルをプラットフォーム上で動作させるために必要な永続化 (Persistence)、トランザクション (Transaction)、通信 (Communication)、実行制御 (Execution Control)などの仕組みを組み立てることです。
SimpleModelingが現在、オブジェクト・モデルによる形式記述の対象としているのはドメイン・モデル (Domain Model)です。SimpleModeling、CML、Cozy、Textusの組み合わせが、一般的な第二の役割であるプラットフォーム向けの仕組みを、プログラムの自動生成と実行基盤によって吸収します。そのため、人間とAIは、第一の役割であるドメイン・モデルの形式的な記述へ集中できます。
SimpleModelingモデルは、同じ対象の異なる側面を表すオブジェクト・モデル、知識モデル (Knowledge Model)、文芸モデル (Literate Model)の三つのモデルから構成されます。オブジェクト・モデルは形式モデル、知識モデルは主として生成AIがモデルを理解するためのモデル、文芸モデルは人間が理解できる自然言語を中心とするモデルです。この三つの構成要素から、目的に応じてドメイン・モデル、ユースケース・モデル (Use Case Model)、アプリケーション・モデル (Application Model)を構成します。第5回は、このモデル全体におけるオブジェクト・モデルの役割を扱います。
記事の全体像
第5回の全体像: SimpleModelingモデルを構成するオブジェクト・モデル、知識モデル、文芸モデルのうち、オブジェクト・モデルに焦点を当てます。現行CMLは実行可能モデル (Executable Model)を扱い、相互作用などの実行例モデル (Execution Example Model)は設計、レビュー、検証の制約として利用します。 
シリーズにおける位置付け
第4回では、モデルをドメイン・モデルとユースケース・モデルの二つの軸で組織し、目的と関心事に応じたビュー (View)から扱う方法を説明しました。形式構造の説明ではオブジェクト・モデルを中心に置きましたが、個別の構造化技法までは展開していません。
第5回では、モデル全体におけるオブジェクト・モデルの役割、実行可能モデルと実行例モデルの違い、そしてSimpleModeling、CML、Cozy、Textusによってプラットフォーム向けの機構を自動生成と実行基盤へ委ね、ドメイン・モデルの記述に集中できることを説明します。
前回の記事: 📄 Modelの構造とViewの活用
オブジェクト・モデルの一般的な役割とSimpleModelingのスコープ
第一の役割は、対象の中から識別すべきものをオブジェクトとして選び、その意味、同一性 (Identity)、クラス (Class)と型 (Type)、責務、関係、成立条件をモデルの構造として明示することです。第二の役割は、そのモデルをプラットフォーム上で動作させる永続化、トランザクション、通信、資源管理、実行制御などの仕組みを組み立てることです。
SimpleModelingが現在、オブジェクト・モデルによる形式記述の対象としているのはドメイン・モデルです。それ以外のモデルを対象とする形式記述は、現時点ではスコープ外です。CMLでドメイン・モデルの構造を記述し、Cozyがプログラムを自動生成し、Textusが実行基盤を提供することで、プラットフォーム向けの仕組みをこの組み合わせに委ね、ドメイン・モデルの記述へ集中します。

オブジェクト指向プログラミングからSimpleModelingのオブジェクト・モデルへ
オブジェクト指向プログラミングでは、クラス、インターフェース (Interface)、オブジェクト、メソッド、継承などによってプログラムの構造と振る舞いを実装します。SimpleModelingのオブジェクト・モデルでは、それらの実装要素へ移る前に保持すべきモデル上の意味を明示します。
| Object-oriented programming element | Meaning added by SimpleModeling |
|---|---|
|
クラスはオブジェクト側の構造を記述し、型は値、操作、結果、作用、合成可能性を接続する意味契約になります。CMLのモデル要素とScalaのclass、trait、case class、enum、関数型は一対一には対応しません。 |
|
|
Field / reference |
参照を、分類、構造上の所有、その他の関係として意味付けます。汎化とパワータイプ、合成、関連、依存、多重度は、コード上の接続だけでは表れないモデル上の意図を保持します。 |
|
Method / service call |
|
|
State field / enum / callback |
状態遷移がドメイン上の意味を持つ場合、状態、イベント、操作、遷移条件を状態機械として結び付けます。状態機械は動的モデルの基本になります。 |
|
Framework annotation / infrastructure code |
永続化、トランザクション、通信などをドメイン・モデルへ混ぜず、CML、Cozy、Textusによる生成と実行基盤へ委ねます。 |
エンティティ、バリュー、イベント (Event)、サービス、責務、制約などは、CMLでオブジェクト・モデルを記述するためのモデル要素と役割です。CozyはCMLからプログラムを生成し、SimpleModelingのモデル駆動開発を実現します。第5回では個別の記法や設計パターンへ深入りせず、これらの要素が担う意味と相互のつながりを概観します。
協調がユースケースシナリオとCMLをつなぐ
オブジェクト指向プログラムでは、ユースケースの処理がアプリケーションサービスのメソッドや呼び出し列として現れることがあります。SimpleModelingでは、その手前で、文芸モデルのユースケースシナリオ (Use Case Scenario)を、参加オブジェクト、責務、相互作用、操作順序、イベント、状態遷移から成る実行例として具体化します。この協調 (Collaboration)がユースケースとオブジェクト・モデルを接続します。
実行例をそのままCMLへ変換するのではありません。AIが実行可能なサービス、操作、イベント、状態機械 (StateMachine)などへの対応を提案し、人間が意味と対応関係を承認します。CBD (Component-Based Development)を支援するためのコンポーネントcbd-supportは、根拠、差分、追跡を管理し、スキルはcbd-supportの支援を受けて承認済みの変更だけをCMLへ反映します。この中間の対応をユースケース実現モデル (Use Case Realization Model)として整備する方向です。
注文確定の簡単な例
「注文を確定する」シナリオでは、Orderが確定可能性と状態遷移を担い、在庫確保と支払い承認が協調し、成功結果をOrderConfirmedイベントとして表します。CMLでは、承認済みの対応をサービス、操作、エンティティ、イベント、状態機械として記述し、Cozyが定型的な接続コードを生成します。
ケーパビリティ (Capability)は、モデルやシステムが利用者や対象領域に対して何を可能にするかを表します。アスペクト (Aspect)は、性能 (Performance)、信頼性 (Reliability)、セキュリティ (Security)など、複数のモデル要素や振る舞いを横断して確認する関心事を表します。サービスはケーパビリティの一種、品質属性 (Quality Attribute)はアスペクトの一種と捉え、それだけでは表しにくい少数の要素も含めて、cbd-supportが内部モデル表現として保持します。開発者はこれらを直接操作するのではなく、承認時のレビューでユースケース、オブジェクト・モデル、品質条件の対応を確認します。

ビューは目的に必要な側面を選ぶ
複雑なモデルを一度に理解することは困難です。ビューは、ある目的と関心事に答えるために、モデルから必要な要素、関係、振る舞い、品質、根拠、文脈を選び、理解、判断、検証、利用できる形で可視化します。モデルをあらかじめ固定的なビューへ分割するのではなく、「何を確認したいか」から選択を始めます。
| 目的と関心事 | 選択する要素の例 |
|---|---|
|
形式構造を理解する |
|
|
ライフサイクルを検証する |
|
|
ユースケースの具体化を確認する |
シナリオ、参加オブジェクト、責務、操作順序、成功と失敗の結果 |
|
意味と判断根拠を説明する |
用語集、形式構造、知識の根拠、文脈と意図 |
クラス図 (Class Diagram)は、形式構造を確認するために選べる表現の一つです。ビュー自身が意味を所有するのではありません。意味と同一性は元のモデルと用語集 (Glossary)に残り、同じ要素を異なるビューから対応付けられるようにします。

他のモデルとの関係
オブジェクト・モデル、知識モデル、文芸モデルは、SimpleModelingモデルを構成する三つのモデルです。それぞれが同じ対象の異なる側面を表し、相互に対応しながら全体を形成します。三つ自体はビューではありません。ビューは、目的と関心事に応じて三つのモデルから必要なモデル要素を選んで可視化します。
文芸モデルの一種であるユースケースシナリオは、アクターの目的、出来事、分岐、結果を自然言語で表します。アプリケーション・モデリング(Application Modeling (アプリケーション・モデリング))では、シナリオからユースケース実現モデルを構成し、協調によって参加者、役割、責務を、相互作用によって具体的な実行例を記述します。その対応を、実行可能なオブジェクト、サービス、操作、イベント、状態機械、制約へ落とし込みます。知識モデルは主として生成AIが三つのモデルの内容と関係を探索し、人間へ説明するために利用されます。
オブジェクト・モデルからCMLと実行へ
現行CMLは、オブジェクト・モデルのうち、クラス、型、属性 (Attribute)、関係、制約、状態、操作、イベント、サービス、状態機械などから成る実行可能モデルを記述します。相互作用などの実行例モデルはCMLのスコープ外です。アプリケーション・モデリングで承認したユースケース実現から実行可能な要素への対応を追跡可能にし、その後のモデルの実現(Model Realization)でCMLをCozy、AI、Textusへ接続することで、実行例による制約を保ちながらコード、テスト (Test)、文書、実行可能成果物を生成できます。
AIでオブジェクト・モデルを扱う
AIは、文芸モデルのユースケースシナリオから相互作用などの実行例を提案し、実行可能なオブジェクト、型、関係、責務、制約、状態機械の候補へ対応付けられます。知識モデルは、生成AIがモデルの概念と意味関係を探索し、重複や矛盾を見つけ、人間へ内容を説明するために利用されます。用語集の正規用語と識別子 (Identifier)によって、文芸モデル、実行例、CMLの実行可能モデルを追跡します。
一方、オブジェクト境界、同一性、ライフサイクル (Lifecycle)、責務の所有、不変条件 (Invariant)の業務的な正しさは、目的と現実世界を知る人間が判断します。AIが見つけた名詞をそのままオブジェクトや型へ変換せず、ユースケースに必要な責務と変更理由から選びます。
次回
本稿では、オブジェクト、型、関係、責務、制約、状態、振る舞い、協調を、ドメイン・モデル、ユースケース・モデル、アプリケーション・モデルを支える形式構造として整理しました。次回は知識モデリング(Knowledge Modeling (知識モデリング))として、生成AIがモデルの概念、分類、意味関係、根拠を探索し、関連付け、説明できるように、知識モデルをどのように構成するかを扱います。
参照
用語集
- モデル (Model)
-
Modelとは、対象を特定のPurposeとConcernに基づいて選択し、理解、判断、検証、構築に利用できる形で表した抽象です。対象そのものではなく、目的に必要な要素、関係、意味を保持する表現です。
- オブジェクト・モデル (Object Model)
-
Undefined
- Cozy Modeling Language (CML)
-
CML(Cozy Modeling Language)は、オブジェクト・モデルのうち、プログラム生成と実行へ接続する実行可能モデルを記述するSimpleModelingの形式モデリング言語です。
- Cozy
-
Cozyは、CMLと各種DSLで記述されたModelを解析し、プログラム、設定、文書などの実現成果物へ変換するSimpleModelingのツールチェーンです。
- Textus
-
Textusは、SimpleModelingによって実現されたソフトウェアを動作させるための実行基盤です。アプリケーションに共通する実行、運用、連携の機構を提供します。
- シンプルモデリング (SimpleModeling)
-
SimpleModelingは、KnowledgeからDomain Modelを構成し、CMLで形式化し、CozyとAIによって実行可能ソフトウェアへ実現し、Textus上で動作させる、モデリング中心のソフトウェア開発方法論と技術体系です。
- オブジェクト (Object)
-
Objectとは、Classまたは他のClassifierによって分類され、構造、State、Behaviorを持ち得るInstanceです。Objectは、同じClassifierの他のInstanceと区別して参照できる個体として扱われます。
- ユースケース (Use Case)
-
UMLにおけるUse Caseは、対象システムがActorまたは他の利害関係者に観測可能な価値あるResultをもたらすために実行するActionの集合を定めるModel Elementです。
- 永続化 (Persistence)
-
Undefined
- 通信 (Communication)
-
Undefined
- 状態 (State)
-
UMLにおけるStateは、ある不変条件が成立している状況をモデル化したものです。Objectの現在のStateによって、受け付けられるEventやOperation、成立するConstraint、次に可能なTransitionが変わります。
- 責務 (Responsibility)
-
Responsibilityとは、ObjectまたはRoleが、何を知り、判断し、行い、守るべきかを表す義務です。構造上の情報だけでなく、規則とBehaviorの所有を定めます。
- 実行制御 (Execution Control)
-
Undefined
- 制約 (Constraint)
-
UMLにおけるConstraintは、一つ以上のModel ElementのSemanticsの一部を宣言するため、自然言語または機械可読言語で表した条件または制限です。評価結果はBooleanであり、評価は副作用を持ちません。
- 振る舞い (Behavior)
-
UMLにおけるBehaviorは、そのContextとなるBehaviored Classifierが時間とともにどのようにStateを変えるかを定める仕様です。可能な実行、創発する振る舞い、または特定の実行例を表せます。
- トランザクション (Transaction)
-
Undefined
- ドメイン・モデル (Domain Model)
-
Undefined
- 知識モデル (Knowledge Model)
-
知識モデル(Knowledge Model)とは、SimpleModelingモデルに含まれる概念、意味関係、分類、規則などを、主として生成AIが参照、探索、関連付け、解釈できる形で構造化したモデルです。
- アプリケーション・モデル (Application Model)
-
アプリケーション・モデル(Application Model)とは、ユースケースをアプリケーションがどのように実現するかを、参加者、役割、責務、協調、相互作用、状態遷移、イベント、サービス、操作、結果によって表す目的別のモデルです。
- ユースケース・モデル (Use Case Model)
-
ユースケース・モデル(Use Case Model)とは、利用者や外部主体がシステムを利用する目的と、その目的を達成するシナリオおよび期待する結果を、Actor、Goal、Use Case、Scenario、Outcomeによって表す目的別のモデルです。
- 文芸モデル (Literate Model)
-
Undefined
- 実行可能モデル (Executable Model)
-
Undefined
- 実行例モデル (Execution Example Model)
-
Undefined
- 妥当性確認 (validation)
-
Validation(妥当性確認)とは、システムや機能が利用目的や要求仕様に対して妥当であるかを確認する行為である。
- ビュー (View)
-
Viewとは、Modelを特定のPurposeとConcernに応じて選択し、理解、判断、検証、利用できる形で投影した表現です。ViewはModelの一部を見せるものであり、元のModelとは別に意味を所有しません。
- クラス (Class)
-
Undefined
- 同一性 (Identity)
-
Identityとは、値やStateが変化しても、ある対象を他の対象と区別し、時間を通じて同じ対象として追跡するための同一性です。IdentifierはIdentityを表現または参照する値であり、Identityそのものと同義ではありません。
- 型 (Type)
-
Undefined
- インターフェース (Interface)
-
Undefined
- 操作 (Operation)
-
UMLにおけるOperationは、関連するBehaviorを呼び出すための名前、型、Parameter、Constraintを定めるClassifierのBehavioral Featureです。Operationは呼び出し契約を定め、MethodなどのBehaviorがその実現を担います。
- Scala
-
Undefined
- 依存 (Dependency)
-
UMLにおけるDependencyは、ClientとなるModel Elementの仕様または実装が、Supplierとなる別のModel Elementの定義へ意味的または構造的に依存することを表すDirected Relationshipです。
- パワータイプ (Powertype)
-
Undefined
- 汎化 (Generalization)
-
UMLにおけるGeneralizationは、より一般的なClassifierと、より具体的なClassifierの間の分類学的Relationshipです。具体側のInstanceは一般側のInstanceでもあり、具体側は一般側のFeatureを継承します。
- 多重度 (Multiplicity)
-
UMLにおけるMultiplicityは、下限から上限までの非負整数の包含区間によって、Model ElementのInstanceに許される個数を定める情報です。上限は無制限の場合があります。
- 構造上の所有 (Structural Ownership)
-
Undefined
- モデル関係 (Relationship)
-
Undefined
- モデル上の関連 (Association)
-
Undefined
- 合成関係 (Composition)
-
Undefined
- イベント (Event)
-
UMLにおけるEventは、Behaviorの実行中に発生し得る出来事を記述するものです。EventのOccurrenceを受け取ることで、StateMachineのTransitionなどのBehaviorが起動されます。
- 状態機械 (StateMachine)
-
UMLにおけるStateMachineは、Eventの発生によって起動されるTransitionでStateのグラフをたどり、システム要素のevent-driven Behaviorを表すBehaviorです。
- ユースケースシナリオ (Use Case Scenario)
-
Undefined
- 協調 (Collaboration)
-
UMLにおけるCollaborationは、専門化された機能を担う参加要素のRoleが共同して、目的とする機能を達成する構造を記述するClassifierです。
- ユースケース実現モデル (Use Case Realization Model)
-
UPにおけるUse Case Realizationは、ユースケースの振る舞いを、設計モデル内で協調するモデル要素によってどのように実現するかを記述します。ユースケース実現モデルは、ユースケースのシナリオと、それを実現する参加者、責務、相互作用、操作、結果の対応を表すモデルです。
- CBD (Component-Based Development)
-
CBD(コンポーネント指向開発)は、ソフトウェアを責務・契約・インターフェースを明確に定義したコンポーネント単位で構築・再利用する開発方式です。 コンポーネントは独立性と交換可能性を備え、システムを疎結合に構成することで保守性と再利用性を高めます。 論理モデルでは機能や契約を定義する抽象構造単位として、物理モデルでは実際の実装・デプロイメント単位として扱われます。
- 実現関係 (Realization)
-
Undefined
- 追跡可能性 (Traceability)
-
開発におけるTraceabilityとは、要求、用語、Model Element、設計判断、Test、実装、実行結果の関係を識別子と根拠によってたどれる性質です。
- セキュリティ (Security)
-
Securityとは、情報と機能を正当な権限に従って保護し、不正な閲覧、利用、変更、破壊、否認を防ぐ性質です。Confidentiality、Integrity、Authenticity、AccountabilityなどのConcernを含みます。
- アスペクト (Aspect)
-
アスペクト(Aspect)とは、複数のモデル要素や振る舞いを横断して確認する条件、性質、関心事です。品質属性を中心とし、必要に応じて品質属性だけでは表し切れない横断的な条件も含みます。
- 品質属性 (Quality Attribute)
-
Quality Attributeとは、ソフトウェアが機能を実行できることに加えて、どの程度の品質で要求を満たすかを表す特性です。Security、Performance、Availability、Reliability、Resilience、Observability、Maintainabilityなどが含まれます。
- ケーパビリティ (Capability)
-
ケーパビリティ(Capability)とは、モデルまたはシステムが利用者や対象領域に対して何を可能にするかを表す概念です。実現方法ではなく、提供できる結果や働きに着目します。
- 信頼性 (Reliability)
-
Reliabilityとは、指定された条件と期間のもとで、システムが要求された機能を一貫して遂行する性質です。Availability、Fault Tolerance、Recoverabilityなどを含む観点から評価します。
- 性能 (Performance)
-
Performanceとは、指定された条件と資源のもとで、システムが処理時間、応答時間、Throughput、容量などの時間的要求を満たす性質です。
- 属性 (Attribute)
-
Attributeとは、ClassifierのInstanceが保持し得る値または参照を表すStructural Featureです。Attributeは名前、Type、Multiplicity、既定値、Constraintなどによって特徴付けられます。
- ライフサイクル (Lifecycle)
-
Lifecycleとは、ある対象が生成されてから終了するまでに、Identityを保ちながら通過するStateとTransitionの範囲です。
- 遷移 (Transition)
-
UMLにおけるTransitionは、StateMachine内のSource VertexからTarget Vertexへ進む有向関係です。Trigger、Guard、Effectなどによって、いつ遷移し何を実行するかを定めます。
- 用語集 (Glossary)
-
Glossaryとは、対象領域で使用する用語について、名称、意味、境界、同義語、識別子を管理する知識資源です。関係者が同じ用語を同じ意味で扱うための共通基盤になります。
- クラス図 (Class Diagram)
-
Class Diagramとは、Class、Interface、Data Type、Association、Generalization、Dependencyなどを用いて、Modelの静的構造を示すUML Diagramです。
- アプリケーション・モデリング (Application Modeling)
-
アプリケーション・モデリング(Application Modeling)とは、ユースケースをアプリケーションが実現する振る舞いとして具体化し、アプリケーション・モデルを構成する活動です。ユースケースシナリオから、参加者、役割、責務、協調、相互作用、状態遷移、イベント、サービス、操作への対応を明らかにします。
- モデル上の相互作用 (Interaction)
-
Undefined
- テスト (Test)
-
Testとは、指定した条件で対象を実行または評価し、観測した結果を期待する結果やConstraintと比較して、要求または契約への適合を確認する活動とその仕様です。
- コンポーネント (Component)
-
責務・契約・依存関係を明示的に定義し、再利用可能で交換可能な単位としてカプセル化されたソフトウェア構成要素。論理モデルでは抽象構造単位として、物理モデルでは実装・デプロイメント単位として扱われる。
- プラットフォーム (Platform)
-
Platformとは、ソフトウェアを構築、配置、実行、運用するために共通して利用する技術的な基盤とサービスの集合です。
- 識別子 (Identifier)
-
Identifierとは、Identityを持つ対象または相関対象を参照し、他の対象から区別するために使用する値です。IdentifierはIdentityを表現できますが、対象が時間を通じて同じ対象であるというIdentityの意味そのものではありません。
- 不変条件 (Invariant)
-
Invariantとは、対象が有効である間、観測可能な安定点で常に成立しなければならないConstraintです。Object、Type、または複数要素からなる構造に適用できます。
- 知識モデリング (Knowledge Modeling)
-
Undefined