








Traits
トレイト。トレイツ。Black、Schärli らが提唱し、Squeak Smalltalk で実装を試み、その実効性を確かめた多重継承機構。Squeak3.9 から組み込みの機能になった。
文献など
Perl6 の Roles も同じものらしい。Scala の trait は名前だけ同じ別物(ただの抽象クラスっぽい。Traits からも影響を受けていると言っているが、その痕跡はみられない)。
ミックスインとトレイトの違い
Ruby のモジュール、Strongtalk のミックスイン、そして、エンティティではないが手法としての Common Lisp などでのミックスインは、クラスからインスタンス生成機能を省いた「抽象クラス」である(あるいはそれを用いる)。しかし、トレイトはクラスのメソッドホルダとしての機能のみに特化されていて、たんなるメソッドのコレクションにすぎない。したがってトレイトは、既存のクラスや別のトレイトに対してメソッドを提供することはできても、クラスにより構成される継承パスに直接参加することはできない。
関連:
- [はてな] トレイトで、再定義時に遮蔽されてしまうメソッドを super へのメッセージングで呼び出せるようにする方法
--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)
 |
以下の 6 ページから参照されています。 |
- SELF 最終更新: 2004-07-04, 17:09:53 <m202>
- プロトタイプベース・オブジェクト指向 最終更新: 2006-04-26, 10:32:39 <khp0591>
- ミックスイン 最終更新: 2009-05-24, 15:26:40 <p3181-i>
- ある OOPL な会話 最終更新: 2006-05-04, 13:36:56 <192>
- 特異メソッド 最終更新: 2006-04-29, 10:32:23 <p4234-i>
- トレイト 最終更新: 2004-03-14, 15:08:08 <192>
This page has been visited 7361 times.