>>637
>あと、オブジェクトがある型と互換性があるかどうかを検査する機能は
>ライブラリじゃなくて言語の機能じゃないのかなと

C++/Javaに代表される、現在メジャーな静的型付け言語における
「静的なオブジェクト指向言語」であれば正にその通りなんだけど、
他のケースでは事情が異なる
・Smalltalk/Ruby/JavaScript: 動的型付け言語における「動的なオブジェクト指向」
  => 言語ではなくライブラリの機能であり、
    インターフェイス仕様による検査は存在しない
・Objective-C: 静的型付け言語における「動的なオブジェクト指向」
  => 言語およびライブラリの機能であり、
    インターフェイス仕様による検査は任意
    つまり基本は無検査だけど、仕様を明示的に宣言すれば静的に型検査される
そして、Objective-Cにはインターフェイスという概念に加えて「プロトコル」がある
これがデータ型としては不一致だけどインターフェイスの要求には従うことを意味し、
オブジェクト間は委譲(delegate)によって動的に結合される

前置きが長くなったけど、Objective-C的発想では:
>>625
・特定のインターフェースを実装してる:hasXxxInterface
・必要なメソッドやプロパティを持っている:hasXxxProtocol