Zope interface とは [Zope 3]
Zope 3 では、Zope 3 の開発過程で発明された zope.interface というのを使っています。
twisted でも、この zope.interface を使ってます。
じゃ、ここでいう interface っていうのは何なんでしょうか?
ひとことでいうと、
「クラスのインスタンスがどんなメソッドを持っているか外部(そのインスタンスを使う側)に知らせるもの」
でしょうか。
宣言しているところを見ると、C++ の抽象基底クラスみたいなもんです。
(宣言だけあって実装コードがない)
Java にも interface っていうのがあって、zope.interface に似ているように思えます。
でも、私は Java の interface とはちょっと違うと思います。
私は、 Java のことをとやかく言える程の人間ではありませんが、Java の interface は、
1.Java は多重継承ができないので、制限された Class として継承する基底のもの
2.Class の外部からアクセスできる機能を提示するもの
の意味があると思います。
そもそも Python では、多重継承ができるので(できれば偉いってわけじゃありませんが)zope.interface には、1. の必要はありません。
で、zope.interface って、2. の意味合いで存在していると思うんです。
だから、zope.interface は、Java の interface じゃなくて、むしろ Microsoft の COM(Component Object Model) のインターフェースに似てるなぁと思ってます。
http://www.zope.org/Wikis/DevSite/Projects/ComponentArchitecture/Zope3Book/components.html
によると、Mozilla API っていうのが、Zope 3 の Component Architecture に似てるそうです
「じゃあ、COM のインターフェースって何?」っていうのにちょうど良さそうな文章発見。
COM プログラミングの基本(上)
http://www.microsoft.com/japan/msdn/thisweek/combasics/combasics1.asp
(中とか下になると、COM 固有な話になるので、COM については知りたくない人は上だけ読めばいいかと)
COM で C++ の場合、QueryInterface() で、インターフェースを取得して、そのメソッドを呼び出してますが、(同時にインターフェースが実装されているかどうかも判定)同じようなことを Zope3 でもやってます。
たとえばクラスのインスタンス foo について、IFoo インターフェースで定義されてるメソッド fooMethod() を呼びたい場合
COM の場合
foo->QueryIntreface(IID_IFoo, &pi) if (pi) { pi->fooMethod() }
zope.interface の場合
if IFoo.providedBy(foo): foo.fooMethod() else: print "not implements fooMethod()"
みたいな感じ。
#ん、そうすると zope.interface では、異なるインターフェースで同じ名前のメソッドが宣言できないのか
Zope3 では、あるクラスがどのクラスを継承してるか?ではなくて、どのインターフェースを implements しているかが問題なんです。
Relajarse Propecia https://cheapcialisir.com/ - cialis 5 mg Propecia Precio Enfermeria <a href=https://cheapcialisir.com/#>cialis for sale</a> 24hour Canadianpharmacy
by Obsesse (2020-06-09 08:47)