经验交流:关于软件设计的一点心得体会_软件工程_软件工程_软件开发_天新网

经验交流:关于软件设计的一点心得体会

http://dev.21tx.com 2007年06月28日 论坛整理 博客园

-

曾经看过一本书叫《道法自然》,内容略记得一二,但我最欣赏的是它的书名。软件设计没什么太神秘有东西,只要用心体会,其实一切都很自然。软件的设计之“道”,也不在于设计有多么的华丽、精巧,而在于其朴实、自然,最终达到“以无招胜有招”,进入一个全新的境界。

一、软件设计理论的层次

以我的拙见,软件设计领域中的各种概念,可以分为以下几个层次来进行理解:

1、软件设计的目的:重用性、扩展性。

这是最高的层次,是应对软件危机的需要。

2、设计原则:低耦合、高聚合。

各种软件设计的原则,如依赖倒置原则、单一职则原则、面向接口等,以及各种设计模式,其根本的目的其实只是为了降低耦合这么简单。因为只有低耦合才能更好的适应变化,更好的重用和扩展。

3、实现方法:运用设计模式封装变化、降低耦合。

设计模式只是用来“封装变化、降低耦合”的工具而已。它是面向对象设计时代的产物,其本质就是充分运用面向对象的三个特性,即:封装、继承和多态,进行灵活的组合运用。

二、关于耦合

1、耦合的粒度

耦合无论如何也是不可避免的。当我们实现接口、继承父类的时候,就会不可避免的产生耦合。耦合是有不同粒度的,我们解耦到什么粒度为止,我认为应以模块的重用粒度为准。尽量解除重用模块或对象之间的耦合。而重用模块之内的耦合,应属于聚合的范畴,所以不要盲目的去解耦,否则就陷入了误区。

2、解耦的原理

怎样才能解耦呢,或者说为什么各种设计模式能达到解耦的目的呢?我觉得有以下几个思路:

(1)将具体的东西抽象处理

(2)将分散的东西集中处理

而面向对象中的接口、继承正为我们提供了这样的一种机制。通过访问接口或基类或抽象类,而不是具体的实现类,从而与具体的实现类达到了解耦的目的。我们还可以设计一些控制类,像润滑剂一样,协调各实现类之间的访问,也可以达到耦的目的。

事实上,各种设计模式的基本思想也就是这样。创建型模式是为了解除创建对象时产生的耦合,实际上是解除对类称名的依赖,而结构型和行为型是为了解除对象属性或方法的直接调用。不管什么设计模式,都是将对具体实现类的访问提升为对接口、基类或用于协调的控制类的访问。

三、关于接口

这一节更具体,谈一谈接口,因为使用接口是软件设计的重要手段,但已经不属于“道”了~

1、接口与继承

接口描述的是对象某一个方面行为特征。使用接口与使用继承关系各有优缺点,使用子类继承可以继承父类的功能,体现了重用的精神。而接品更加灵活,因为它解除了子类与父类之间的高度耦合,它体现在灵活扩展的精神。

2、接口与纯虚类

理论上接口可以由纯虚基类实现类似的功能,那为什么还我们不去掉接口的概念,而直接使用虚类呢?

接口存在的理由就是它更加灵活,关系简单,易于理解。比如一个类可以实现十几个甚至几十个接口,但一般开发工具只支持单继承(由于多继承太容易导致混乱和冲突),如果要继承十几层,系统结构想必会无法理解了,我以为这是接口存在的最重要的原因。

如果接口和虚类继承结合使用,可以产生强大的威力,这也是许多设计模式的“杀手锏”。

以上算是总结一下自己的心得。肯定有不少片面之处,请各位指教。

经验交流:关于软件设计的一点心得体会

http://dev.21tx.com 2007年06月28日 论坛整理 博客园

-

曾经看过一本书叫《道法自然》,内容略记得一二,但我最欣赏的是它的书名。软件设计没什么太神秘有东西,只要用心体会,其实一切都很自然。软件的设计之“道”,也不在于设计有多么的华丽、精巧,而在于其朴实、自然,最终达到“以无招胜有招”,进入一个全新的境界。

一、软件设计理论的层次

以我的拙见,软件设计领域中的各种概念,可以分为以下几个层次来进行理解:

1、软件设计的目的:重用性、扩展性。

这是最高的层次,是应对软件危机的需要。

2、设计原则:低耦合、高聚合。

各种软件设计的原则,如依赖倒置原则、单一职则原则、面向接口等,以及各种设计模式,其根本的目的其实只是为了降低耦合这么简单。因为只有低耦合才能更好的适应变化,更好的重用和扩展。

3、实现方法:运用设计模式封装变化、降低耦合。

设计模式只是用来“封装变化、降低耦合”的工具而已。它是面向对象设计时代的产物,其本质就是充分运用面向对象的三个特性,即:封装、继承和多态,进行灵活的组合运用。

二、关于耦合

1、耦合的粒度

耦合无论如何也是不可避免的。当我们实现接口、继承父类的时候,就会不可避免的产生耦合。耦合是有不同粒度的,我们解耦到什么粒度为止,我认为应以模块的重用粒度为准。尽量解除重用模块或对象之间的耦合。而重用模块之内的耦合,应属于聚合的范畴,所以不要盲目的去解耦,否则就陷入了误区。

2、解耦的原理

怎样才能解耦呢,或者说为什么各种设计模式能达到解耦的目的呢?我觉得有以下几个思路:

(1)将具体的东西抽象处理

(2)将分散的东西集中处理

而面向对象中的接口、继承正为我们提供了这样的一种机制。通过访问接口或基类或抽象类,而不是具体的实现类,从而与具体的实现类达到了解耦的目的。我们还可以设计一些控制类,像润滑剂一样,协调各实现类之间的访问,也可以达到耦的目的。

事实上,各种设计模式的基本思想也就是这样。创建型模式是为了解除创建对象时产生的耦合,实际上是解除对类称名的依赖,而结构型和行为型是为了解除对象属性或方法的直接调用。不管什么设计模式,都是将对具体实现类的访问提升为对接口、基类或用于协调的控制类的访问。

三、关于接口

这一节更具体,谈一谈接口,因为使用接口是软件设计的重要手段,但已经不属于“道”了~

1、接口与继承

接口描述的是对象某一个方面行为特征。使用接口与使用继承关系各有优缺点,使用子类继承可以继承父类的功能,体现了重用的精神。而接品更加灵活,因为它解除了子类与父类之间的高度耦合,它体现在灵活扩展的精神。

2、接口与纯虚类

理论上接口可以由纯虚基类实现类似的功能,那为什么还我们不去掉接口的概念,而直接使用虚类呢?

接口存在的理由就是它更加灵活,关系简单,易于理解。比如一个类可以实现十几个甚至几十个接口,但一般开发工具只支持单继承(由于多继承太容易导致混乱和冲突),如果要继承十几层,系统结构想必会无法理解了,我以为这是接口存在的最重要的原因。

如果接口和虚类继承结合使用,可以产生强大的威力,这也是许多设计模式的“杀手锏”。

以上算是总结一下自己的心得。肯定有不少片面之处,请各位指教。


相关内容

  • 财新网:人工智能即将攻破围棋 人类还剩多少优势?
  • 谷歌设计人员 据财新网报道 AI崛起,最新证据来自<自然>杂志最新封面论文.Google旗下的深度学习团队Deepmind开发的人工智能围棋软件AlphaGo,以5:0战胜了围棋欧洲冠军樊麾.这是人工智能第一次战胜职业围棋手.它将于3月间挑战李世石,当下世界围棋最强者之一. 作为一个曾经 ...

  • 软件工程师百度百科
  • 软件工程师 软件工程师是一个认证考试, 具体地说是从事软件职业的人员的一种职业能力的认证, 通过它说明具备了工程师的资格. . 一般情况下. 都是分4级 软件技术员 助理软件工程师 软件工程师 高级软件工程师 目前国内软件测试工程师的来源主要有三方面:一是以前专业做软件开发的人员后来转行做软件测试, ...

  • [毕业生访谈]过五关斩六将 看毕文超如何拿到"UC"的offer
  • 日新网讯(记者史雪岩 实习记者吕杰 刘芳报道)四年光阴,弹指一挥.还清晰记得大学开学那天踌躇满怀的心情,一切仿佛昨天,近在眼前.在分别的时刻,有人仍然在找工作的路上挣扎,有人却凭着四年的努力拿到了让人羡慕的offer.近日,软件学院2013届毕业生毕文超做客日新访谈,讲述自己的求职经历.他曾担任过日 ...

  • 网络工程师师认证考试
  • 网络工程师是什么 网络工程师是通过学习和训练,掌握网络技术的理论知识和操作技能的网络技术人员.网络工程师能够从事计算机信息系统的设计.建设.运行和维护工作.考试合格人员能根据应用部门的要求进行网络系统的规划.设计和网络设备的软硬件安装调试工作,能进行网络系统的运行.维护和管理,能高效.可靠.安全地管 ...

  • 关于我校校园网站建设的调研报告
  • 关于我校校园网站建设的调研 调 研 报 告 南昌大学学生会调研部 2011年3月 目录 第一部分 序言 ................................................ - 1 - 一.调查背景及目的 ................................. ...

  • 网络工程设计原则
  • 1.网络建设的核心原则--实用 1) 网络的基本功能 ● 文件共享.● 文件传输.● 共享应用程序.● 共享打印机.● 使用电子邮件. 2) 网络的特定功能 为了满足不同用户的需求,网络还需要完成一些特殊功能,校园网就是一个比较典型的例子. 2.组网的其他原则 (1) 平衡先进技术与简易实用的原则. ...

  • 网络教学设计表
  • 网络环境的教学设计方案<圆锥曲线>网络教学设计方案学校:福建省泉州第五中学 姓名:张海峰 日期:2003 年 6 月 14 日一.学习目标与任务1.学习目标描述 知识目标 (A) 理解和掌握圆锥曲线的第一定义和第二定义,并能应用第一定义和第二定义来解 题. (B) 了解圆锥曲线在现实生 ...

  • 网站建设制作合同书
  • 甲方: 乙方: 甲.乙双方经友好协商一致,达成以下协议.双方申明,双方都已理解并认可了本合同的所有内容,同意承担各自应承担的权利和义务,忠实地履行本合同. 第一条:网站(软件)项目的内容.价款.开发进度.交付方式由附件一载明. 第二条:网站(软件)建设全部项目工作内容由附件二载明. 第三条:甲方的权

  • 中国数据中心行业分析报告目录
  • 中国市场调研在线 行业市场研究属于企业战略研究范畴,作为当前应用最为广泛的咨询服务,其研究成果以报告形式呈现,通常包含以下内容: 一份专业的行业研究报告,注重指导企业或投资者了解该行业整体发展态势及经济运行状况,旨在为企业或投资者提供方向性的思路和参考. 一份有价值的行业研究报告,可以完成对行业系统 ...