有人可以告訴我,爲什麼我們在Oracle PL/SQL中要求包Spec是必需的。無論如何,包體具有所有的規格信息。plsql包中的規範 - 爲什麼需要它
回答
包規格的從封裝體的分離是的語言,如PL/SQL設計的根本重要的部分。這是PL/SQL允許您使用封裝原則的方式。
說明書是指定包的公共部分,即,函數,過程,類型和常數應該是由其他程序單元或外部呼叫者訪問的方式。
Body不僅封裝了實現細節,還允許您創建私有函數和過程;也就是說,它們只允許被同一包中的其他函數和過程使用,並且不能被外部調用者調用。
封裝帶來了許多好處 - 包括自我記錄:如果某種方法是私人方式,那麼除非在同一個包中,否則將保證不會有任何呼叫 - 所以您可以自由地更改它,知道你的改變至少不會破壞使用該軟件包的其他系統。
軟件包可用作API;該規範將成爲設計哪些功能和程序的文檔,並打算由系統中的其他代碼調用。
軟件包規範包含軟件包中可能在軟件包外部引用的所有公共可用元素的定義或規範。規格就像一個大的聲明部分;它不包含任何PL/SQL塊或可執行代碼。如果規範設計良好,開發人員可以從中學習使用該軟件包所需的一切。不應該有任何需要「落後」規範的接口,並查看實體的內容。
在一個包的公共和私人元素之間的區分提供了PL/SQL開發人員在他們的數據結構和程序前所未有的控制。如下面的Booch圖顯示 注意內部和外部的兩個標籤。外部由您編寫的所有程序組成,而這些程序不是手頭套件的一部分(外部程序)。內部由包體(內部或實現 包)組成。
這是我們可以從Booch的圖得出的結論:
- 外部程序不能從外部越過邊界內。也就是說,外部程序可能不會引用或調用包體內定義的任何元素。它們是私密的,在包裝之外是不可見的。
- 包裝規格中定義的那些元素(在圖中標記爲Public)橫跨內部和外部之間的邊界。這些程序可以由外部程序調用(從外部),可以被私人程序調用或引用,並且可以反過來調用或引用程序包中的任何其他元素。
- 因此,包裝的公共元素提供了包裝內部的唯一路徑。通過這種方式,包規範可以充當整個包的控制機制。
- 如果您發現以前的私有對象(例如模塊或光標)應該被公開,只需將該對象添加到包規範並重新編譯即可。它將在包裝外部可見。
這種解釋是oracle pl/sql programming 5th edition啓發Steven Feuerstein
謝謝霍克.. :) –
- 1. NodeType.Certificates需要什麼樣的規範?
- 2. 爲什麼它需要lex中的規則?
- 3. 什麼是python中的類,它做什麼,它爲什麼需要它?
- 4. 爲什麼需要寶石規範,爲什麼一些寶石創作者不提供它們?
- 5. 爲什麼要包含/需要多次?
- 6. 爲什麼我需要Iterator接口,爲什麼要使用它?
- 7. 爲什麼GLfloat需要全局範圍?
- 8. ActionMappingParametersInteceptor - 爲什麼我需要它
- 9. 什麼是R中的因子,爲什麼我們需要它
- 10. Javascript dispatchEvent - 爲什麼需要?
- 11. 爲什麼它不需要鏈接libm?
- 12. Sbt:爲什麼它需要scala-lang 2.10.3?
- 13. ePub規範說明需要
- 14. 模型中有什麼?爲什麼我們需要使用它
- 15. [0] .outerHTML - 爲什麼需要包含'[0]'?
- 16. Java:爲什麼需要包裝類?
- 17. 爲什麼我們需要包裝類
- 18. 爲什麼JAX-WS需要包裝類?
- 19. 我需要爲Java RandomUtils包含什麼?
- 20. Android:什麼是規範包名?
- 21. 爲什麼我們需要YII中的規則方法?
- 22. ELF文件 - 什麼是部分,爲什麼我們需要它?
- 23. 什麼是服務發現,爲什麼你需要它?
- 24. 爲什麼需要「{} \」?
- 25. 爲什麼需要
- 26. Windows上的Spark - 什麼是winutils,爲什麼我們需要它?
- 27. EntityManager.flush是做什麼的,爲什麼我需要使用它?
- 28. 什麼是!!的意義!在C - 爲什麼它需要?
- 29. GLEW是做什麼的,爲什麼我需要它?
- 30. 爲什麼android需要jvm
謝謝傑弗裏:非常有幫助的解釋 –