2018年8月10日星期五

黑箱作業 - Encapsulation

Encapsulation 是 Object Oriented Programming 其中一個概念,這裡有好幾篇文章,換過不同例子解說同一概念。又翻炒這個概念又有甚麼用?不,【概念】這東西就是拿來用的,同一概念,修改一下,改變想法,能翻炒更多次。


Encapsulation


Encapsulation 目的在於隱藏細節,把複雜麻煩的處理包裝成單一東西。
只需理解【輸入】及【輸出】就好,【處理】這種麻煩事,包裝成【黑箱】,不需要理解【黑箱】做甚麼、怎樣做。很抽象?生活例子多的是。



快餐店


去服務台下單,【輸入】鈔票及餐號,然後等【輸出】食品。不是開放式廚房的話,會知道廚師怎【處理】訂單嗎?廚師一邊挖鼻一邊夾漢堡,會知道嗎?廚房的黑箱作業。

使用電腦


用電腦上網看網頁,【輸入】網址、【輸出】網頁到顯示器。如果本身有讀過電腦,知道用鍵盤輸入網址,然後經過數據機,連接到互聯網,下載網頁到本機上,最後顯示在顯示器……好了,其實中間的都是廢話,即使沒讀過電腦,只懂【用】電腦就好,電腦怎運作及【處理】輸入,只要正常輸出的話,中間的處理根本沒所謂,電腦的黑箱作業。

會吃飯,但不需要知道食物如何制作,會用工具,但不需要知道工具詳細構造,會玩遊戲,但不需要知道程式碼怎運作……看,例子很多吧?

假如把 Encapsulation 概念套用在寫程式上……


Library


最快聯想到 API 作為例子,不用知道 function 的程式碼怎樣,如何處理輸入,只需理解【輸入】,能拿到想要【輸出】就萬事如意。試想一下,要理解全部運作才能寫程式,要學到何年何月?能簡化就簡化,可用 API 解決問題,【用】 API 處理,沒有辨法之下才自己寫。

Container


這部份可能很多人想不到,IT分工很細,這部份已經是 Server administrator 工作,因為寫程式,不必知道怎去管理及設定 Server。從程式員角色看 Server,【輸入】設定檔,【輸出】Object,Container 提供各種 Service【處理】細節問題。很抽象?舉例……

JNDI


符合 J2EE Container 標準的 Application Server ( 例如 TomEE ),一定要提供 JNDI Service。

JNDI 設定複雜,不太好解說【輸入】,但【輸出】就簡單得多,變成常用的 object instance 後,想怎做就怎做,跟普通寫程式一樣,日後會補上 JNDI + TomEE Plus 教學,到時再說,現在先有個概念。

TomEE jndi setting
http://tomee.apache.org/advanced/client/jndi.html

Web Service


有點像使用 API,這個技術可以開好幾篇教學的兇殘份量,不需要知道 Server 那邊怎用 Web Services Description Language ( WSDL ) 實現服務,在 Client 那邊,只需要【用】。看完也不知道跟黑箱作業有甚麼關係?看看就好,這一刻不用深究。

Java™ EE 8 Technologies Specification
https://www.oracle.com/technetwork/java/javaee/tech/index.html

沒有留言:

發佈留言

設有留言驗證及審查,檢閱後,才會顯示留言。
本人惰性很高,留言或許會石沉大海。