トレイト

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

トレイトとはコンピュータープログラミングにおける概念で、構造的にオブジェクト指向プログラミングを行うための簡素な概念モデルとして使われるメソッド群の集まりである。[1] [2]

特徴[編集]

トレイトには以下の特徴がある:

  • 振る舞いを実装するメソッド群を提供する。
  • 提供された振る舞いをパラメーター化するメソッド群を必要とする。
  • 状態変数を必要としない。[要出典]
    • 状態変数を直接には読み書きしない[要出典]

合成[編集]

  • トレイトの合成は対称的であり、衝突するメソッドは合成から除外される。
  • 入れ子にすることができるが、クラスにとって入れ子はプログラム上の意味はない。

入れ子されたトレイトは平坦なトレイトと等価である[3] トレイトはミクスインと類似しているが、ミクスインでは継承操作のみによってメソッドを合成させるが、トレイトでは、対称的な足し合せ、メソッド排除、別名化など、より多くの方法でメソッドを合成できる。また、トレイトは合成時にメソッドの型指定のみならず実装も与えるという点で、インターフェースとも異なっている。

プログラミング言語[編集]

サポートする言語

  • Smalltalk - 最初のトレイトは Smalltalk 処理系のひとつである Squeak を使ってベルン大学のソフトウェア合成グループによって実装が試され[4]、その有効性が実証された[5]。Squeak にはその後、公式リリースにもトレイトが組み込まれ標準で利用可能となった。Squeak から派生した Pharo も同様。
  • PHP - 5.4.0 からサポート[6]
  • Perl6 -「ロール」。 Perl 5 では Moose モジュールで利用可能。なおロールの限定的な用途のみ「トレイト」と呼称し紛らわしい。
  • JavaScript の Joose フレームワーク
  • Racket - エンティティとしてのトレイトは無いが、ミクスインをトレイトのように振る舞わせる関数やマクロが整備されている
  • Ruby のモジュールのmix拡張(試作のみ)[7] - Ruby 2.0 向けの新機能として計画された[8]が運用上の問題が見つかり放棄された[9]

静的型言語のトレイトの本質は従来のミクスインのままである(平坦化されない)が、平坦なトレイトを模したりミクスインの問題点を回避する拡張を施すなどの工夫により、トレイトに近い使い勝手を実現している

脚注[編集]

  1. ^ Nathanael SchärliStéphane DucasseOscar NierstraszAndrew P. Black 共著、Traits: Composable Units of Behaviour. Proceedings of the European Conference on Object-Oriented Programming (ECOOP). Lecture Notes in Computer Science 誌、2743巻、Springer-Verlag、2003年、pp. 248-274
  2. ^ Stéphane DucasseOscar NierstraszNathanael SchärliRoel WuytsAndrew P. Black 共著: Traits: A mechanism for fine-grained reuse. ACM Trans. Program. Lang. Syst. 誌、28(2): 331-388 (2006)
  3. ^ http://web.cecs.pdx.edu/~black/publications/TR_CSE_02-012.pdf
  4. ^ Nathanael Schärli, Stéphane Ducasse, Oscar Nierstrasz, and Andrew P. Black. Traits: Composable Units of Behavior. Technical Report -2, Institut für Informatik, Universität Bern, Switzerland, November 2002
  5. ^ Andrew P. Black, Nathanael Schärli, and Stéphane Ducasse. Applying Traits to the Smalltalk Collection Hierarchy. Technical Report -2, Institut für Informatik, Universität Bern, Switzerland, November 2002
  6. ^ Marr, Stefan. “Request for Comments: Horizontal Reuse for PHP”. The PHP.net wiki. The PHP Group. 2011年1月31日閲覧。
  7. ^ http://marc.info/?l=ruby-cvs&m=130685857122161
  8. ^ http://www.rubyist.net/~matz/20100617.html
  9. ^ http://d.hatena.ne.jp/nagachika/20111003/ruby_trunk_changes_33379_33380
  10. ^ http://www.scala-lang.org/node/126 A Tour of Scala: Traits
  11. ^ http://www.ibm.com/developerworks/java/library/j-scala04298.html The busy Java developer's guide to Scala: Of traits and behaviors

関連項目[編集]

外部リンク[編集]