`

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

阅读更多

摘自:http://dev.yesky.com/485/3405985.shtml

 

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

  一、软件设计理论的层次

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

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

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

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

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

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

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

  二、关于耦合

  1、耦合的粒度

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

  2、解耦的原理

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

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

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

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

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

  三、关于接口

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

  1、接口与继承

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

  2、接口与纯虚类

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

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

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

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

分享到:
评论

相关推荐

    个人接触化工设计方案的一点心得-给新人看.pdf

    以下是一些关于如何有效学习和提升化工设计技能的心得体会: 1. **重视基础:**对于新手来说,首要任务是阅读化工工艺设计手册,这是一部综合性的设计指南,涵盖了工艺计算和设计的基本原理。初期可能感觉内容繁多...

    ARM的一点心得 ARM的一点心得

    本文主要分享了作者在学习和使用ARM单片机过程中的心得体会,尤其是关于系统初始化的关键步骤。 首先,系统初始化是任何基于ARM的嵌入式系统启动时必须要进行的过程,它确保硬件设备正确配置并准备好运行用户代码。...

    工程实训的心得体会(通用6篇).pdf

    工程实训的心得体会 通过阅读工程实训的心得体会(通用 6 篇),我们可以整理出以下知识点: 1. 工程实践课的重要性:工程实践课是一门具有很强实践性质的专业技术基础课,它主要介绍了工业生产中所用的工程材料,...

    web开发人员工作心得

    团队内部的经验分享不仅可以加快问题解决的速度,还能促进团队成员之间的知识交流,共同成长。此外,利用专业工具进行辅助,如Firebug这样的调试工具,可以在定位和修复错误时提供极大帮助,提高开发效率。 - **...

    2021年《信息化教学设计》学习心得体会5篇.docx

    下面我将结合个人学习体会,从几个方面深入探讨信息化教学设计的核心要义。 首先是教学内容的整合。传统教学常以文字教材为主,形式单一,难以满足学生的多元需求。信息化教学设计通过整合视频、音频、图像、动画等...

    幼儿园教师职业道德规范细则学习心得体会.doc

    当学习幼儿园教师职业道德规范细则时,我们可以从中吸取许多深刻的知识和经验,这些不仅适用于教育行业,也可以为我们从事其他行业的人提供启示。作为一名信息技术领域的专家,我有幸阅读并理解这些规范,并与我所在...

    软件开发实习总结.pdf

    软件开发实习总结篇一对软件开发的经验心得 在软件开发实习过程中,我深深体会到了作为一个合格的程序员应该具备的基本素质。团队精神和协作能力是程序员应该具备的基本素质,这一点在最近的工作中让我深深休会到了...

    职业学校计算机课程教学心得.doc

    在多年的计算机课程教学实践中,我总结了一些心得体会和教学策略,希望能对同行的教育工作有所助益。 首先,我认为上好第一堂课至关重要。对于职业学校的学生而言,第一印象往往决定了他们对课程的态度和兴趣。为此...

    研发部经理述职报告范文.pdf

    在积极参与公司拓展的思想教育活动中,我鼓励成员撰写心得体会,并通过一对一的沟通交流,以期达到团队成员之间更深层次的理解和信任。 在总结了四年多来的经验之后,我清晰地认识到,一个高效的研发团队的建立,...

    棒棒糖收音机,网络电台,MP3本地播放

    "联盟"一词让人联想到一个互助互爱、共同进步的团体,这可能意味着用户在使用"棒棒糖收音机"的过程中,能够与其他用户进行交流、分享心得体会,甚至获得关于软件使用的最新动态和技巧。在这样一个用户社区中,信息的...

    做网站的实习日记.docx

    这个过程不仅加深了我对网站视觉设计的理解,也让我体会到了积极主动运用所学知识,创新并改进现有产品的重要性。 在实习过程中,我也深刻认识到自身在技能上的不足。例如,我发现自己对网站设计涉及的一些专业软件...

    政治老师教学工作总结例文.doc

    每学期我都会定期写工作心得体会,通过反思来了解学生在学习中遇到的问题,及时调整教学策略,努力优化教学过程。同时,我会积极参加各种教研活动,与同事们交流教学经验,共同探讨解决教学问题的有效途径。 团队...

    非常优秀且实用的英语小词典

    学习者可以在这个功能的帮助下,随时记录下自己的心得体会,整理和复习学过的词汇,使得学习更加有序和高效。 随着移动互联网的发展,人们对于学习工具的便携性和随时可用性要求越来越高。《非常优秀且实用的英语小...

    国培培训学习总结.doc

    通过线上线下的讨论交流,我们共同分享了各自的教学心得和经验,这种互帮互助的氛围让我深刻体会到教育共同体的重要性。 综上所述,国培培训不仅提升了我的专业知识和教学技能,更重要的是,它让我认识到教育工作是...

    2016年英语专四考试题答案.pdf

    例如,通过在线的英语学习软件进行听说读写的全方位训练,或是通过论坛与其他考生交流心得体会,分享学习方法。此外,网络上还充斥着各种模拟试题和讲解视频,考生可以通过这些资源对自己的薄弱环节进行针对性的加强...

    自己动手写操作系统(含源代码).part2

    我想,虽然第二版有着这样那样的变化,但有一点没有变,那就是本书试图将我在编写自己操作系统的过程中的经验尽可能地告诉读者,同时尽可能将我当初的思路和编码过程呈现出来。很可能读者比我更聪明,有更好的解决...

    自己动手写操作系统(含源代码).part1

    我想,虽然第二版有着这样那样的变化,但有一点没有变,那就是本书试图将我在编写自己操作系统的过程中的经验尽可能地告诉读者,同时尽可能将我当初的思路和编码过程呈现出来。很可能读者比我更聪明,有更好的解决...

Global site tag (gtag.js) - Google Analytics