インターフェース
|
用語 |
インターフェース |
|
用語(英) |
Interface |
|
別名 |
- |
識別情報
-
Term ID:
src/main/doxsite/glossary/object-foundation/interface.dox -
English label: Interface
-
Japanese label: インターフェース
-
Category: Object Foundation
-
Status: normative
-
Definition authority: SimpleModeling BoK
定義
インターフェース(Interface)とは、Objectが外部へ提供するOperation、Responsibility、Protocolを、そのObjectの内部状態や実装を固定せずに定める、Object側の名前付きType契約です。Classは一つ以上のInterfaceを提供または実現できます。
UML
UML 2.5.1では、Interfaceは外部から観察できる一貫したService集合を定めるClassifierであり、Typeの一種です。ClassなどのBehavioredClassifierはInterfaceRealizationによってInterfaceの契約を実現できます。SimpleModelingはこの基本関係を採用します。
一般的な用法
プログラミング言語のinterfaceやtraitは、言語ごとに状態、default method、mixin、Type Classなど異なる能力を持ちます。SimpleModelingのInterfaceは言語構文ではなくObject Model上の契約なので、特定言語のinterfaceまたはtraitと同義ではありません。
オブジェクト関数パラダイム
Interfaceはsubtype polymorphismによるObject側の契約を表します。任意の既存Typeへ後付けで振る舞いを与えるType Classや、再利用可能な部分構造を合成するTraitとは役割が異なります。
CML
現行の公開CML(Cozy Modeling Language)文法には、専用の Interface Object種別がまだ定義されていません。外部OperationまたはResponsibilityの契約をCMLへ導入するときは、構造やdefault behaviorを持つTraitと区別できる明示的なInterface表現を定める必要があります。専用構文が確定するまで、InterfaceとTraitを同義として扱いません。
Scala
ScalaにはJavaと同じ独立した interface 構文はなく、Object側のInterfaceは通常 trait で実現します。ただしScala traitはmixin、SimpleModeling Trait、補助Capability、Type Classの表現にも使えるため、Scala traitが常にSimpleModeling Interfaceを意味するわけではありません。
simplemodeling-lib
simplemodeling-libのScala trait がObject Model上のInterfaceに対応するかどうかは、その契約がObject自身の外部Responsibilityだけを表すかによって判断します。実装形式だけでInterfaceと判定しません。
公開成果物での用法
日本語の記事と動画では初出を「インターフェース(Interface)」とします。「契約だけならInterfaceを使う」と説明できますが、Type一般をInterfaceへ限定しません。
境界
-
InterfaceはType全体、Class、Traitのいずれとも同義ではありません。
-
Interfaceは内部状態や実現を固定しません。
-
InterfaceはScala traitまたはType Classと同義ではありません。