インターフェース

用語

インターフェース

用語(英)

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と同義ではありません。

関連語

  • 分類子

  • クラス

  • トレイト

  • 操作

  • 責務

  • 型クラス

参照