• 特質(計算機編程)

    編輯
    本詞條由“匿名用戶” 建檔。

    特質(計算機編程)

    編輯

    計算機編程中,特質是一個用于面向對象編程的概念,它表示一組可以用來擴展類的功能的方法。

    特質(計算機編程)的理由

    編輯

    在面向對象編程中,行為有時會在互不相關的類之間共享。例如,許多不相關的類可能有方法將對象序列化為JSON。在歷史上,有幾種方法可以解決這個問題,而不需要在每個需要該行為的類中重復代碼。其他的方法包括多重繼承和混合器,但這些都有缺點:如果混合器的應用順序被改變,或者在父類或混合器中添加了新的方法,那么代碼的行為可能會意外地改變。特質通過允許類使用特質并獲得所需的行為來解決這些問題。如果一個類使用了一個以上的特質,使用特質的順序并不重要。特質所提供的方法可以直接訪問類的數據

    特質(計算機編程)的特征

    編輯

    特質結合了協議(接口)和混合器的各個方面。像接口一樣,特質定義了一個或多個方法簽名,實現類必須提供這些簽名的實現。就像一個混血兒,特質為實現類提供額外的行為。在不同特征提供的方法之間出現命名沖突的情況下,程序員必須明確區分這些方法中的哪一個將在類中使用;從而手動解決多重繼承的鉆石問題。這與面向對象編程中的其他組合方法不同,在這些方法中,沖突的名稱會通過范圍規則自動解決。可以用特質進行的操作包括。對稱和:合并兩個互不相干的特征以創建一個新的特征的操作覆蓋(或不對稱和):通過向現有的特征添加方法形成一個新的特征的操作,可能會覆蓋它的一些方法別名:通過為現有的方法添加一個新的名字創建一個新的特征的操作排除:通過從現有的特征中刪除一個方法形成一個新的特征的操作。(如果一個方法被排除在特質之外,該方法必須由消費該特質的類或該類的父類來提供。這是因為特質所提供的方法可能會調用被排除的方法。特質組合是換元的(即給定特質A和B,A+B等同于B+A)和關聯的(即給定特質A、B和C,(A+B)+C等同于A+(B+C))。

    局限性

    編輯

    雖然特征比許多替代方法具有明顯的優勢,但它們也有自己的局限性。

    所需的方法

    編輯

    如果trait要求消費類提供某些方法,trait就不能知道這些方法是否與trait的需求有語義上的等同。對于某些動態語言,如Perl,所需的方法只能通過方法名來識別,而不是完整的方法簽名,這就更難保證所需的方法是合適的。

    排除方法

    編輯

    如果一個方法被排除在特質之外,該方法就會成為特質的"必需"方法,因為特質的其他方法可能會調用它。

    支持的語言

    編輯

    特質最初來自于編程語言Self,被以下編程語言所支持。AmbientTalk。結合了Selftraits的特性(基于對象的多重繼承)和Smalltalk的Squeaktraits(需要程序員對traits進行顯式組合)。它建立在對有狀態和可凍結的traits的研究上,以實現traits內的狀態,這在xxx個定義中是不允許的。C#。從8.0版本開始,C#支持默認的接口方法,這些方法具有traits的一些屬性。C++:在標準模板庫和C++標準庫中使用,支持通用容器類和BoostTypeTraits庫。Curl:作為mixins的抽象類允許方法的實現,因此構成了另一個名字的traits。D:從2.003版本開始,__traits語言擴展和std.traits模塊輔助模板提供了編譯時traits。

    可擴展性

    與其他語言特性(特別是模板和混搭)一起,它們允許根據接口和類型靈活地自動生成方法。D還允許成員方法和變量的顯式別名,包括轉發到多個成員類。FortressGroovy。從2.3版本開始,Haskell。在Haskell中,Traits被稱為類型類。Haxe:從2.4.0版本開始。在手冊中被稱為靜態擴展,它使用了使用關鍵字Java。從第8版開始,Java支持默認方法,這些方法具有traits的一些屬性。JavaScript。Traits可以通過函數和代理實現,也可以通過提供traits的庫實現。Julia:有幾個包實現了traits,例如Kotlin。

    內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/170842/

    (1)
    詞條目錄
    1. 特質(計算機編程)
    2. 特質(計算機編程)的理由
    3. 特質(計算機編程)的特征
    4. 局限性
    5. 所需的方法
    6. 排除方法
    7. 支持的語言

    輕觸這里

    關閉目錄

    目錄
    91麻精品国产91久久久久