ライブラリが定義するオブジェクトへのインターフェイスは、オブジェクト型の定義によって指定されます。オブジェクト型が定義するのは、そのオブジェクトの存続期間の様々なフェーズであるオブジェクトに送られる一連のメッセージだけです。オブジェクトを実装するのに使われるクラスに関する約束事は一切ありません。
ある型に属する同じメッセージは複数のクラスが実装できます。型とクラスが独立しているということは、異なるクラスが同じオブジェクト型の相互実装を提供できるということです。たとえば個々の実装を、個々のケースに対する実装の最適化を目的として選択することができます。
オブジェクト型はObjective Cで定義されるプロトコルに似ており、ライブラリのヘッダファイルに現れる宣言はObjective Cプロトコルの構文を流用しています。プロトコルとの大きな違いは、型のインスタンスを作成するために実行時に使用される本来の外部オブジェクトとして、オブジェクト型が発行されるという点です。その他の違いとして、defobjライブラリのオブジェクト型は、オブジェクトのライフサイクルの異なるフェーズを定義するための別々のインターフェイスに分けられるということがあります。