`
马背{eric.liu}
  • 浏览: 27377 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

软件设计中的几点设计原则(下)

阅读更多
  以下大部分内容摘抄自阎宏博士的《JAVA与模式》一书的第二部分,部分加入了本人的一些理解。

  
   设计原则
      上篇说道了“开闭原则”和“里氏替换原则”,下面继续:


     3.依赖倒转原则(Dependence Inversion Principle)

         要依赖于抽象,不要依赖于具体。
         或者说:要针对接口编程,而不要针对实现编程。
        
         这条原则主要是判断具体类有变化的需求,所以依赖抽象可以让具体类去变化。
         当然这里也有一个度的把握,当某些特殊类是相当稳定的、不会发生辩护的,则客户端也可以依赖于此具体类,而不必故意去发明一个抽象类型。


     4.接口隔离原则(Interface Segregation Principle)

         多个专门的接口比使用单一的接口要好,从客户端类的角度来讲,一个类对另一个类的依赖性应该建立在最小接口上的。
 
         反过来说:过于臃肿的接口设计是对接口的污染(Interface Contamination).

     5.合成/聚合复用原则
         要尽量使用合成/聚合,尽量不要使用继承。

         首先区分下聚合和合成的关系:
               a)聚合关系(Aggregation):关联的一种,是整体和个体之间的关系,无法通过语法分别,是逻辑判断得出的。
               b)合成关系(Composition)也是关联的一种,但比聚合关系更强。具体有2点:一是要求整体对象负责部分对象的生命周期;二是要求不分对象不能共享(即合成关系不能被共享)
           
         使用合成/聚合关系有如下优点:(缺点是有较多的对象需要管理)
                a)隐藏了成分对象的细节
                b)可以在运行时,改变成分对象。
                c)这种复用支持包装,这里我(马背)的理解是对成分对象的方法进行调用时候,可以加入一些逻辑。
                d)所需依赖较少,指类之间的依赖关系,因为没有继承无关的方法,所以无需依赖这些方法所依赖的二类
                f)新对象存取成分对象的唯一方法是通过成分对象的接口。
                  老实说,这点我(马背)没有理解很好,估计是这样的意思:一是成分对象可以要求成抽象的接口,这样能够依赖于抽象而不是具体实现。
          

         相对的,滥用继承关系有如下缺点:
                a)将父类的内容细节暴露给子类
                b)如果超类发生改变,子类也被强制改变
                c)关系是静态的,运行时候能改变,缺乏灵活性。

         这条原则的掌握需要我们明确分析对象之间是“has-A”还是"Is-A"的关系。                                   


     6.迪米特法则(Law of Demeter) 或者叫做最少知识原则(Least Knowledge Principle)

         一个对象应该对其他对象有尽可能少的了解。可以从狭义和广义两个角度来理解。

        狭义的迪米特法则:要求一个对象如果不必与其他对象直接通讯,最好能通过其他对象将调用转发(call forwarding),典型的模式:门面模式(Facade)和调停者模式(Mediator),这二者都通过中间对象降低了调用者和其他对象的耦合度。

         广义的迪米特法则:主要体现在对象之间、包之间、模块之间,将本身的数据和实现隐藏起来
                       1)优先考虑将一个类设置为不变类
                       2)尽量降低一个类的访问权限
                       3)谨慎使用Serializable
                       4)降低成员的访问权限
                       5)限制局部变量的有效范围
           




       
 
0
0
分享到:
评论

相关推荐

    软件工程知识点

    需求规格说明书是需求分析阶段需要交付的基本文档,将成为开发者进行软件设计和用户进行软件验证的基本依据,涉及引言、术语定义、用户需求、系统体系结构、系统需求等有关软件需求及其规格的诸多描述与定义。...

    数据库设计方案.docx

    每一个单元(象素)的位置由它的行列号定义,所表示的实体位置隐含在格行列位置中,数据组织中的每个数据表示地物或现象的非几问属性或指向其属性的针。一个优秀的压缩数据编码方是:在最大限度减少计算机运算时间的基点...

    软件设计规范

    软件设计必须有自说明特性。不能对文档产生依赖性。软件代码中合适的地方,需要对文档进行恰如其分说明。原则是,每段代码,每处需要理解的地方,如果和总体架构相关,就要有说明。 软件领域需要简化。需要还原软件...

    毕业设计基于JAVA的局域网飞鸽传书软件设计与实现(源代码+论文).zip

    【毕业设计】基于JAVA的局域网飞鸽传书软件设计与实现(源代码+论文) 根据对飞鸽传输系统的调研,我认为本设计需要满足以下几个系统设计目标: (1)实用性原则:真正为局域网的实际工作服务,按照需求的轻重缓急,合理...

    CorelDRAW软件服装设计毕业设计【2018年极具参考价值毕业设计首发】.doc

    利用该软件进行制作时,应当注意:单 件排料首先应当根据实现准备好的材料情况来安排面料幅宽,一般以面料一端作为起始 点,然后严格遵照先主片、后次片以及先大片、后小片的顺序规则,综合考虑碎料填空 、紧密排料...

    软件测试之“软件测试用例设计原则”

     不管是从个人角度还是从公司角度,根据我这几年的经验我觉得case的设计应该符合以下几点:  1、一个case一个功能点:每个case都要有个测点,找准一个测点则可,不能同时覆盖很多功能点,否则执行起来牵连太大;...

    软件测试应遵循的原则

    3.设计测试用例时,应该考虑到合法的输 软件测试应遵循的原则 软件测试 为了达到上述的原则,需要注意以下几点: 1.应当把“尽早和不断地测试”作为开发者的座右铭。 2.程序员应该避免检查自己的程序,测试工作...

    基于PLC的升降机控制系统设计毕业设计.doc

    (4)撰写毕业设计成果报告书 1.2.2设计任务的调研 可编程控制器是专为在工业环境下应用而设计的工业计算机,其出现后就受到普遍 重视,发展也十分迅速,在工业自动控制系统中占有极其重要的地位。它与现有的各种 ...

    软件工程之专题七:软件工程专题

    软件设计 概要设计 模块分解,确定软件的结构,模块的功能和模块间的接口,以及全局数据结构的设计 系统分析员、高级程序员 设计说明书、数据说明书、模块开发卷宗 详细设计 设计每个模块的实现细节和局部数据结构...

    中型企业网络设计与仿真毕业设计.doc

    软件设计 就是在这些硬件的基础上实施各种高级的应用服务如DNS、DHCP、WEB、FTP和各种企业应 用软件和数据库系统。 第2章 需求分析 企业网(ENTERPRISE NETWORK)是非常典型的综合网络实例。在本设计方案中主要是对...

    基于java实现局域网飞鸽传书软件设计与实现(源代码+论文)

    根据对飞鸽传输系统的调研,我认为本设计需要满足以下几个系统设计目标: (1)实用性原则:真正为局域网的实际工作服务,按照需求的轻重缓急,合理设计本系统。 (2)可靠性原则:必须为用户提供安全的服务,尤其是要...

    计算机网络课程设计之组建小型企业局域网.docx.docx

    计算机网络课程设计报告 题目: 组建小型企业局域网 学生姓名: 学 号: 班 级: 指导教师: 2012年 05 月20 日 摘 要 随着计算机及局域网络应用的不断深入,特别是各种计算机软件系统被相继应用在实际工作中,...

    基于java实现局域网飞鸽传书软件设计与实现(源代码+论文)分享

    根据对飞鸽传输系统的调研,我认为本设计需要满足以下几个系统设计目标: (1)实用性原则:真正为局域网的实际工作服务,按照需求的轻重缓急,合理设计本系统。 (2)可靠性原则:必须为用户提供安全的服务,尤其是要...

    软件测试中需要构建测试数据,项目内包含构建测试数据的原则和一些方法包

    测试数据构建是软件开发过程中的一个关键环节,它涉及到创建用于测试软件系统的数据集合。这些数据需要能够覆盖各种可能的场景,以确保软件在不同条件下的稳定性和可靠性。一个良好的测试数据构建项目通常包含以下几...

    界面设计方案.doc

    界面设计方案 目录 一、概述 3 二、用户界面设计原则 3 三、关于软件界面设计 5 1.用户导向(User oriented)原则 5 2.KISS(Keep It Simple And Stupid)原则 6 3.布局控制 6 4.视觉平衡 7 5.色彩的搭配和文字...

    中型企业网络设计与仿真毕业设计(1).doc

    软件设计 就是在这些硬件的基础上实施各种高级的应用服务如DNS、DHCP、WEB、FTP和各种企业应 用软件和数据库系统。 第2章 需求分析 企业网(ENTERPRISE NETWORK)是非常典型的综合网络实例。在本设计方案中主要是对...

    酒店管理软件设计方案.doc

    3 二、设计目标 3 三、建设原则 4 系统结构与平台设计 5 一、硬件设备 5 二、软件平台 6 三、网络环境 6 四、扩展接口 7 客易隆酒店管理系统网络结构示意图 …………………………………………………..8 系统基本功能...

    界面设计方案(1).doc

    界面设计方案 目录 一、概述 3 二、用户界面设计原则 3 三、关于软件界面设计 5 1.用户导向(User oriented)原则 5 2.KISS(Keep It Simple And Stupid)原则 6 3.布局控制 6 4.视觉平衡 7 5.色彩的搭配和文字...

    百度VI手册.PDF_大厂VI品牌视觉标准设计规范_企业品牌手册.pdf

    在这篇文件中,我们可以总结出以下几点知识点: 一、什么是VI? VI是Visual Identity的缩写,也称为视觉 Identity,指的是企业品牌的视觉形象系统,包括Logo、色彩、字体、图片、图案等视觉元素。VI的目的是为了在...

    逆向工程四大软件简介

     Surfacer 是 Imageware 的主要产品,主要用来做逆向工程,它处理数据的流程遵循点――曲线――曲面原则,流程简单清晰,软件易于使用。其流程如下:    一、点过程  读入点阵数据。  Surfacer 可以接收几乎...

Global site tag (gtag.js) - Google Analytics