1.1)高内聚、低耦合

  一个软件系统要有一个稳定的架构,不会随着需要的改变在发生巨大的变动。因此,高内聚、低耦合是一个软件系统设计中必须遵循的基本原则。

  所谓高内聚,是指一个软件模块内各个元素彼此结合的紧密程度要高,即一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。

  所谓低耦合,是指一个软件系统内不同模块之间的互连程度要低。不同模块之间的联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性、调用的方式及传递的信息。

  因此,在一个软件系统中,应当尽量保证模块的独立性,模块实现功能职责单一,越简单越好。这样有利于系统复用,并且大大减少模块之间的依赖,系统稳定性高,更易于维护。

1.2)面向抽象编程

  在面向过程的软件开发中,上层组件调用下层组件,就意味着上层组件依赖于下层组件,当下层组件发生剧烈变化时,上层组件也要跟着一起发生变动,这将导致软件组件模块的复用性大大降低,从而增加软件开发成本,使软件结构设计上存在一定的臃肿性,不利于后期系统维护工作。

  在面向对象的软件设计中,很好地解决了上述问题,使程序都依赖于抽象,而不是依赖具体实现。因为在一般情况下抽象的变化概率比较小,依赖抽象编程大大降低了客户应用程序与实现细节的耦合度,提升了软件结构的健壮性。只要保证抽象不发生变化,客户程序就不需要改变。这就是依赖倒置原则。

  在程序中要尽量使用抽象类型作为对象实例变量类型,这样就保证了将客户程序与具体实现之间解耦,因为使用的是抽象类型,因此具体实现的改变不会影响抽象类型的改变。

1.3)多用组合少用继承

  在面向对象的软件设计中,对于类的扩展,首先想到的是使用类的继承来实现,由子类来继承父类,从而完成对子类功能的扩展。继承的好处是可以尽量让相同的属性或者功能复用,但是随着项目越来越大,需求的不断变化,继承就会变得越来越臃肿,后期难以控制和维护。最重要的是,继承会不分青红皂白地把父类的公有和受保护的方法统统继承下来,而这些方法可能是子类不需要的功能,会对子类产生一些危害。

  如果使用组合方式,就不会出现上述继承的问题。所谓对象组合,是指在一个对象中含有另外一个对象的引用,从而可以使用该内部对象的引用作出一些处理行为。使用组合方式的好处有以下几点:首先,不会对类产生有害的影响;其次,组合方式要比继承方式灵活,因为是由系统运行动态地决定使用对象与否;最后,不会造成因继承而引起的类膨胀,减少了对父类的依赖性。

1.4)“开-闭”原则

  “开-闭”原则,即“对扩展开放,对修改关闭”,指的是在软件设计中,当对某一软件实体进行扩展时,尽量不要去修改原有的软件实体,换句话说就是在不修改原有软件实体的情况下对其进行扩展。这种软件设计方式其实是一种目标,它考虑了软件后期的维护等其他因素。一个软件系统如果可以达到这个目标,那它就是可扩展、易维护的。

  在软件设计领域中,众多设计模式的应用就是为了达到这个目标。“开-闭”原则是一种很抽象的设计原则,更像是一种倡导的口号,其他设计原则都是为了实现“开-闭”原则的具体原则。“开-闭”原则与其他设计原则就好比抽象父类与子类的关系一样。

