欢迎来到天天文库
浏览记录
ID:19099200
大小:18.16 KB
页数:8页
时间:2018-09-28
《软件技术方案设计原则》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、软件技术方案设计原则 软件开发是一项高强度的脑力劳动过程,到目前为止尚没有办法使软件开发完全机械化,只能靠人脑去设计,也无法保证一个软件完全没有错误。同硬件产品相比,一方面是同功能的软件产品不再需要一个生产过程,只需要拷贝就行了,而硬件产品却需要重复生产;另一方面,软件产品功能需求的变化远比硬件产品多。这就造成软件产品和硬件产品在成型之后面临的问题是不同的,软件产品主要是应付用户功能需求的变化和扩展,硬件产品主要着眼于如何大规模地生产。硬件产品的大规模生产可以交给机器去执行,而软件产品的需求变化还是要靠人脑去完成。以下是软件技术方案设计原则
2、,欢迎阅读。 如何快速开发出符合用户功能需求的软件,如何保证开发出的软件尽可能少地出现错误,如何使开发出的软件能够容易地适应用户功能需求的变化和扩展,是所有软件开发人员追求的目标;我想,也正是为了实现上述目标,才有了软件设计原则和设计模式。 软件开发是起始于面向过程的,为什么会这样呢?我想是因为面向过程地解决问题更直接,软件本身就是一个解决问题的过程;面向过程的最大问题就是不容易把问题进行分解,再大的问题都要在一个过程里面解决,从第一步直到最后一步;最多是把一个大过程分解成几个顺序执行的小过程,很考验人的逻辑推理能力,开发出的软件不容易维
3、护、重用和扩展。面象对象的方法没那么直接,需要有一个抽象的过程,要把问题抽象成一个个对象,每个对象解决一个小问题,不同对象的组合就可解决不同的大问题;而且把对象跟日常的事物联系起来,产生了属性、事件、方法这样的概念,增加了对象的直观性。 设计原则和设计模式都是针对面向对象的设计方法而提出来的,如果在软件开发中还完全采用面向过程的方法,是无所谓设计原则和设计模式的。在软件开发中,面向过程是起步,是基础,没什么好研究的了;面向对象才是深入,是王道,需要不断地去总结方法;下面的软件设计都是指面向对象的设计方法。 根据前人总结的经验,在软件开发中
4、,遵循一定的设计原则,灵活地采用一些设计模式,可以提高软件的易维护性、可扩展性以及重用的机率。关于这方面最权威的著作恐怕就是RobertC.Martin写的敏捷软件开发一书了;关于这本书,个人阅读的理解如下: 1、单一职责原则(SRP):一个类只实现一个功能;换一种说法,一个类只能有一个引起它变化的原因;在软件工程中有一个要求,叫做高内聚;一个类只实现一个功能,无凝内聚度是最高的了;这一原则可以使一个类更好地被重用;当然,“一个功能”是相对的,在某种情况下,MODEM功能是一个单一功能,而在另一种情况下,可能就要把MODEM功能再分解成多个
5、小功能; 2、开放封闭原则(OCP):开放是指一个类能够扩展功能,封闭是指这个类对于功能修改是封闭的,也就是说不能修改其已有的代码和功能;要实现这一目标,关键是抽象;在客户类中只使用抽象基类,在应用中子类继承基类,并按实际需要扩展基类的功能;按更通俗的说法就是:接口不能改变,功能可以扩展; 3、子类替换原则(LSP):就是一个子类在任何情况下,都能替换掉它的基类;这是面向对象设计方法中实现继承和多态必须遵循的一条基本原则,显然也是开放封闭原则能够实现的基础;如何实现这一原则呢?那就是子类必须要有比基类相同或更弱的前置条件,相同或更强的后置
6、条件;前置条件就是调用一个方法之前必须满足的条件,后置条件就是一个方法执行之满足的条件;为了更清楚地说明这一个问题,见下面的函数表达式: Y=F(X); F是一个函数,X是一个整型的输入参数,Y是一个整型的返回值,如果F要求X>0,返回值Y>1,则X>0和Y>1就分别是F的前置条件和后置条件;如果F是基类A中的一个函数,B是A的一个子类,并扩展了F的功能,则B类中F的前置条件必须跟A类中的相同或更弱,也就B类中的F必须至少能接受X>0,如果能同时接收X1,这是一个X>0更强的条件;B类中的F必须保证返回值Y>1,当然如果能保证Y>10更好
7、,但不能使返回值Y1的条件;不满足子类替换原则最直接的后果就是使应用程序产生BUG;必须说明的是,在实际中是很难完全遵循子类替换原则的,必须作合理的假设,在这个假设的前提下遵循子类替换原则,这就是所谓契约设计; 4、依赖倒置原则(DIP):就是上层模块不能依赖于下层模块,两者都应该依赖抽象;抽象不能依赖细节,细节应该依赖于抽象;对这一原则要灵活看待,因为这一原则和当前开发中常用组件开发方式看起来是相矛盾的;首先明确定义一下上层模块和下层模块,所谓上层模块是调用别人的模块,也可称之为客户模块,下层模块是被别人调用的模块,也可称之为服务模块;显
8、然这是一个相对的概念,因为一个模块很可能同时即调用别的模块,又被另外的模块调用;依赖倒置原则告诉我们客户模块和服务模块不能互相依赖,而只能依赖于一个抽象的基类;另外
此文档下载收益归作者所有