Trait_(計算機科學)

Trait在面向對象程序設計中 ， 是一個不可實例化 （ uninstantiable ） 的方法與類型的集合 ， 爲一個對象或算法提供了策略 （ policy ） 或實現自身接口的細節功能 。 trait爲類提供了一套方法 ， 同時也意味着類必須實現這麼一套方法 。 在面向對象程序設計中 ， protocol 、 interface 、 trait 、 mixin具有類似的涵義 。 protocol / interface定義了函數原型 ； trait還定義了方法的完全實現 ； mixin除了方法的完整實現 ， 還可以通過成員變量保存了狀態信息 ， 而trait通常不會如此 。 理論上 ， traits支持一批組合 （ composition ） 操作 ： 合併不相交的traits （ symmetric sum ） 產生一個新的trait 覆蓋 （ asymmetric sum ）: 對一個已有的trait增加方法 ， 可以覆蓋已有的方法 別名 （ alias ）: 對已有方法增加別名 ， 從而產生一個新的trait 排除 （ exclusion ） ： 從已有trait中刪除方法從而產生一個新的trait 嵌套的trait自動平面化 。 例如 給定trait S = A + X, 其中 X = B + C, 那麼trait T = A + B + C 等價於 S