vieweditattachhistoryswikistopchangessearchhelp

Traits

トレイト。トレイツ。Black、Schärli らが提唱し、Squeak Smalltalk で実装を試み、その実効性を確かめた多重継承機構。Squeak3.9 から組み込みの機能になった。

文献など



Perl6 の Roles も同じものらしい。Scala の trait は名前だけ同じ別物(ただの抽象クラスっぽい。Traits からも影響を受けていると言っているが、その痕跡はみられない)。


ミックスインとトレイトの違い

Ruby のモジュール、Strongtalk のミックスイン、そして、エンティティではないが手法としての Common Lisp などでのミックスインは、クラスからインスタンス生成機能を省いた「抽象クラス」である(あるいはそれを用いる)。しかし、トレイトはクラスのメソッドホルダとしての機能のみに特化されていて、たんなるメソッドのコレクションにすぎない。したがってトレイトは、既存のクラスや別のトレイトに対してメソッドを提供することはできても、クラスにより構成される継承パスに直接参加することはできない。


関連:
--sumim


(次のはトレイトをミックスインの亜種と勘違いしているときのコメント。--sumim)

ミソは、コンフリクトが起こったときにそれらのメソッドを両コンポーネントから見かけのうえで排除し(喧嘩両成敗)、改めてその再定義をユーザーに働きかける機構の存在、らしい。--sumim

結局、Squeak におけるクタり成果は劇的…とまでいきませんでしたが(そんなもんですって)、あの Squeak のコレクションを前にしてひるまず、とりあえず信念にもとづいて自らの理論を実践みるという姿勢は好感が持てます。余談ですが、結論(のひとつ)として挙げられていた Smalltalk のツール群は秀逸…ってかこれらがなければクタってなどいられなかったという空気を醸し出す素朴で素直な感想は我が意を得たりって感じで好感度、さらにアップ。ミックスインとか Squeak に既存言語・処理系の受け売りでこれ以上複雑な機能を導入するのは基本的に反対ですが、Traits はちょっとだけ(ほんのちょっとだけ)応援してあげてもいいかなぁ…という気にさせられます(それでも、気だけかいっ)。--sumim



SELF の traits 、trait


いったんはクラスの存在を否定したプロトタイプベース・オブジェクト指向において、結局必要にせまられて復活した、クラスの役割りを果たすオブジェクトのこと。クラスにかなり批判的な姿勢で生まれてきた SELF では、死んでもクラスとは呼べないが、そうしたしがらみのない NewtonScript や JavaScript ではまんまクラスと呼んでいる。Schärli の Traits とは別物。--sumim



Star ワークステーションシステムの Traits


Star ワークステーションシステムにも Traits と呼ばれる仕組みが MESA の拡張としてあったらしい。やはり機能の多重継承のための機構。Schärli の Traits とは別物。--sumim

このページを編集 (3527 bytes)


Congratulations! 以下の 6 ページから参照されています。

This page has been visited 7361 times.