闲谈软件设计方法----抽象
Posted zzfx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闲谈软件设计方法----抽象相关的知识,希望对你有一定的参考价值。
http://blog.csdn.net/j00105840/article/details/5862350
闲谈软件设计方法(一)----抽象
在我的短文《职业程序员是否就是代码民工》http://www.feifanbbs.com/thread-978-1-1.html中提到,职业程序员不只是优秀的编码者,更应该是优秀的设计者。书店里面关于软件设计的书籍也不少,有许多国外经典的,但都是厚厚的一大本,也有许多攒字数骗钱的,看着憋气。于是,产生了一个想法,何不将我这几年软件开发的心得,结合实践经验,总结出来与大家分享呢。《闲谈软件设计方法》便在这种情况下产生了。
今天开始闲谈软件设计的第一个方法,本人写代码还行,写文章文笔就不行了,只能想到哪写到哪,希望尽可能将我的想法表达清楚。
(一)、抽象
软件不同于硬件,硬件一旦设计完成批量生产了就不会做太大的改变,而软件则会面临各种不同的新需求。一个大型软件架构的生命周期可以达到几年或十几年。所以,优秀的软件架构要适应相当长时间的各种变化。
很多人不解,现在计算机技术飞速发展,有谁能预知这么长时间内的变化呢?所以,优秀的软件架构一定要有很好的扩展性。
抽象是可扩展性设计最重要的方法。有一个原则,抽象层次低的设计一定不会有好的扩展性,反之,扩展性好的设计一定是基于高度的抽象。那么,该如何抽象呢?
我们知道,每个项目开始都是做需求分析,在分析需求时,我们其实已经在做一次抽象的工作了,这时我们将用户的需求抽象成软件概念。对于java/c++这种面向对象的编程语言来说,类就是一种抽象的思想。我们将用户的需求分解为不同的类,这是需求层面的抽象。同时,在后期的详细设计时,我们会进一步将一些公共流程、共有概念、公共数据等抽象为类,这些是软件开发层面的抽象。
而对于面向过程语言,如C语言,我们则是通过模块的划分、函数的提取等方式来达到抽象的目的。
说了这么多,就我的经验来说,抽象其实就是在软件开发的各个阶段,提取不变部分,分离变化部分。将变化的部分做成组件,将不变的部分高度抽象(剔除可能变化的部分)设计成平台。这样的设计具有高度的可扩展性。总结一下,下面的设计具有好的可扩展性。
这里的可扩展性体现在组件上,如果需要扩展,那么只需要对各种组件进行修改,平台不需要改动。
总之一句,我理解的抽象就是分离变与不变。而抽象的好处就是可扩展。
以上是关于闲谈软件设计方法----抽象的主要内容,如果未能解决你的问题,请参考以下文章
连载17:软件体系设计新方向:数学抽象设计模式系统架构与方案设计(简化版)(袁晓河著)