說「帶繼承性,你被鎖定在編譯時關於代碼行爲的決定」是什麼意思。我想知道編譯時決策的含義
回答
我建議這個職位從Donal Fellows on Programmers,
一些語言是相當強烈的靜態的,只允許兩個類之間的繼承關係的 規範在 這些類定義的時間。對於C++,定義時間爲 幾乎與編譯時間相同。 (它在 Java和C#中略有不同,但不是很多)。其他語言允許動態重新配置類(以及Javascript中類對象類型的對象)的關係;有些甚至允許修改現有對象的 類,或者改變 類的超類。 (這可能會導致總邏輯混亂,同時也可以 模型現實世界中的髒東西相當不錯的。)
但對比這組成,其中一個物體和另一個的 關係不是他們 類定義是很重要的關係(即,他們的類型),而是由參考文獻 ,每個關係與另一個。通用組合是一種非常強大而且無處不在的安排對象的方法:當一個對象 需要知道另一個對象時,它會引用該對象並根據需要在其上調用方法。只要你 開始尋找這種超級基本模式,你會發現它絕對無處不在,你會發現它 ;避免它的唯一方法是把所有的 都放在一個對象中,這將會非常愚蠢! (還有更嚴格的 UML組合/匯聚,但這不是GoF的書是什麼 談論那裏。)
一個關於組合關係的事情之一是, 特定對象不需要是硬約束,以彼此。具體對象的 模式非常靈活,即使在非常靜態的 語言(如C++)中也是如此。 (讓事情非常靜態是有好處的: 可以更密切地分析代碼,並且至少有可能在更少的開銷下發布更好的代碼。)回顧一下,與許多其他動態語言一樣,可以使用Javascript假裝它 根本不使用匯編;當然只是假裝,但是基礎語言模型不需要轉換爲固定的中間格式(例如,「磁盤上的二進制可執行文件」)。編譯完成的操作在運行時完成,如果事情變化太大,可以輕鬆重做 。 (迷人的是,這樣的編譯好的 工作就可以完成,甚至從一個非常有活力的 基礎開始...)
一些GOF模式才真正有意義的語言 的背景裏的東西是相當穩定。沒關係;它只是意味着並不是所有影響模式的力量都必須列出。關於學習模式的一個關鍵點 是它幫助我們瞭解這些重要的差異和注意事項。 (其他圖案更普遍 保持你的眼睛爲這些開放。)
- 1. 我想知道cv錯誤的含義
- 2. Emacs如何知道我想要編譯的文件?
- 3. 我想知道,編譯器將如何獲得字符序列
- 4. 編譯器不知道我的包含文件
- 5. 我如何知道我在編譯mac?
- 6. 我想知道MKMapView?
- 7. 我想知道所有關於編碼
- 8. 我想知道有關編程
- 9. 我想知道任何RTOS的備份策略
- 10. PInvoke在編譯時不知道DLL嗎?
- 11. 編譯器如何知道何時不重新編譯?
- 12. 想知道源和目標端口的含義。 (wireshark)
- 13. 我想知道SQL命令
- 14. C++我想知道對象
- 15. 我想知道在Java中
- 16. 我想知道在休眠
- 17. 基於宏參數的預編譯時決策
- 18. 火花集羣:我想知道以下錯誤和可能原因的含義:
- 19. 我想知道我的形式提交
- 20. 想知道我是否爲facebook javascript sdk編寫了頻道url。
- 21. 解決與Windsor的通用接口而不知道編譯時的類型?
- 22. 想知道的XPath
- 23. 我想知道這個原因和解決方案
- 24. 請幫助我....我想知道如何編寫背景扣除
- 25. 我想知道爲IntentFilter定義的所有類型的操作?
- 26. OpenACC知道CAPS編譯器的限制
- 27. 如果我在編譯時不知道類,我該如何獲得Enum的值?
- 28. 我想知道的.htaccess規則
- 29. 我想知道代碼的輸出
- 30. 我想知道收費的百分比