软件设计应该遵循的基本原则有哪些?
1.1)高内聚、低耦合
一个软件系统要有一个稳定的架构,不会随着需要的改变在发生巨大的变动。因此,高内聚、低耦合是一个软件系统设计中必须遵循的基本原则。
所谓高内聚,是指一个软件模块内各个元素彼此结合的紧密程度要高,即一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
所谓低耦合,是指一个软件系统内不同模块之间的互连程度要低。不同模块之间的联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性、调用的方式及传递的信息。
因此,在一个软件系统中,应当尽量保证模块的独立性,模块实现功能职责单一,越简单越好。这样有利于系统复用,并且大大减少模块之间的依赖,系统稳定性高,更易于维护。
1.2)面向抽象编程
在面向过程的软件开发中,上层组件调用下层组件,就意味着上层组件依赖于下层组件,当下层组件发生剧烈变化时,上层组件也要跟着一起发生变动,这将导致软件组件模块的复用性大大降低,从而增加软件开发成本,使软件结构设计上存在一定的臃肿性,不利于后期系统维护工作。
在面向对象的软件设计中,很好地解决了上述问题,使程序都依赖于抽象,而不是依赖具体实现。因为在一般情况下抽象的变化概率比较小,依赖抽象编程大大降低了客户应用程序与实现细节的耦合度,提升了软件结构的健壮性。只要保证抽象不发生变化,客户程序就不需要改变。这就是依赖倒置原则。
在程序中要尽量使用抽象类型作为对象实例变量类型,这样就保证了将客户程序与具体实现之间解耦,因为使用的是抽象类型,因此具体实现的改变不会影响抽象类型的改变。
1.3)多用组合少用继承
在面向对象的软件设计中,对于类的扩展,首先想到的是使用类的继承来实现,由子类来继承父类,从而完成对子类功能的扩展。继承的好处是可以尽量让相同的属性或者功能复用,但是随着项目越来越大,需求的不断变化,继承就会变得越来越臃肿,后期难以控制和维护。最重要的是,继承会不分青红皂白地把父类的公有和受保护的方法统统继承下来,而这些方法可能是子类不需要的功能,会对子类产生一些危害。
如果使用组合方式,就不会出现上述继承的问题。所谓对象组合,是指在一个对象中含有另外一个对象的引用,从而可以使用该内部对象的引用作出一些处理行为。使用组合方式的好处有以下几点:首先,不会对类产生有害的影响;其次,组合方式要比继承方式灵活,因为是由系统运行动态地决定使用对象与否;最后,不会造成因继承而引起的类膨胀,减少了对父类的依赖性。
1.4)“开-闭”原则
“开-闭”原则,即“对扩展开放,对修改关闭”,指的是在软件设计中,当对某一软件实体进行扩展时,尽量不要去修改原有的软件实体,换句话说就是在不修改原有软件实体的情况下对其进行扩展。这种软件设计方式其实是一种目标,它考虑了软件后期的维护等其他因素。一个软件系统如果可以达到这个目标,那它就是可扩展、易维护的。
在软件设计领域中,众多设计模式的应用就是为了达到这个目标。“开-闭”原则是一种很抽象的设计原则,更像是一种倡导的口号,其他设计原则都是为了实现“开-闭”原则的具体原则。“开-闭”原则与其他设计原则就好比抽象父类与子类的关系一样。
软件设计应该遵循的基本原则有哪些?相关推荐
- 大家一起学面向对象设计模式系列Chapter 02 软件设计的基本原则
我们为什么要使用设计模式呢?有人可能会说为了设计出"高内聚低耦合"的软件."高内聚低耦合"的软件实际上也就是本文所说的具有可维护性和可复用性的软件. 这篇文章主 ...
- 分离变与不变——软件设计的基本原则分析
分离变与不变 --软件设计的基本原则分析 小到代码,大到模块.系统,我们都可以将其粗略的分为两个部分:变化的部分和不变的部分.有些代码,不管是维护人员来了.走了,还是版本换了.变了,它依然是那样.可怕 ...
- 【设计模式】软件设计遵循——六大原则
软件设计遵循--六大原则 1)开闭原则 定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭 原则:用抽象构建框架,用实现扩展细节 优点:提高软件系统的可复用性和可维护性 2)里氏替换原则 定 ...
- 【转载】一些软件设计原则
总结得非常好, 设计必读. 转自陈皓老师的 <一些软件设计的原则>,根据自己的理解调整了下顺序,少部分字句做了修改. 一个好的程序员通常由其操作技能.知识水平,经验层力和能力四个方面组成. ...
- 设计模式 - 软件设计的七大原则
文章目录 前言 1. 软件设计模式原则 2. 开闭原则 1. 概念 2. 例子 3. 里氏替换原则 1. 概念 2. 例子 4. 依赖倒置原则 1. 概念 2. 代码 5. 单一职责原则 说明 6. ...
- UML图和软件设计原则
笔记来源于黑马程序员但不仅仅是黑马 UML图和软件设计原则 UML图 2.1 类图概述 2.2 类图的作用 2.3 类图表示法 2.3.1 类的表示方式 2.3.2 类与类之间关系的表示方式 2.3. ...
- 软件工程学习笔记(四)软件设计
软件设计概述 软件设计的基本特征:目标,形态,内容 从技术角度考虑,软件设计主要包括4方面内容: 系统结构设计:确定软件系统的结构,即软件系统的组成,以及各组成成分(子系统或模块)之间的相互关系 接口 ...
- 【软件工程】软件设计概述
软件设计是一个过程,通过这个过程,创建一个软件工件的规范,目的是实现目标,使用一组原始组件并受到约束.[1]软件设计可以指"所有涉及概念化.框架化.实现.调试的活动,最终修改复杂系统&quo ...
- 面向过程的软件设计方法
面向过程的软件设计方法 前面主要是对系统的分析,从而明确我们系统的逻辑模型.也就是说,通过前面几章我们清楚了"系统需要做什么?".而软件设计阶段主要任务则是要实现系统逻辑模型向物流 ...
最新文章
- 【Kali渗透全方位实战】Metasploitable2系统介绍
- 一文看懂软件测试方法和规范
- 学习笔记Kafka(四)—— Kafka安装配置(3)—— Kafka多代理配置及常用操作
- 试题导入mysql乱码_解决Mysql导入乱码问题
- mongodb性能分析方法:explain()
- Linux内核编译和运行
- axure html 360安装扩展,win10系统360浏览器添加Axure扩展的操作方法
- UVA	11549 Calculator Conundrum
- Xcode7 出现-fembed-bitcode错误的解决办法
- 趣图:程序员的 5 个职业生涯阶段,你处于在哪个阶段呢
- 【福利派送】准备了八份小礼物,祝你七夕快乐!
- 训练自己的数据_YOLOv3训练自己的数据集(以口罩检测数据集为例)
- Android Palette吸色原理及源码解析
- 建立景区商城小程序,构建二次消费生态,增加景区收入
- 【脑电数据十折交叉验证】实现对数据自动划分训练集与测试集得出平均分类准确率
- 编译安装Greenplum源码包
- 网络广告的发布渠道和方式
- linux调时区北京,Linux修改系统时间和中国时区
- 奇怪的吃播_快来围观那些奇怪的吃播!!
- linux网站杀毒软件,linux下的杀毒软件----ClamAV