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