vieweditattachhistoryswikistopchangessearchhelp

Traits

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

文献など



なお、Scala の trait は名前だけ同じ別物(実質はミックスイン。Traits からも影響を受けていると言っているが、その痕跡はほとんどみられない)。Squeak Smalltalk 以外では、PHP が 5.4 以降で比較的忠実にこの機能を実装している。Perl の Role や前述の Scala のを含めた静的型言語の Traits は本機能にインスパイアはされていても仕組みが根本的に異なる。


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

Ruby のモジュール、Strongtalk のミックスイン、そして、エンティティではないが手法としての Common Lisp などでのミックスインは、実質はクラスからインスタンス生成機能を省いた「抽象クラス」である(あるいはそれを前提に継承機構に何らかの手を加えている)。しかし、トレイトはクラスのメソッドホルダとしての機能のみに特化されていて、たんなるメソッドのコレクションにすぎない。

よってトレイトは、既存のクラスや別のトレイトに対してメソッドを提供することはできても、クラスにより構成される継承パスに直接参加させるような使い方はしない。(実装はどうあれ)この点でトレイトはミックスインと一線を画する。たとえば一見、複数のトレイトを継承(正確には use )しているように見せていても、実際は合成により無名のトレイトをアドホックに作成し、コンフリクトをその中で解決する機構を持つ。クラス(の機能削減版=抽象クラス)ではなく、クラスの構成要素としてとらえるとよい。


関連:
--sumim




SELF の traits 、trait


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



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


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

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


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

This page has been visited 9279 times.