![](/img/trans.png)
[英]Eiffel: Best practices with getters return Void if object not found?
[英]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
示例) make
像create {LINKED_LIST}.make
如果我錯了糾正我。 提前致謝!
在將default_create
添加到具有相應語義的ANY
之前,已經開發了許多Eiffel庫。 這解釋了為什么基礎庫的許多類都不使用它。
同樣,創建過程可以帶有某種特定意義。 例如, make
可以創建一個使用引用相等來比較內部對象的容器,而make_equal
可以創建一個使用對象相等來代替容器的容器( HASH_TABLE
就是這種情況,盡管有一個附加的參數來指示期望的元素數,該參數可以通過其他一些設計選擇省略)。 在這種情況下, default_create
和default_create_equal
將是非對稱的,而make
和make_equal
是對稱的,因此設計更加一致。
如您所指出的那樣, default_create
不應帶有任何后代可以預期的任何特定行為,而只是某些基本行為。
所有其他創建過程是否應調用default_create
很大程度上取決於設計。 一個幾乎是規則的示例是庫“ vision” ,該庫以default_create
編碼的初始化順序正確,這對於無效性安全至關重要。 仍然可以編寫一個類(基於該庫)以正確執行初始化,而無需在其創建過程中調用default_create
,但是具有易於遵循的模式可以簡化開發。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.