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

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

阅读更多
      最近又翻起阎宏博士的《Java与模式》这本书,此书语言浅显易懂,且内容充实,值得反复阅读思考,就像好的电影都会让你想有时间再翻出来再看看,此书也是一样。

      翻阅之中,觉得还是把内容摘抄下来,一是避免捧着这本大块头的痛苦,二是便于自己整理思路。

      以下内容大部分摘自此书的第二部分。

    什么情况下一个软件系统会变得“腐烂”:

         1.僵硬:增加新功能要影响很多地方。
         2.脆弱:一个地方的修改,会导致其他地方的发生变化或者故障。
         3.复用率低:代码、函数等难以被程序员复用在软件的其他地方.
                            导致程序员重复造轮子,甚至cp&paste来使用已有代码。
         4.粘度过高:当一个改动,可以按照原有设计框架进行,也可以另辟蹊径快速解决。
                             当第二种情况出现,则表示原系统设计粘度过高!


      设计的目标:

            1.Extensibility可扩展性:与“僵硬”相反,一个功能可以很容易的加入到系统中去,并尽量少的影响其他功能
                        
            2.Flexibility灵活性:与扩展性的增加功能相比来,当代码的修改,可以平稳发生,不会波及到其他模块,即与“脆弱”相反
            3.Pluggability可插入性:系统设计的接口和实现体,能够满足开发者很方便的替换来修改系统的功能。
                                            从而避免脱离原设计框架的改动方式,进而避免“粘度过高”现象的出现。
                                            即经常出现脱离系统设计框架的“开发捷径”。



        设计原则:

            1.开闭原则(Open for extension,close for modification)

                诚如标题解释的一样:对扩展开放,对修改封闭。在不被修改的情况下扩展,在不被修改的情况下行为产生变化。

                对可变性封装的原则:
                     A.一种可变性不应当散落在很多地方,应该被封装在一个对象里。
                     B.一种可变性不应该与另一种可变性混合在一起。从这一点上来说,类的继承结构不应该超过2层,不然就意味着2中不同的可变性混合在一起。
                       这里的2层,我(马背)自己的理解可以解释成具体类实现一个接口的2层,可以可以从继承的角度来看,即从接口-》抽象类-》具体实现类这样的2层“继承”。当然这里的抽象类可以是多级结构,但只是在封装了相同的行为,不影响总体上的2层结构
                       从2层的结构中我们也可以看出抽象类一定是用来继承的,而具体类则不是用来继承的,并且应该优先使用接口声明类型。

                继承应该被看做封装变化的方法,而不是从一般对象到特殊对象的方法。

            2.里氏替换原则(Liskov substitution principle)
               
                 任何基类被子类替换后,整个应用的功能没有变化(行为产生变化)。
                 但反过来的代换是不成立的。

                 由于Liskov替换原则主要讲基类与子类的关系,这里也说一下继承关系使用的条件

                      A.区分好子类是不是超类的一个“角色”,即只有"Is-A"的关系才符合。
                          "Has-A"则应用使用聚合关系描述。

                      B.子类不会出现成为其他类子类的可能行。

                      C.子类具体扩展超类的责任,但不是置换掉(Override)或者注销掉(Nullify)超类的责任

                      D.从分类学上有意义时候使用继承,不要从工具类继承。
             
                 当有继承关系的两个类A、B不符合Liskov原则时候,一般有2中方法来解决:

                        A.为2者抽象出一个超类,并使二者的共同行为移到新的超类中。

                        B.把B继承与A改为委派关系,即B拥有A的实例。

            未完待续。。。

                                                    马背{eric.liu}
                                                       2010.1.24
0
0
分享到:
评论

