-
Traits
鎖定
在計算機編程中,Traits是面向對象編程中使用的一種概念,它表示一組可用於擴展類功能的方法。
- 外文名
- Traits
- 作 用
- 擴展類功能的方法。
Traits特點
Traits提供了一組實現行為的方法,並要求來實現一組參數化所提供行為的方法。
對於對象間的通信(以及對象之間的共享),特性在面向對象的協議(接口)和mixin之間有所不同。界面可以通過方法簽名來定義一個或多個行為,而特徵通過完整的方法定義來定義行為:即,它包括方法的主體。相比之下,mixin包含完整的方法定義,並且還可以通過成員變量攜帶狀態,而特徵通常不會。
因此,被定義為特徵的對象被創建為方法的組合,其可以被其他類使用而不需要多重繼承。在命名衝突的情況下,當一個類所使用的多個特徵具有同名的方法時,程序員必須明確地消除這些方法中將使用哪一種方法;從而手動解決多重繼承的鑽石問題。這與面向對象編程中的其他構成方法不同,在這種方法中,衝突的名稱可以通過範圍規則自動解決。
儘管mixin只能使用繼承操作構成,但特徵提供了更廣泛的操作選擇,包括:
對稱和:合併兩個不相交特徵以創建新特徵的操作;
重寫(或不對稱總和):通過向現有特徵添加方法形成新特徵的操作,可能會覆蓋其某些方法;
別名:通過為現有方法添加新名稱來創建新特徵的操作;
排除:通過從現有特徵中移除方法形成新特徵的操作。 (將它與別名操作組合會產生淺層重命名操作)。
特質的構成方式如下:
性狀組成是可交換的;添加特徵的順序並不重要。例如,給定性狀S = A + B,則性狀T = B + A與S相同。
衝突的方法被排除在組合物之外。
Traits支持的語言
Traits最初來自編程語言Self ,並受以下編程語言支持:
AmbientTalk、C++、Curl、D、ECMAScript、Groovy、Haxe、Java、JavaScript、Julia、Kotlin、Lasso OCaml、Perl、PHP、Python、Racket、Ruby、Smalltalk、Swift。
Traits例子
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) { // … }}
- 參考資料
-
- 1. 基於Traits泛化技術的SLEAPI編譯碼處理 .萬方[引用日期2018-06-29]
- 詞條統計
-
- 瀏覽次數:次
- 編輯次數:3次歷史版本
- 最近更新: tujiaqi大本营