软件设计之关于抽象的理解篇
建立时间: 2009 年 6 月 18 日 17:30:57
作者:黄奕鹏
摘要: 介绍抽象这个概念,以及和软件设计的关系
抽象是软件设计过程中最常用的方法,可以说是任何时候都要用。做软件开发已经好多年了,今天我要好好的剖析一下抽象的本质,以及如何抽象。因为水平有限,只能说到这个程度,有什么错误希望大家不吝指出。
概念部分
首先,抽象是什么?
大家都对抽象这个词有一定的理解,但要正真了解全面的含义还要查查字典。
抽象有好多总定义:
1 .从许多事物中,舍弃个别的、非本质的属性,抽出共同的、本质的属性的过程,是形成概念的必要手段。 ( 摘自 http://baike.baidu.com)
2. 不能或没有具体经验到的,只是理论上的;空洞不易捉摸的。与“具体”相对。 ( 摘自 http://baike.baidu.com)
3. 抽象化是指以缩减一个概念或是一个现象的资讯含量来将其广义化的过程,主要是为了只保存和一特定目的有关的资讯。例如,将一个皮制的足球抽象化成一个球,只保留一般球的属性和行为等资讯。 ( 摘自 http://zh.wikipedia.org)
我是这样理解的:抽象是为了某一个或多个目的在一定得经验和知识的基础上,将事物的非本质属性舍弃,保留本质重要的属性。
理论部分
下面我画了一张说明抽象的视图:
软件需求、架构设计、模型等都是思维活动的结果,其主要的思维活动就是抽象。
抽象结果有如下性质:
1. 抽象结果是有一定目的,是重要的信息,是指导未来行为的主要依靠。
如架构设计,如果抽象的有问题,他会导致一系列依赖与他的软件开发活动错误。所以在软件开发架构设计过程中要谨慎、要反复验证。
2. 抽象结果是依赖于经验和知识的,抽象过程可能是花了很多时间的。
不同的人对同一件事物的抽象结果是不同的,应该理解这种不同。如软件架构设计就是一个典型的这种问题,不同的人会有不同的设计结果。我们自己的结果不一定就比别人的好。
交流构架设计也是比较困难的。假如我们是一位倾听者,就应该努力的使自己的思路跟的上讲述者的思路。假如我们要把自己的架构讲给别人听,也应该考虑倾听者的接受程度。
3. 抽象结果比原始信息更加精炼,有助于对原始信息的本质把握。
要多学习多锻炼抽象思维方法,这样有助于指导其他的一切行为。
实践部分
下面讲讲关于软件设计这个抽象行为的一些想法
首先软件设计(抽象结果)的高水平地错误,可以使软件开发过程更加简单有序,可以使软件做的稳定可靠。如果抽象的不准确,有逻辑问题,这样的软件设计将起到反作用,甚至使整个软件开发失败。软件设计是应该多投入时间和脑力的,反复验证的,投入的时间不会白费。借用某本书上的一句话,软件设计应该做到不能再设计为止。其次,关于软件设计的交流问题,软件设计是一种抽象结果,大家对他的理解水平依赖于经验和知识以及投入的时间。所以软件设计中需要交流的部分,尽量要考虑到大家的接受程度。如果在默契的团队中交流软件设计会相对简单一些,如果在陌生的团队中交流软件会复杂一些。最后,软件开发过程中如果能够遇到默契的伙伴请大家珍惜。
其他部分
抽象程度的高低
这里讲的抽象程度高低是指对一个事物,我们想的深入了把各种关系都梳理简化了,就定义为抽象程度高,不太深入的抽象定义为抽象程度低。基于不同的目的应该控制好抽象程度。
抽象结果的交流
需要充分考虑的我们和交流对象的差异(经验、知识、能力)。抽象程度高的结果很容易使对方不能理解的,要理解也会花很多时间的。要理解,抽象是建立在一个人的经验的基础之上的。如果自己抽象的基础知识经验和别人非常不一样,应该理解别人很难接受(学习)这种抽象结果。
谢谢大家,耐心观看。主要是我的一些想法,即然看了就是朋友欢迎留言指教。
如果你想进一步了解抽象这个词,可以阅读如下内容:
http://baike.baidu.com/view/5293.htm
http://zh.wikipedia.org/w/index.php?title=%E6%8A%BD%E8%B1%A1%E5%8C%96&variant=zh-cn