相关推荐

    软件概要设计模板

    9. 软件概要设计模板的设计原则:软件概要设计模板的设计原则包括简洁性、可读性、可维护性和可扩展性等。 10. 软件概要设计模板的应用场景:软件概要设计模板的应用场景包括软件开发项目管理、软件测试、软件维护...

    2011年上半年软件设计师试题与答案(上午,下午)

    【2011年上半年软件设计师试题与答案】涵盖了软件设计师这一专业领域的多个核心知识点,主要分为上午和下午两部分的考试内容。软件设计师是信息技术领域中的一个重要角色,他们负责设计、开发、测试以及维护软件系统...

    软件工程中的软件设计原则与模式教程.pptx

    ### 软件工程中的软件设计原则与模式教程 #### 第1章 软件设计原则的重要性 在软件工程领域,软件设计原则是构建高质量软件系统的基础。这些原则旨在指导开发者设计出健壮、可维护且易于扩展的系统。本章节重点...

    软件设计师教程 第四版

    在第四版中,作者们全面更新了原有的内容,引入了最新的技术趋势和设计理念,旨在帮助读者掌握软件设计的核心概念、方法和技术。标签“软件设计师”明确了本书的主要受众,即那些致力于成为优秀软件设计专业人士的...

    概要设计说明书(全面)

    结构设计原则是软件设计中的一种重要原则,旨在确定软件的模块结构和模块之间的关系。结构设计原则包括以下几个方面: 1. 模块化原则:将软件划分成小的、独立的模块,以便于软件的开发和维护。 2. 抽象原则:使用...

    软件设计与体系结构期末复习-选择软件设计与体系结构期末复习-选择

    在软件工程的学习中,软件设计与体系结构占据了至关重要的地位。复习这部分内容时,我们需要理解并掌握以下几个关键知识点: 1. **软件工程层次**:软件工程从底层到高层的顺序是质量关注点、过程、方法、工具。这...

    2007年上半年软件设计师真题

    在【压缩包子文件的文件名称列表】中,我们看到"2007年上半年软件设计师考试上午试题",这可能是一个包含多个题目或部分的文档,可能包括选择题、填空题、问答题等形式,用于测试考生对软件设计理论、方法和技术的...

    2023下半年软考中级软件设计师试题及答案解析.zip

    软件设计师是软件开发过程中的关键角色,他们负责将需求转化为具体的设计方案,包括系统架构、模块划分、接口设计以及数据结构和算法选择等。他们需要具备扎实的编程基础,良好的逻辑思维能力,以及对软件工程流程的...

    面向对象的设计原则——类设计原则

    以下是对给定文件中提及的几个类设计原则的深入探讨。 ### 1. 单一职责原则 单一职责原则强调一个类应该专注于实现单一的功能或职责。当一个类承担了过多的职责时,其复杂性会显著增加,导致维护困难。例如,如果...

    最近几年的软件设计师真题及答案

    首先,软件设计师的考试通常涵盖以下几个核心知识点: 1. **软件工程基础**:这是软件设计师的基础知识,包括软件生命周期、需求分析、系统设计、编码、测试和维护等阶段。考生需要理解并掌握每个阶段的关键任务和...

    软考中级-软件设计师(教材+大纲+真题解析)

    《软考中级-软件设计师》是一套全面针对国家计算机技术与软件专业技术资格(水平)考试中级软件设计师科目的备考资源。这个压缩包包含了教材、大纲和历年真题解析,为考生提供了一条清晰的学习路径。 首先,我们来...

    技术架构设计原则

    技术架构设计原则是在构建软件系统时所要遵循的一系列理念和规则,其目的是为了确保系统能够顺利地扩展和维护,同时满足性能、安全、稳定性等方面的要求。在设计技术架构时,有几大核心原则需要特别关注:大道至简、...

    软件设计师真题及答案分享.zip

    首先,我们来深入理解软考中软件设计师这一级别的考试内容。该考试主要考察以下几个方面的知识: 1. **计算机基础知识**:涵盖计算机系统结构、操作系统原理、数据结构与算法、数据库系统等基础知识,这些都是软件...

    软件设计与体系结构

    《软件设计与体系结构》是一门深度探讨软件开发核心概念的课程,主要关注软件系统的设计原则、模式以及架构。这门课程旨在帮助开发者理解和实践高效、可维护的软件设计,从而构建出高质量的软件产品。在课程中,我们...

    面向对象设计原则.ppt

    面向对象设计原则主要包括以下几点: 1. **单一职责原则(SRP)**:一个类应该只有一个引起它变化的原因。这意味着每个类应专注于一项任务,避免将多个职责混杂在一起。在员工工资计算的例子中,`Employee`类只负责...

    软件设计师2008-2018上半年真题与解析

    《软件设计师2008-2018上半年真题与解析》是一个综合性的学习资料集合,涵盖了2008年至2018年上半年期间的软件设计师考试的历年真题和解析,对于备考该资格认证的考生来说,是极其宝贵的学习资源。下面,我们将深入...

    互联网技术架构设计原则 技术架构设计原则

    架构设计的基本原则包括但不限于以下几点: 1. **可扩展性**:设计应允许系统随着业务增长而扩展,而不引起大规模重构。 2. **松耦合**:组件之间应保持低依赖,便于修改和替换。 3. **高内聚,低耦合**:模块内部...

    历年软件设计师试题答案电子书

    软件设计师是信息技术领域中的一个重要角色,他们负责设计、开发和维护软件系统,是技术创新与应用的关键力量。 此电子书的涵盖内容可能包括以下几个核心知识点: 1. **软件工程基础**:这部分通常涉及软件生命...

    2011上半年软件设计师考试真题及答案

    《2011上半年软件设计师考试真题及答案》是一份重要的学习资料,它涵盖了当年全国计算机技术与软件专业技术资格(水平)考试中软件设计师这一级别的考试内容。这份资料对于准备参加软件设计师考试的考生来说,是提升...

Global site tag (gtag.js) - Google Analytics