[爆卦]Wrapper是什麼?優點缺點精華區懶人包

為什麼這篇Wrapper鄉民發文收入到精華區:因為在Wrapper這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者CoNsTaR ((const *))看板C_and_CPP標題Re: [問題] 大家常常說的w...


※ 引述《OfficeGL (妤欣)》之銘言:
: 網路上查詢好久,可能我不是本科系的關係
: 很難理解這個是什麼?
: 不知道是不是所謂的ADT概念呢
: 還是就單純API的意思?
: 這邊開始好抽象
: 先謝謝大家了~

1. Wrapper:
用來(臨時)減少某個類別在某些情境的使用難度,可能隱藏、修改類別功能
用 wrapper 的好處是不用更動被 wrapped 的程式碼,等到確定可以統一了再一次 merge
進去

修改類別功能:不改變實際上做的事情
- 只改變資料 representation、格式
(假設原本函數回傳 int,而且某些情境下它只會是年齡而且要用來顯示,所以改成 Str
ing 然後後面加歲或周歲)
- 或是減少函數參數改用預設
(假設某個 case 就只會使用 18 當參數,那這個參數就可以省略)


2. API:
一組沒有實作的函數模型、結構 (class,struct) 再加上規格、文件描述功用


3.ADT:
可以指兩種不同的東西, Algebraic Data Type 或 Abstract Data Type

- Algebraic Data Type:
泛指一種支援把 inheritance (不精確) 和 composition 寫在一起的類型定義方式
(你講的 ADT 應該不是這個,是 Abstract Data Type)

- Abstract Data Type:
其實就只是指沒有寫壞的類別定義,該露的露,不該露的沒有露

類別名稱要夠抽象(才可以講我隱藏了哪些不重要的細節)的同時,程式本身要夠具體(
夠具體才會有細節),在剛好滿足這樣的前提下該露的露,不該露的沒有露,而且本身功
能夠具體的類別
(個人認為這是個假議題)



Wrapper <=> API
API 更多說明提供了使用者哪些函數,而且指這些函數的"文字描述或宣告"
Wrapper 指用來 adapt 一個類別的"那些程式碼本身"


Wrapper <=> Abstract Data Type
Abstract Data Type 僅僅指沒設計壞的,功能夠具體的類別
然而提到 Wrapper 就代表還有一個被 wrapped 的類別,這個類別可能不太適用某些情境
,但情境中需要的基本功能都可以用它來實現(可能需要稍作修改),所以為它寫一個 w
rapper 或 adapter



順便 Adapter <=> Wrapper
Adapter 是 ad-hoc 的,而且專門用來解決 incompatibilities 問題
通常 adapter adapt 的兩邊都是不能更改的,adapter 的功用就是負責連接兩邊

Wrapper 則是用來臨時更改功能/解決 incompatibility 問題,不是最終方案
通常有 wrapper 出現就代表可能程式有還沒確定或統一的地方,等到需求/架構確定了就
會把 wrapper 拿掉,要馬統一要馬獨立出來


--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 174.112.170.249 (加拿大)
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1568961812.A.AF3.html
※ 編輯: CoNsTaR (174.112.170.249 加拿大), 09/20/2019 16:12:37

你可能也想看看

搜尋相關網站