簡體   English   中英

埃菲爾鐵塔:創建程序的最佳做法

[英]Eiffel: best practices for creation procedures

動物

deferred class ANIMAL
inherit
    ANY
        redefine
            default_create
        end
feature

    creator: like Current

    guts: GUTS

    default_create
        do
            create guts
        end

    make_malformed
        do
            default_create
        end

end --class

class PIG

inherit
    ANIMAL
        redefine
            make_malformed
        end

create
    default_create,
    make_malformed,
    make_from_insemination

feature
    guts: GUTS

    make_malformed
        do
            Precursor
            set_left_eye (create {MALFORMED_EYE})
        end

    make_from_insemination (some_humain: HUMAIN)
        do
            default_create
            creator := some_humain
        end

end --class

在我對最佳做法的看法中,我會說

  • 如果沒有進行創建過程的特殊意義(例如我的make_malformed示例),請重新定義default_create
  • 所有創建過程都應調用default_create並添加特定行為(例如我的make_from_db示例)
  • 那么, 什么是許多圖書館的艾菲爾其添加的目的 makecreate {LINKED_LIST}.make

如果我錯了糾正我。 提前致謝!

在將default_create添加到具有相應語義的ANY之前,已經開發了許多Eiffel庫。 這解釋了為什么基礎庫的許多類都不使用它。

同樣,創建過程可以帶有某種特定意義。 例如, make可以創建一個使用引用相等來比較內部對象的容器,而make_equal可以創建一個使用對象相等來代替容器的容器( HASH_TABLE就是這種情況,盡管有一個附加的參數來指示期望的元素數,該參數可以通過其他一些設計選擇省略)。 在這種情況下, default_createdefault_create_equal將是非對稱的,而makemake_equal是對稱的,因此設計更加一致。

如您所指出的那樣, default_create不應帶有任何后代可以預期的任何特定行為,而只是某些基本行為。

所有其他創建過程是否應調用default_create很大程度上取決於設計。 一個幾乎是規則的示例是庫“ vision” ,該庫以default_create編碼的初始化順序正確,這對於無效性安全至關重要。 仍然可以編寫一個類(基於該庫)以正確執行初始化,而無需在其創建過程中調用default_create ,但是具有易於遵循的模式可以簡化開發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM