16

Ruby や Python などの動的言語への関心が高まっているので、驚いたことに。それらは 100% オブジェクト指向であるという主張がありますが、インターフェイス、メソッドのオーバーロード、演算子のオーバーロードなどのいくつかの基本的な概念について読んだところ、欠落しています。それはどういうわけかカバーの下に組み込まれていますか、それともこれらの言語はそれを必要としないのですか? 後者が当てはまる場合、それらは 100% オブジェクト指向ですか?

編集:いくつかの回答に基づいて、オーバーロードはPythonとRubyの両方で利用できることがわかりました.Ruby 1.8.6とPython 2.5.2の場合ですか??

4

5 に答える 5

18

遅延バインディングのおかげで、彼らはそれを必要としません。Java/C# では、一部のクラスに特定のメソッドがあり、コンパイル時にチェックされることを宣言するためにインターフェイスが使用されます。Python では、実行時にメソッドが存在するかどうかがチェックされます。

Python でのメソッドのオーバーロードは機能します。

>>> class A:
...  def foo(self):
...    return "A"
...
>>> class B(A):
...  def foo(self):
...    return "B"
...
>>> B().foo()
'B'

それらはオブジェクト指向ですか?はい。具体的な言語に機能Xまたは機能Yがあるかどうかというよりも、アプローチの問題です。

于 2009-04-03T20:29:11.870 に答える
18

動的言語はダックタイピングを使用します。どのコードも、それらのメソッドをサポートする任意のオブジェクトのメソッドを呼び出すことができるため、インターフェイスの概念は関係ありません。実際、Python は、Rubyと同様に、演算子のオーバーロード(チェック - 3.3. 特殊なメソッド名) をサポートしています。

とにかく、あなたはオブジェクト指向プログラミングに不可欠ではない側面に焦点を当てているようです. 主な焦点は、Python と Ruby で 100% サポートされているカプセル化、継承、ポリモーフィズムなどの概念です。

于 2009-04-03T20:30:36.500 に答える