软件设计应该遵循的基本原则有哪些?相关推荐

  1. 大家一起学面向对象设计模式系列Chapter 02 软件设计的基本原则

    我们为什么要使用设计模式呢?有人可能会说为了设计出"高内聚低耦合"的软件."高内聚低耦合"的软件实际上也就是本文所说的具有可维护性和可复用性的软件. 这篇文章主 ...

  2. 分离变与不变——软件设计的基本原则分析

    分离变与不变 --软件设计的基本原则分析 小到代码,大到模块.系统,我们都可以将其粗略的分为两个部分:变化的部分和不变的部分.有些代码,不管是维护人员来了.走了,还是版本换了.变了,它依然是那样.可怕 ...

  3. 【设计模式】软件设计遵循——六大原则

    软件设计遵循--六大原则 1)开闭原则 定义:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭 原则:用抽象构建框架,用实现扩展细节 优点:提高软件系统的可复用性和可维护性 2)里氏替换原则 定 ...

  4. 【转载】一些软件设计原则

    总结得非常好, 设计必读. 转自陈皓老师的 <一些软件设计的原则>,根据自己的理解调整了下顺序,少部分字句做了修改. 一个好的程序员通常由其操作技能.知识水平,经验层力和能力四个方面组成. ...

  5. 设计模式 - 软件设计的七大原则

    文章目录 前言 1. 软件设计模式原则 2. 开闭原则 1. 概念 2. 例子 3. 里氏替换原则 1. 概念 2. 例子 4. 依赖倒置原则 1. 概念 2. 代码 5. 单一职责原则 说明 6. ...

  6. UML图和软件设计原则

    笔记来源于黑马程序员但不仅仅是黑马 UML图和软件设计原则 UML图 2.1 类图概述 2.2 类图的作用 2.3 类图表示法 2.3.1 类的表示方式 2.3.2 类与类之间关系的表示方式 2.3. ...

  7. 软件工程学习笔记(四)软件设计

    软件设计概述 软件设计的基本特征:目标,形态,内容 从技术角度考虑,软件设计主要包括4方面内容: 系统结构设计:确定软件系统的结构,即软件系统的组成,以及各组成成分(子系统或模块)之间的相互关系 接口 ...

  8. 【软件工程】软件设计概述

    软件设计是一个过程,通过这个过程,创建一个软件工件的规范,目的是实现目标,使用一组原始组件并受到约束.[1]软件设计可以指"所有涉及概念化.框架化.实现.调试的活动,最终修改复杂系统&quo ...

  9. 面向过程的软件设计方法

    面向过程的软件设计方法 前面主要是对系统的分析,从而明确我们系统的逻辑模型.也就是说,通过前面几章我们清楚了"系统需要做什么?".而软件设计阶段主要任务则是要实现系统逻辑模型向物流 ...

最新文章

  1. 【Kali渗透全方位实战】Metasploitable2系统介绍
  2. 一文看懂软件测试方法和规范
  3. 学习笔记Kafka(四)—— Kafka安装配置(3)—— Kafka多代理配置及常用操作
  4. 试题导入mysql乱码_解决Mysql导入乱码问题
  5. mongodb性能分析方法:explain()
  6. Linux内核编译和运行
  7. axure html 360安装扩展,win10系统360浏览器添加Axure扩展的操作方法
  8. UVA 11549 Calculator Conundrum
  9. Xcode7 出现-fembed-bitcode错误的解决办法
  10. 趣图:程序员的 5 个职业生涯阶段,你处于在哪个阶段呢
  11. 【福利派送】准备了八份小礼物,祝你七夕快乐!
  12. 训练自己的数据_YOLOv3训练自己的数据集(以口罩检测数据集为例)
  13. Android Palette吸色原理及源码解析
  14. 建立景区商城小程序,构建二次消费生态,增加景区收入
  15. 【脑电数据十折交叉验证】实现对数据自动划分训练集与测试集得出平均分类准确率
  16. 编译安装Greenplum源码包
  17. 网络广告的发布渠道和方式
  18. linux调时区北京,Linux修改系统时间和中国时区
  19. 奇怪的吃播_快来围观那些奇怪的吃播!!
  20. linux网站杀毒软件,linux下的杀毒软件----ClamAV

热门文章

  1. Django安装使用基础
  2. 支付方式之线上和线下
  3. 网站优化之尽量避免重定向(301/302)
  4. 最大字段和各种不同算法实现(参考编程珠玑)
  5. Qt 常量中有换行符 中文
  6. WPF 窗口居中 变更触发机制
  7. Hilo开发H5小游戏踩坑笔记
  8. 无线AP如何区分来宾(流动)用户和正常用户?
  9. WebApi_基于Token的身份验证——JWT
  10. 《面向模式的软件体系结构2-用于并发和网络化对象模式》读书笔记(12)--- 策略化加锁...