Traits

在計算機編程中,Traits是面向對象編程中使用的一種概念,它表示一組可用於擴展類功能的方法。

基本介紹

  • 外文名:Traits
  • 作用:擴展類功能的方法。
特點,支持的語言,例子,

特點

Traits提供了一組實現行為的方法,並要求類實現一組參數化所提供行為的方法。
對於對象間的通信(以及對象之間的共享),特性在面向對象的協定(接口)和mixin之間有所不同。界面可以通過方法簽名來定義一個或多個行為,而特徵通過完整的方法定義來定義行為:即,它包括方法的主體。相比之下,mixin包含完整的方法定義,並且還可以通過成員變數攜帶狀態,而特徵通常不會。
因此,被定義為特徵的對象被創建為方法的組合,其可以被其他類使用而不需要多重繼承。在命名衝突的情況下,當一個類所使用的多個特徵具有同名的方法時,程式設計師必須明確地消除這些方法中將使用哪一種方法;從而手動解決多重繼承的鑽石問題。這與面向對象編程中的其他構成方法不同,在這種方法中,衝突的名稱可以通過範圍規則自動解決。
儘管mixin只能使用繼承操作構成,但特徵提供了更廣泛的操作選擇,包括:
對稱和:合併兩個不相交特徵以創建新特徵的操作;
重寫(或不對稱總和):通過向現有特徵添加方法形成新特徵的操作,可能會覆蓋其某些方法;
別名:通過為現有方法添加新名稱來創建新特徵的操作;
排除:通過從現有特徵中移除方法形成新特徵的操作。 (將它與別名操作組合會產生淺層重命名操作)。
特質的構成方式如下:
性狀組成是可交換的;添加特徵的順序並不重要。例如,給定性狀S = A + B,則性狀T = B + A與S相同。
衝突的方法被排除在組合物之外。
嵌套性狀相當於扁平化特徵;構圖層次不影響特徵行為。例如,給定性狀S = A + X,其中X = B + C,則性狀T = A + B + C與S相同。

支持的語言

Traits最初來自程式語言Self ,並受以下程式語言支持:
AmbientTalkC++CurlDECMAScriptGroovyHaxeJavaJavaScriptJuliaKotlin、Lasso OCaml、PerlPHPPythonRacketRubySmalltalkSwift

例子

PHP
// The templatetrait TSingleton{    private static $_instance = null;    private function __construct(){} // Must have private default constructor and be aware not to open it in the class    public static function getInstance()    {        if (null === self::$_instance)        {            self::$_instance = new self();        }        return self::$_instance;    }}class FrontController{    use TSingleton;}// Can also be used in already extended classesclass WebSite extends SomeClass{    use TSingleton;}
這允許模擬多重繼承的方面:
trait TBounding{    public $x, $y, $width, $height;}trait TMoveable{    public function moveTo($x, $y)    {        // …    }}trait TResizeable{    public function resize($newWidth, $newHeight)    {        // …    }}class Rectangle{    use TBounding, TMoveable, TResizeable;    public function fillColor($color)    {        // …    }}

相關詞條

熱門詞條

聯絡我們