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 ,並受以下程式語言支持:

AmbientTalk、C++、Curl、D、ECMAScript、Groovy、Haxe、Java、JavaScript、Julia、Kotlin、Lasso OCaml、Perl、PHP、Python、Racket、Ruby、Smalltalk、Swift。

例子

PHP

這允許模擬多重繼承的方面:

相關詞條

熱門詞條

聯絡我們