Re: [問題] 大家常常說的wrapper到底是什麼?

作者: CoNsTaR ((const *))   2019-09-20 14:43:30
※ 引述《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 拿掉,要馬統一要馬獨立出來

Links booklink

Contact Us: admin [ a t ] ucptt.com