「抽象型」の版間の差分

削除された内容 追加された内容
編集の要約なし
改名に伴う修正
25行目:
* [[Common Lisp Object System]] には [[Mixin]] がある。これは [[:en:David Moon|David Moon]] が [[:en:Lisp Machine Lisp|Lisp Machine Lisp]] のために開発した [[:en:Flavors (computer science)|Flavors]] を基にしている。なお、CLOS ではクラス内で定義された[[メソッド (計算機科学)|メソッド]]の代わりに、クラスとは別の場所で定義された[[総称関数]]を使う。
* [[Java]]には[[インタフェース (抽象型)|インタフェース]]がある。インタフェースはメソッドのシグネチャや定数をもつことができるが、メソッドの実装や変数(フィールド)をもつことはできない。Javaのクラスは複数のインタフェースを実装できる。Javaにおける抽象クラスは、インタフェースを実装し、いくつかのメソッドのシグネチャを定義していることもあるが、一方でキーワード <code>abstract</code> により抽象化されたままのメソッドを持っている。
* Trait はより新しい手法で、[[Scala]] や [[Perl6Raku]](''roles'' と呼ばれている)にある。また、[[Smalltalk]]の拡張として提案されている(元々、Smalltalk で実装が発展してきた経緯がある)。Trait はその定義内に何を含んでいてもよく、複数の Trait を組み合わせて一つのクラス定義を作ることもできる。この合成規則は標準的な継承とは異なり、多重継承につきものの意味論的な困難さを防ぐようになっている。
 
== 脚注・出典 ==