什么是抽象

大多数人对“抽象”一词的第一反应是形容词的抽象(abstract),于是总不自觉地将之与“深奥”、“模糊”、“不直观”、“不具体”等相关联,这固非大谬,然而在编程设计中,人们关注或强调的抽象更多地当是名词的抽象(abstraction)或动词的抽象(abstract,指“抽象化”)。比如著名的针对接口编程(programming to interface)原则、依赖反转(Dependency Inversion)原则,本质上都是提倡针对抽象编程,这样做的好处暂且不提,代码一定会因此变得更不直观、更难操纵、更不自然、更难理解吗?恐怕未必吧。如果说增加的抽象层(abstraction layer)(比如abstract class、interface等)有时会制造一些复杂的话(但最终目的是为了减少复杂),那么普通API的调用则是再常见不过了。相比一个API清晰的接口和明确的规范,它的冗长、复杂的实现代码虽然更加具体,但不是更难以把握和理解吗?


设计(不限于编程设计)中的抽象与口语中的抽象并不完全等同,由于其相对性和普适性,看似具体的事物也有抽象的一面,看似抽象的事物也有具体的一面。在提及抽象时,建议少通过形容词(abstract)来联想,多用名词(abstraction)或动词(抽象化)。或者更好地,根据上下文把抽象直接替换为“规范”(specification)、“约定”(convention)、“协议”(protocol)、“概念”(concept)、“语义”(semantic)、“接口”(interface)、“服务”(service)、“职责”(responsibility)之类的名词,或“忽略”、“分离”、“提炼”、“抽取”之类的动词。而抽象的对立面,用“具体”、“具象”、“明晰”、“直观”等就不如“细节”(detail)、“实现”(implementation)等来得更贴切。


模型是抽象的结晶,而抽象成功的标志之一是形成引起共识的概念。


理想的抽象是对某一概念本质特征进行精准的捕捉和描述,不要多也不要少。多则限制该抽象的适用范围,少则不能充分利用该抽象的特性。


在某些场合下,抽象没有提供足够的信息。为了挖掘必要的信息,人们不得不钻开抽象严密封装的外壳(crust),深入到它声称能够忽略的、此时却不能忽略的内部细节,由此形成了泄露。


抽象是对付复杂的有效工具。一方面,通过抽象剔除或屏蔽非本质的部分、提炼并合并本质的部分(即《冒号课堂》中提到的减法与除法),从而降低复杂性;另一方面,通过抽象对复杂分而治之,比如,宏观上水平分层(layer),垂直分区(partition),微观上分模块、分步骤,等等。

除了复杂外,软件设计的另一大敌人是变化。当具体的代码缺失了抽象的外壳,便丧失了必要的缓冲区,一旦变化来临,难免引发代码的强烈震荡。总而言之,把抽象作为设计的出发点,不仅能更合理地组织代码,而且为代码之间划分了明确的概念边界。这种边界的划分越合理、边界的规范越明晰、边界内的代码越遵循规范,系统越稳定、越易维护。


http://blog.zhenghui.org/2011/04/18/more-words-on-abstraction/

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

所以抽象(abstraction)不是vagua,而是high level;它起码要能达到实现隔离,能在更高的层次talk或者能用languange in problem domain来talk,即上文提到的concept。


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值