当前位置:文档之家› 面向对象七大基本设计原则

面向对象七大基本设计原则

面向对象七大基本设计原则
面向对象七大基本设计原则

面向对象七大基本设计原则

面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心。在设计面向对象的程序的时,模式不是一定要套的,但是有一些原则最好是遵守。这些原则已知的有七个,包括:单一职责原则、开闭原则、里氏代换原则、依赖注入(倒转)原则、接口分离原则、迪米特原则、合成聚合复用原则。

原则一单一职责原则

单一职责原则(SRP:Single responsibility principle)又称单一功能原则

核心:解耦和增强内聚性(高内聚,低耦合)。

描述:类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题。

原则二里氏替换原则

里氏替换原则(LSP:Liskov Substitution Principle)

核心:在任何父类出现的地方都可以用他的子类来替代(子类应当可以替换父类并出现在父类能够出现的任何地方)

四层含义:

(1)子类必须完全实现父类的方法。在类中调用其他类是务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则。

(2)子类可以有自己的个性。子类当然可以有自己的行为和外观了,也就是方法和属性

(3)覆盖或实现父类的方法时输入参数可以被放大。即子类可以重载父类的方法,但输入参数应比父类方法中的大,这样在子类代替父类的时候,调用的仍然是父类的方法。即以子类中方法的前置条件必须与超类中被覆盖的方法的前置条件相同或者更宽松。

(4)覆盖或实现父类的方法时输出结果可以被缩小。

原则三依赖注入原则

依赖注入原则(DIP:Dependence Inversion Principle)别名:依赖倒置原则或依赖反转原则

核心:要依赖于抽象,不要依赖于具体的实现

三层含义:

(1)高层模块不应该依赖低层模块,两者都应该依赖其抽象(抽象类或接口);(2)抽象不应该依赖细节(具体实现);

(3)细节(具体实现)应该依赖抽象。

三种实现方式:

1、通过构造函数传递依赖对象;

2、通过setter方法传递依赖对象;

3、接口声明实现依赖对象

在Java中的表现:

(1)模块间的依赖是通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;

(2)接口或抽象类不依赖于实现类;

(3)实现类依赖接口或抽象类。

原则四接口分离原则

接口分离原则 (ISP:Interface Segregation Principle) 别名接口隔离原则核心思想:不应该强迫客户程序依赖他们不需要使用的方法。接口分离原则的意思就是:一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口当中

接口隔离原则的定义

第一种定义:客户端不应该依赖它不需用的接口。

第二种定义:一个类对另外一个类的依赖性应当是建立在最小的接口上的。

接口分以下两种:

对象接口(Object Interface)Java中声明的一个类,通过new关键字产生的一个实例,对一个类型事物的描述,也是一种接口。

类接口(Class Interface)通过关键字Interface定义的接口。

分离接口的两种实现方法:

(1)使用委托分离接口。(Separation through Delegation)

就把请求委托给别的接口的实现类来完成需要的职责,就是适配器模式

(Adapter)。

(2)使用多重继承分离接口。(Separation through Multiple Inheritance。)

该方法通过实现多个接口来完成需要的职责。

两种方式各有优缺点,通常我们应该先考虑后一个方案,如果涉及到类型转换时

则选择前一个方案。

原则五开闭原则

开闭原则(OCP:Open Closed Principle)

核心思想:对扩展开放,对修改关闭。即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。

根据开闭原则,在设计一个软件系统模块(类,方法)的时候,应该可以在不修

改原有的模块(修改关闭)的基础上,能扩展其功能(扩展开放)。

扩展开放:某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。

修改关闭:某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求是修改关闭的。

开闭原则的实现方法

为了满足开闭原则的对修改关闭(closed for modification)原则以及扩展开放(open for extension)原则,应该对软件系统中的不变的部分加以抽象,在面向对象的设计中:

(1)、可以把这些不变的部分加以抽象成不变的接口,这些不变的接口可以应对未来的扩展;

(2)、接口的最小功能设计原则。根据这个原则,原有的接口要么可以应对未来的扩展;

(3)、不足的部分可以通过定义新的接口来实现;

(4)、模块之间的调用通过抽象接口进行,这样即使实现层发生变化,也无需修改调用方的代码。

接口可以被复用,但接口的实现却不一定能被复用。接口是稳定的,关闭的,但接口的实现是可变的,开放的。可以通过对接口的不同实现以及类的继承行为等为系统增加新的或改变系统原来的功能,实现软件系统的柔软扩展。

简单地说,软件系统是否有良好的接口(抽象)设计是判断软件系统是否满足开闭原则的一种重要的判断基准。现在多把开闭原则等同于面向接口的软件设计。

开闭原则的相对性

软件系统的构建是一个需要不断重构的过程,在这个过程中,模块的功能抽象,模块与模块间的关系,都不会从一开始就非常清晰明了,所以构建100%满足开闭原则的软件系统是相当困难的,这就是开闭原则的相对性。但在设计过程中,通过对模块功能的抽象(接口定义),模块之间的关系的抽象(通过接口调用),抽象与实现的分离(面向接口的程序设计)等,可以尽量接近满足开闭原则。

原则六迪米特法则

迪米特法则(LOD:Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP)

核心思想:一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。(类间解耦,低耦合)意思就是降低各个对象之间的耦合,提高系统的可维护性;在模块之间只通过接口来通信,而不理会模块的内部工作原理,可以使各个模块的耦合成都降到最低,促进软件的复用。

在将迪米特法则运用到系统的设计中时,应注意的几点:

①在类的划分上,应该创建有弱耦合的类;

②在类的结构设计上,每一个类都应当尽量降低成员的访问权限;

③在类的设计上,只要有可能,一个类应当设计成不变类;

④在对其他类的引用上,一个对象对其它对象的引用应当降到最低;

⑤尽量降低类的访问权限;

⑥谨慎使用序列化功能;

⑦不要暴露类成员,而应该提供相应的访问器(属性)

优点:

<1>迪米特法则的初衷在于降低类之间的耦合。由于每个类尽量减少对其他类的依赖,因此,很容易使得系统的功能模块功能独立,相互之间不存在(或很少有)依赖关系。

<2>遵循迪米特法则会使一个系统的局部设计简化,因为每一个局部都不会和远距离的对象有直接关联

缺点:

<1>会在系统里造出大量的小方法,散落在系统的各个角落。这些方法仅仅是传递间接的调用,因此与系统的商务逻辑无关,当设计师试图从一张类图看出总体的框架时,这些小的方法会造成迷惑和困扰。

<2>会造成系统的不同模块之间的通信效率降低,也会使系统的不同模块之间不容易协调。

设计模式中的应用:

<1>门面模式(Facade Pattern)

<2>中介模式(Mediator Pattern)

原则七合成聚合复用原则

合成聚合复用原则(CRP:Composite Reuse Principle) 别合成复用原则(Composition/Aggregate Reuse Principle, CARP)

核心思想:尽量使用对象组合,而不是继承来达到复用的目的。该原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。

术语:

(1)聚合(Aggregation):聚合用来表示“拥有”关系或者整体与部分的关系;

(2)合成(Composition):合成则用来表示一种强得多的“拥有”关系。在一个合成关系里面,部分和整体的生命周期是一样的。

复用的种类:

(1)继承

①优点:

新的实现较为容易,因为基类的大部分功能可以通过继承关系自动进入派生类;修改或扩展继承而来的实现较为容易。

②缺点:

继承复用破坏包装,因为继承将基类的实现细节暴露给派生类,这种复用也称为白箱复用;

如果基类的实现发生改变,那么派生类的实现也不得不发生改变;

从基类继承而来的实现是静态的,不可能在运行时发生改变,不够灵活。

(2)合成聚合

①优点:

新对象存取成分对象的唯一方法是通过成分对象的接口;

这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不见的;

这种复用支持包装;

这种复用所需的依赖较少;

每一个新的类可以将焦点集中在一个任务上;

这种复用可以在运行时动态进行,新对象可以使用合成/聚合关系将新的责任委派到合适的对象。

②缺点:

通过这种方式复用建造的系统会有较多的对象需要管理。

在复用时应优先考虑使用合成聚合而不是继承,而判定的判断为以下四个Coad 条件:

①派生类是基类的一个特殊种类,而不是基类的一个角色,即要分清"Has-A"和"Is-A"的区别;

②永远不会出现需要将派生类换成另一个类的派生类的情况;

③派生类具有扩展基类的责任,而不是具有置换或者注销掉基类的责任;

④只有在分类学角度有意义时,才可以使用继承。

(本文参考了网上的一些相关文章,在此致谢!)

面向对象设计原则

面向对象设计原则

单一职责原则--SRP 一、SRP简介(SRP--Single-Responsibility Principle): 就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因。 所谓职责,我们可以理解他为功能,就是设计的这个类功能应该只有一个,而不是两个或更多。也可以理解为引用变化的原因,当你发现有两个变化会要求我们修改这个类,那么你就要考虑撤分这个类了。因为职责是变化的一个轴线,当需求变化时,该变化会反映类的职责的变化。“就像一个人身兼数职,而这些事情相互关联不大,,甚至有冲突,那他就无法很好的解决这些职责,应该分到不同的人身上去做才对。” 二、举例说明: 违反SRP原则代码: modem接口明显具有两个职责:连接管理和数据通讯; interface Modem { public void dial(string pno); public void hangup(); public void send(char c); public void recv(); } 如果应用程序变化影响连接函数,那么就需要重构: interface DataChannel { public void send(char c); public void recv(); } interface Connection {

public void dial(string pno); public void hangup(); } 三、SRP优点: 消除耦合,减小因需求变化引起代码僵化性臭味 四、使用SRP注意点: 1、一个合理的类,应该仅有一个引起它变化的原因,即单一职责; 2、在没有变化征兆的情况下应用SRP或其他原则是不明智的; 3、在需求实际发生变化时就应该应用SRP等原则来重构代码; 4、使用测试驱动开发会迫使我们在设计出现臭味之前分离不合理代码; 5、如果测试不能迫使职责分离,僵化性和脆弱性的臭味会变得很强烈,那就应该用Facade或Proxy模式对代码重构;

c++面向对象课程设计报告

课程设计报告 课程名称面向对象程序设计 课题名称学生成绩管理系统 专业计算机科学与技术 班级计算机 1001 学号 01 姓名 指导教师李珍辉陈淑红李杰军 2011年 12 月 28 日

湖南工程学院 课程设计任务书 课程名称面向对象程序设计 课题学生成绩管理系统 专业班级计算机1001 学生姓名 学号 01 指导老师李珍辉陈淑红李杰军 审批 任务书下达日期 2011 年 11 月 15 日 任务完成日期 2011 年 12 月 28 日

一、设计内容与设计要求 1.课程设计目的: 面向对象程序设计课程设计是集中实践性环节之一,是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。要求学生达到熟练掌握C++语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。 2.课题题目 1)公司库存管理系统 2)高校学籍管理系统 3)高校工资管理系统 4)高校人事管理系统 5)通讯录程序设计 6)学生成绩管理系统 7) 图书管理系统 8)文本编辑器的设计与实现 9)学生考勤管理系统 10)公司人员管理系统 3.设计要求: ⑴设计课题题目:每位同学根据自己学号除以10所得的余数加1选择相 应题号的课题。随意换题者不记成绩。 ⑵根据自己对应的课题完成以下主要工作:①完成系统需求分析:包括 系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。②完 成系统总体设计:包括系统功能分析;系统功能模块划分与设计(系统功能模 块图)。③完成系统详细设计:包括数据库需求分析;数据库概念结构设计(E -R图);数据库逻辑结构设计;类层次图;界面设计与各功能模块实现。④系 统调试:调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修 改和调整。⑤使用说明书及编程体会:说明如何使用你编写的程序,详细列出 每一步的操作步骤。⑥关键源程序(带注释)

面向对象设计原则

面向对象设计原则 ?OO原则: ◆封装变化之物 ◆针对接口编码,而不是对实现 ◆应用程序中的每一个类只有一个改变的理由 ◆类是关于行为与功能的 ?目的: 设计原则形成更可维护更具灵 ◆使用已被证实的OO设计原则形成更可维护、更具灵 活性以及更易扩展的软件 Design Principles ?OCP (The Open-Closed Principle) 开放-封闭原则 SRP(The Single Responsibility Principle)单职责原则?SRP (The Single-Responsibility Principle) 单一职责原则?LSP (The Liskov Substitution Principle) Liskov替换原则 ?DIP (The Dependency-Inversion Principle) 依赖倒置原则?ISP (The Interface-Segregation Principle) 接口隔离原则?CARP (Composition/Aggregation Principle ) 合成/聚合复用 原则 ?LoD(Law of Demeter) 迪米特法则

Open-Closed Principle ?开-闭原则(Open-Closed Principle) 对扩展开放对修改关闭 ◆对扩展开放,对修改关闭 ◆OCP允许改变,以不需要修改现有程序代码的方式 进行 SRP ?单一职责原则(SRP) 就一个类而言,应该仅有一个引起它变化的原因。 ◆就个类而言,应该仅有个引起它变化的原因。

Example: SRP violation interface Modem{ public void dial (String pno);ti public void dial (String pno);public void hangup();public void send (char c); public char recv();}connection management data communication Example Separated modem interface

面向服务开发的七项原则

面向服务开发的七项原则 未来的软件结构要求有一套新的开发方法。你们公司做好准备了吗? 当今关于Web服务(web services)的描述主要是关于集成的。走出不景气阶段的企 业都把降低集成成本作为一个明显的目标。运用公开的、基于标准的、松散藕合的Web 服务技术就给企业提供了一个不是很昂贵的集成方法。然而,Web服务不仅仅是使集 成简单化了,它们的用处更多。实际上,它们将注定要从根本上改变人们创建和使用 软件的方式。 为了摆脱老式的思考方式,软件专家必须要了解Web服务的技术,并且要了解Web服务 可以给我们带来怎样的前景。下面的面向服务开发的七项原则——它们是随着老式思 考方式转变到新的思考方式而产生的——为你形成这种新层次的观念提供了指南。 1. 动态的服务替代了静态的组件 构建一个Web服务不仅仅是像传统的组件开发期望的那样创建具有特殊功能的软件。 一个Web服务的Web服务描述语言(WSDL)文件动态地描述了Web服务的功能。所以,开发人员只需要指出在哪里找到WSDL文件,这样调用Web服务的软件在运行时就可以找到对服务功能的描述。该原则要求在运用Web服务的系统中显示逻辑层同商业逻辑 层和持久(persistence)逻辑层分离开。当开发人员构建一个Web服务时,他们可能 不知道那个服务是如何被调用的、或者Web服务使用者的用户界面将是怎样的。一个Web服务架构师不能将商业逻辑和显示逻辑结合起来。 2. 服务呈现(Exposure)和响应(Reflection)替代了传统的系统集成 当今的系统架构师根据系统级的需求来集成项目。架构师计划各种组件应该如何集成 。作为这种top-down方法的替代,面向服务的开发采用了一种bottom-up的方法。在 任何系统结构形成前,系统中的每个组件都呈现成一个Web服务。然后,每个服务( 查询一个服务自己的功能)给外部系统提供它们访问服务所需要的信息。 在构建一个系统时,Web服务架构师首先考虑系统的需求,并进行服务装配。在服务 装配过程中,架构师访问服务的动态描述,它们只代表了实际的API的一部分。然后 ,架构师确定系统的结构,即使在运行前,单独的组件及其接口并没有被完全地描述 。 3. 为广泛的适用性编写代码替代了为可重用性编写代码 为可重用性编写代码是面向对象编程的一个重要的特点。实际上,对开发人员来说, 编写可重用的代码可能比为单独用途的应用程序编写代码更具挑战性。因此,灵活的 软件方法(如Extreme Programming(XP))就避开了可重用性。在XP中,如果外来 的功能进入到代码中,那么开发人员就重新编写、或重构(refactor)代码,直到它 尽可能地简单。 虽然重构可以形成一些重用的方法,因为最终代码满足很多情况,但这种方法同传统 的为可重用性编写的代码不同,因为它的目的是创建灵活的和广泛适用的代码。重用

问卷设计六大原则

问卷设计六大原则 问卷调查是目前调查业中所广泛采用的调查方式——即由调查机构根据调查目的设计各类调查问卷,然后采取抽样的方式(随机抽样或整群抽样)确定调查样本,通过调查员对样本的访问,完成事先设计的调查项目,最后,由统计分析得出调查结果的一种方式。它严格遵循的是概率与统计原理,因而,调查方式具有较强的科学性,同时也便于操作。这一方式对调查结果的影响,除了样本选择、调查员素质、统计手段等因素外,问卷设计水平是其中的一个前提性条件。而问卷设计的好坏很大程度上又与设计制度(原则)有关! 一、合理性。合理性指的是问卷必须紧密与调查主题相关。违背了这样一点,再漂亮或精美的问卷都是无益的。而所谓问卷体现调查主题其实质是在问卷设计之初要找出与“调查主题相关的要素”! 如:“调查某化妆品的用户消费感受”——这里并没有一个现成的选择要素的法则。但从问题出发,特别是结合一定的行业经验与商业知识,要素是能够被寻找出来的:一是使用者(可认定为购买者)。包括她(他)的基本情况(自然状况:如性别、年龄、皮肤性质等);使用化妆品的情况(是否使用过该化妆品、周期、使用化妆品的日常习惯等);二是购买力和购买欲。包括她(他)的社会状况收入水平、受教育程度、职业等);化妆品消费特点(品牌、包装、价位、产品外观等);使用该化妆品的效果(评价。问题应具有一定的多样性、但又限制在某个范围内,如Ⅰ.价格;Ⅱ.使用效果;Ⅲ.心理满足,等);三是产品本身。包括对包装与商标的评价、广告等促销手段的影响力、与市场上同类产品的横向比较、等……应该说,具有了这样几个要素对于调查主题的结果是有直接帮助的。被访问者也相对容易了解调查员的意图,从而予以配合。 二、一般性。即问题的设置是否具有普遍意义。 应该说,这是问卷设计的一个基本要求,但我们仍然能够在问卷中发现这类带有一定常识性的错误。这一错误不仅不利于调查成果的整理分析,而且会使调查委托方轻视调查者的水平。如搞一个“居民广告接受度”的调查: 问题:你通常选择哪一种广告媒体: 答案:a、报纸;b、电视;c、杂志;d、广播;e、其它 而如果答案是另一种形式: a、报纸; b、车票; c、电视; d、墙幕广告; e、汽球; f、大巴士; g、广告衫; h、…… 如果我们的统计指标没有那么细(或根本没必要),那我们就犯了一个“特殊性”的错误,从而导致某些问题的回答实际上是对调查无助的! 在一般性的问卷技巧中,需要注意的是:不能犯问题内容上的错误。如: 问题:你拥有哪一种信用卡? 答案:a、长城卡;b、牡丹卡;c、龙卡;d、维萨卡;e、金穗卡; ——其中“d”的设置是错误的,应该避免。 三、逻辑性。问卷的设计要有整体感,这种整体感即是问题与问题之间要具有逻辑性,独立的问题本身也不能出现逻辑上的谬误。从而使问卷成为一个相对完善的小系统。如: 问题: Ⅰ、你通常每日读几份报纸? a、不读报; b、1份; c、2份; d、3份以上; Ⅱ、你通常用多长时间读报? a、10分钟以内; b、半小时左右; c、1小时; d、1小时以上; Ⅲ、你经常读的是下面哪类(或几类)报纸? a、×市晚报; b、×省日报; c、人民日报; d、参考消息; e、中央广播电视报; f、足球…… 在以上的几个问题中,由于问题设置紧密相关,因而能够获得比较完整的信息。调查对象也会感到问题集中、提问有章法。相反,假如问题是发散的、带有意识流痕迹的,问卷就会给人以随意性而不是严谨性的感觉。那么,将市场调查作为经营决策的一个科学过程的企业就会对调查失去信心! 因此,逻辑性的要求即是与问卷的条理性、程序性分不开的。已经看到,在一个综合性的问卷中,调查者将差异较大的问卷分块设置,从而保证了每个“分块”的问题都密切相关。 四、明确性。所谓明确性,事实上是问题设置的规范性。这一原则具体是指:命题是否准确?提问是

机票预订系统程序设计说明书模板(面向对象)

程序设计说明书 1引言 1?1编写目的 程序设汁说明书提供用户与开发人员对开发软件的共同理解,使用户与开发单位就该系统的功能定义、环境需求达成共识,是今后各阶段设汁工作的基础和依据,也是本阶段评审和测试阶段确认与验收的依据。本需求分析的读者对象包括客户、业务人员需求分析人员、测试人员、用户文档编写人和项目管理人员。 本阶段已在系统的需求分析的基础上,对机票预左系统做概要设计。主要解决了实现该系统需求的程序模块设讣问题。包括如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及数据结构、模块结构的设汁等。在以下的概要设计报告中将对在本阶段中对系统所做的所有概要设计进行详细的说明。 在下一阶段的详细设计中,程序设计员可参考此概要设计报告,在概要设计对机票预定系统所做的模块结构设计的基础上,对系统进行详细设汁。在以后的软件测试以及软件维护阶段也可参考此说明书,以便于了解在概要设计过程中所完成的各模块设il?结构,或在修改时找出在本阶段设计的不足或错误。 预期的读者:系统管理员、机票预订管理员、订票旅客、程序员。 12背景 软件名称:机票预订系统 提出者:程序员 开发者:XXX o 用户:系统管理员、程序员。 运行该软件的计算站(中心):Internet.航空公司、网上银行

2程序设计说明 2.1需求规定 1.管理员管理航班与打印机票活动图 (1) 管理员登陆界面管理航班信息与旅客信息。 (2) 管理员根据旅客信息安排航班。 (3) 管理员根据机票价格收费。 (4) 打印机票与账单。

根据上面的描述,管理员管理航班与打印机票活动图如图5-1所示。 ?活动起点 图2.1订票管理员管理航班与打印机票活动图 2 ?旅客订票与打印机票活动图 ⑴旅客登陆操作界面选择航班或山订票管理员安排航班。 (2) 选择航班后确认订票形象。 (3) 确认完毕缴费。 (4) 山管理员打印机票和账单。 根据上面的描述,旅客订票与打印机票活动图如图5-2所示。

UML面向对象分析与设计、建模与设计课后选择判断

第一章 1.选择题 (1)软件工程的概念是在()年被首次提出的。 A.1949 B.1968 C.1972 D.1989 (2)下列不属于软件工程的目标的一项是() A.提高软件产品的质量 B.提高软件产品的可靠性 C.减少软件产品的需求 D.控制软件开发成本 (3)软件危机产生的主要原因是() A.软件工具落后 B.软件生产能力不足 C.对软件认识不够 D.软件本身的特点及开发方法 (4)人们公认的第一门面向对象编程语言是()。 A. Simula B. Smalltalk C. C++ D. Java (5)下列编程语言中不支持面向对象的特性的是()。 A. C++ B. ANSI C C. Java D. Objetive c (6)下列选项中不是面向对象方法的相关原则的是()

A.封装 B.继承 C.多态 D.结构 (7)()是面向对象方法中用来描述”对客户隐藏对象的属性和实现细节”的概念。 A.封装 B.继承 C.多态 D.抽象 (8)下列选项中不属于面向对象方法的优势之-的是()。 A.复用性强 B.改善了软件结构 C.软件的执行效率更高 D.抽象更符合人类的思维习惯 2.判断题 (1)软件就是程序,编写软件就是编写程序。对错 (2)软件危机的主要表现是软件需求增加,软件价格上升。对错 (3) C语言对面向对象的发展起到了重要作用。对错 (4)面向对象方法中的对象是从客观世界中抽象出来的一个集合体。对错 (5)面向对象可以保证开发过程中的需求变化完全不会导致系统结构的变化。对错 (6)面向对象方法就是使用面向对象的程序设计语言进行编程。对错

(7)对象的自治性指的是对象是完全封闭的,不受任何外界影响。对错 (8)类是面向对象程序中的构造单位,也是面向对象程序设计语言的基本成分。对错 第二章 1.选择题 1.选择题 (1)下列关于模型的表述,不正确的项是()。 A.建模语言只能是图形表示的 B.模型所描绘的系统蓝團既可以包括详细的计划,也可以包括系统的总体计划 C.模型可以帮助开发组生成有用的工作产品 D.最好的模型总是与现实世界联系密切 (2) UML的全称是()。 A. Unify Modeling L.anguage B. Unified Modeling Language

软件测试复习习题

软件测试复习习题 第一章:软件测试的基本概念 1、测试用例的要素有哪些: 1)测试目标。2)测试环境。3)输入数据4)步骤5)预期结果 1.阐述测试的七大原则 1)所有的测试都应追溯到用户需求。2)应当把“尽早测试和不断地进行软件测试”作为软件测试的座右铭。3)Pareto原则应用于软件测试。4)测试应从“小规模”开始,逐步转向“大规模”。5)穷举测试是不可能的。6)为了达到最佳效果,应该由独立的第三方来构造测试。7)不充分的测试是不负责任的,过分的测试是一种资源的浪费,同样也是一种不负责任的表现。 2.良好的单元测试是否可以替代集成测试+ 不可以。因为单元测试主要从单元内部来测试,而集成测试主要考查单元的外部接口。 3.自动化测试工具可以让繁重的手工劳动变得轻松,那么,我们还有必要做手工测试吗?P174 有。因为手工测试有其不可替代的地方,因为人是具有强智判断能力的动物,而工具是相对机械,缺乏思维能力的东西。手工测试不可替代的地方至少包括以下几点。1)测试用例的设计。2)界面和用户体验测试3)正确性检查 4.只要学会某种时下流行的自动化测试工具的使用,就可以轻松搞定测试工作了吗? 5.我们该如何应用各种测试模型 6.从测试阶段和工作活动两方面简单阐述下软件测试的流程。 软件测试过程可分成以下步骤:单元测试、集成测试、确认测试和系统测试,最后进行验收测试。还有测试计划中的需求评审和设计评审。在单元测试和集成测试中进行测试脚本开发。在系统测试和验收测试中进行测试结果分析和报告。

7.简单阐述W 模型的优缺点以及H 模型的特点 W 模型是V 模型自然而然的发展。它强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、功能和设计同样要测试。可以说,测试与开发是同步进行的,从而有利于尽早地发现问题。因此,相对于V 模型,W 模型更科学。W 模型也是有局限性的。W 模型和V 模型都把软件的开发视为需求、设计、编码等一系列串行的活动。同样的,软件开发和测试保持一种线性的前后关系,需要有严格的指令表示上一阶段完全结束,才可正式开始下一阶段。这样就无法支持迭代、自发性以及变更调整。 H 模型的特点:1.软件测试不仅仅指测试的执行,还包括很多其他活动;2.软件测试是一个独立的流程,贯穿产品整个生命周期,与其他流程并发地执行;3.软件测试要尽早准备,尽早执行;4.软件测试是根据被测物的不同而分层次进行的。不同层次的测试活动可以是按照某个次序先后进行的,但也可能是反复的。 第三章:白盒测试技术 1、根据右图给出的程序流程图,完成以下要求: (1)画出相应的控制流图 (2)计算环形复杂度 (3)找出程序的独立路径集合 解(1)控制流图如右图: 其中①A<5 ②B=5 ③X=X/A ④A=2 ⑤X>2 ⑥X=X+1 (2)V(G)= 5 (3)独立路径集合 路径1:1→3→4→7→8 路径2:1→2→4→7→8 路径3:1→2→4→5→7→8 路径4 1→2→4→5→6→8 路径5:1→2→3→4→7→8 第四章:黑盒测试技术 下面是对某IC 卡加油机应用系统的基本流和备选流的描述。 基本流A : a c 2 1 4 3 6 8 7 5 c b e d

六大设计原则

设计模式六大设计原则 单一职责原则(Single Responsibility Principle-SRP) 理解:对于一个类而言,应该仅有一个引起它变化的原因。说白了就是,不同的类具备不同的职责,各施其责。这就好比一个团队,大家分工协作,互不影响,各做各的事情。 应用:当我们做系统设计时,如果发现有一个类拥有了两种的职责,那就问自己一个问题:可以将这个类分成两个类吗?如果真的有必要,那就分吧。千万不要让一个类干的事情太多!开放封闭原则(open closed principle-OCP) 理解:简言之,对扩展开放,对修改封闭。换句话说,可以去扩展类,但不要去修改类。应用:当需求有改动,要修改代码了,此时您要做的是,尽量用继承或组合的方式来扩展类的功能,而不是直接修改类的代码。当然,如果能够确保对整体架构不会产生任何影响,那么也没必要搞得那么复杂了,直接改这个类吧。 里氏替换原则(liskov substitution principle -LSP) 理解:父类能够替换子类,但子类不一定能替换父类。也就是说,在代码中可以将父类全部替换为子类,程序不会报错,也不会在运行时出现任何异常,但反过来却不一定成立。 应用:在继承类时,务必重写(Override)父类中所有的方法,尤其需要注意父类的protected 方法(它们往往是让您重写的),子类尽量不要暴露自己的public 方法供外界调用。 最少知识原则(last knowledge principle-LKP) 理解:尽量减少对象之间的交互,从而减小类之间的耦合。简言之,一定要做到:低耦合,高内聚。 应用:在做系统设计时,不要让一个类依赖于太多的其他类,需尽量减小依赖关系,否则,您死都不知道自己怎么死的。 接口隔离原则(Interface Segregation Principle - ISP) 理解:不要对外暴露没有实际意义的接口。也就是说,接口是给别人调用的,那就不要去为难别人了,尽可能保证接口的实用性吧。她好,我也好。 应用:当需要对外暴露接口时,需要再三斟酌,如果真的没有必要对外提供的,就删了吧。一旦您提供了,就意味着,您将来要多做一件事情,何苦要给自己找事做呢。 依赖倒置原则(Dependence Inversion Principle – DIP) 理解:应该面向接口编程,不应该面向实现类编程。面向实现类编程,相当于就是论事,那是正向依赖(正常人思维);面向接口编程,相当于通过事物表象来看本质,那是反向依赖,即依赖倒置(程序员思维)。 应用:并不是说,所有的类都要有一个对应的接口,而是说,如果有接口,那就尽量使用接口来编程吧。

面向对象分析设计原则

一、单一职责原则(SRP) 就一个类而言,应该仅有一个引起它变化的原因。软件设计真正要做的许多内容,就是发现职责并把那些职责相互分离。测试驱动的开发实践常常会在设计出现臭味之前就迫使我们分离职责。 二、开闭原则(OCP) 软件实体(类、模块、函数)应该是可扩展的,但是不可修改的。也就是说:对于扩展是开放的,对于更改是封闭的。怎样可能在不改动模块源代码的情况下去更改它的行为呢?怎样才能在无需对模块进行改动的情况下就改变它的功能呢?关键是抽象!因此在进行面向对象设计时要尽量考虑接口封装机制、抽象机制和多态技术。该原则同样适合于非面向对象设计的方法,是软件工程设计方法的重要原则之一。 三、替换原则(LSP) 子类应当可以替换父类并出现在父类能够出现的任何地方。这个原则是Liskov于1987年提出的设计原则。它同样可以从Bertrand Meyer 的DBC (Design by Contract〔基于契约设计〕) 的概念推出。 四、依赖倒置原则(DIP) 1、高层模块不应该依赖于低层模块。二者都应该依赖于抽象。2、抽象不应该依赖于细节。细节应该依赖于抽象。在进行业务设计时,与特定业务有关的依赖关系应该尽量依赖接口和抽象类,而不是依赖于具体类。具体类只负责相关业务的实现,修改具体类不影响与特定业务有关的依赖关系。在结构化设计中,我们可以看到底层的模块是对高层抽象模块的实现(高层抽象模块通过调用底层模块),这说明,抽象的模块要依赖具体实现相关的模块,底层模块的具体实现发生变动时将会严重影响高层抽象的模块,显然这是结构化方法的一个"硬伤"。面向对象方法的依赖关系刚好相反,具体实现类依赖于抽象类和接口。 五、接口分离原则(ISP) 采用多个与特定客户类有关的接口比采用一个通用的涵盖多个业务方法的接口要好。ISP原则是另外一个支持诸如COM等组件化的使能技术。缺少ISP,组件、类的可用性和移植性将大打折扣。这个原则的本质相当简单。如果你拥有一个针对多个客户的类,为每一个客户创建特定业务接口,然后使该客户类继承多个特定业务接口将比直接加载客户所需所有方法有效。 以上五个原则是面向对象中常常用到的原则。此外,除上述五原则外,还有一些常用的经验诸如类结构层次以三到四层为宜、类的职责明确化(一个类对应一个具体职责)等可供我们在进行面向对象设计参考。但就上面的几个原则看来,我们看到这些类在几何分布上呈现树型拓扑的关系,这是一种良好、开放式的线性关系、具有较低的设计复杂度。一般说来,在软件设计中我们应当尽量避免出现带有闭包、循环的设计关系,它们反映的是较大的耦合度和设计复杂化。 面向对象之代码复用规则 1、对接口编程 "对接口编程"是面向对象设计(OOD)的第一个基本原则。它的含义是:使用接口和同类型的组件通讯,即,对于所有完成相同功能的组件,应该抽象出一个接口,它们都实现该接口。具体到JAVA中,可以是接口,或者是抽象类,所有完成相同功能的组件都实现该接口,或者从该抽象类继承。尽量使用接口。接口只是对象打交道的入口,只有具有继承关系才使用抽象类。 2、优先使用对象组合,而不是类继承 "优先使用对象组合,而不是类继承"是面向对象设计的第二个原则。并不是说继承不重要,而是因为每个学习OOP的人都知道OO的基本特性之一就是继承,以至于继承已经被滥用了,而对象组合技术往往被忽视了。只有有现实生活中的父子关系才使用继承。 相关的设计模式有:Bridge、Composite、Decorator、Observer、Strategy等。 3、将可变的部分和不可变的部分分离 "将可变的部分和不可变的部分分离"是面向对象设计的第三个原则。如果使用继承的复用技术,我们

面向对象程序设计实训说明书电影院网上订票系统设计

中北大学 面向对象程序设计实训 说明书 学院、系:软件学院 专业:软件工程 学生班级:13140A01 学生姓名:景贝贝学号:1314011438设计题目:电影院网上订票系统设计 起迄日期:2015年6月29日- 2015年7月10日指导教师:杨秋翔 2015 年7月8 日 实训任务书

实训任务书

一、需求分析 需求分析包括可行性分析、系统流程图和数据流图,数据字典。可行性分析包括技术可行性、经济可行性和操作可行性。 1.1 可行性分析 1.1.1 技术可行性 根据电影院提出的系统功能、性能及实现系统的各种约束条件,根据新系统目标来衡量所需的技术是否具备,本系统是一个数据库管理和查询的系统,现有的技术已较为成熟,硬件、软件的性能要求、环境条件等各项条件良好,估计利用现有技术条件应完全可以达到该系统的功能目标。同时,考虑给予的开发期限也较为充裕,预计系统是可以在规定期限内完成开发的。 由以上分析可知,影院售票系统的开发在技术上是可行的。 1.1.2 经济可行性 电影院具有信息化的处理设施,并且拥有支持本系统的应用平台。因此无需再投入资金购买其他设施。 系统的开发基于本人对程序开发的实践学习而来,电影院无需资金投入,并且软件开发过程投入的成本不高,因此开发经费完全可以

接受。 由以上分析可知,影院售票系统在经济上是可行的。 1.1.3 操作可行性 根据系统页面用户可以自动查询影片信息。还可浏览完影片信息以后操作订票、退票等功能。管理员也可以在后台添加、修改并删除影片信息,还可以管理注册用户信息和用户订票信息。 由以上分析可知本系统在操作上也是可行的。 1.2 系统流程图 首先未注册的用户要先注册,注册完了以后输入用户名和密码进入页面。根据网站上的影片信息用户可以选择自己喜欢的电影来订票。然后订票信息会自动存储到后台订票信息数据当中。 本系统的具体流程为如图所示。

六西格玛设计的8个基本原则

https://www.doczj.com/doc/96172483.html,/ 六西格玛设计的8个基本原则 简单地讲,六西格玛设计是为了满足顾客的要求和期望,并可为顾客带来价值和服务。六西格玛设计同传统设计一样,一些基本原则应该满足。否则,并非是一个成功的六西格玛设计项目。 1、性能指标适合要求的原则 每一种新产品或服务,性能指标必须达到顾客要求,这也是最低要求。新产品或服务的规格应该是清晰的,而且是可测量的。 2、实用性和舒适性的原则 每一种新产品或服务,要实用性和舒适性相结合,能使顾客满意,新产品设计要新颖,要符合美学原则。 3、创新性和超前性原则 每一种新的发明创造,能起到一种推动社会进步的作用。优秀的六西格玛设计师,是人类文明的开拓者。设计的项目具有创新精神和超前意识,为顾客带来新的愉悦,为社会创造价值,为人类作出贡献。 4、工艺性和可制造性原则 每一种新产品或服务设计出来,要能够形成商品,并快速投放市场,应该具有好的工艺性或可制造性。无论是加工或组装,工艺性能要满足制造要求,且夹具及辅料要最省,通用零部件要省,标准化程度要高。 5、可靠性原则 每一种新产品或服务设计出来,新产品要有一定的可靠度,满足顾客的预期使用寿命,为顾客真正带来价值。 6、可维修性原则 每一种新产品设计出来,在保障使用的前提下,可维修性也要提出来。尽量模块化、标准化、通用化,拆卸维修方便,提高产品的使用寿命,超越顾客的期望。 7、成本效益原则 每一种新产品的设计都要考虑成本与效益的问题,找到一个顾客与提供商的成本与效益的最佳平衡点。六西格玛设计师要系统考虑,全面统筹,给顾客带来价值的同时,要考虑给股东或社会带来价值。 8、安全性原则 每一种新产品或服务投放市场,应该是安全地满足顾客的要求和期望,六西格玛设计师要充分考虑设计的稳健性,提供必要的裕量。防止失效,防止给人类和社会造成灾难。这样的例子是不胜枚举的。往往是由于设计师的疏忽而酿成大祸。六西格玛设计师是人类灵魂的工程师,社会的进步,人类的发展,他们的作用是功不可没的。安全性要始终牢记于心,一种新产品或服务,要为社会带来福音。

面向对象方法系统设计说明书模板

设计说明 目录 1 概述 ..................... 错误!未定义书签。 编写目的 .......... 错误!未定义书签。 参考资料 .......... 错误!未定义书签。 术语和缩写词* .错误!未定义书签。 2 需求概述.............. 错误!未定义书签。 3 结构设计.............. 错误!未定义书签。 总体设计 .......... 错误!未定义书签。 功能分配 .......... 错误!未定义书签。 接口设计 .......... 错误!未定义书签。 数据结构设计... 错误!未定义书签。 公共数据结构设计错误!未定 义书签。 数据库设计错误!未定义书签。 数据结构同程序的关系*错误! 未定义书签。 出错处理设计* .错误!未定义书签。 其它* ................ 错误!未定义书签。 4 类的设计.............. 错误!未定义书签。 类1设计 .......... 错误!未定义书签。 功能说明... 错误!未定义书签。

属性说明... 错误!未定义书签。 公有方法说明错误!未定义书 签。 私有方法说明错误!未定义书 签。 类2设计 .......... 错误!未定义书签。 功能说明... 错误!未定义书签。 属性说明... 错误!未定义书签。 公有方法说明错误!未定义书 签。 私有方法说明错误!未定义书 签。 5 用例实现的设计 .. 错误!未定义书签。 用例1设计 ...... 错误!未定义书签。 功能说明... 错误!未定义书签。 界面设计... 错误!未定义书签。 交互设计... 错误!未定义书签。 用例2设计 ...... 错误!未定义书签。 功能说明... 错误!未定义书签。 界面设计... 错误!未定义书签。 交互设计... 错误!未定义书签。

第6章 面向对象设计原则

1 第06章面向对象的设计原则Object-Oriented Design Principles -1- 2 -2- 学习路线图 OO UML OOP DP … Case-Study … 学习路线图 : : …… …… …… (1) 2 34 5 6 7 8 9 10 3从问题开始! ?长方形与正方形 –假如我们有一个类:长方形(Rectangle) –我们需要一个新的类,正方形(Square) –问:可否直接继承长方形? 没问题,因为数学上正方形就是长方形的子类!height : int width : int getHeight() : int getWidth() : int setHeight(h : setWidth(w : int) setHeight(h : int) setWidth(w : int)

7-7--7-面向对象的设计原则 ?面向对象的设计原则 –是面向对象设计的基本指导思想–是评价面向对象设计的价值观体系–是设计模式的出发点和归宿 ?面向对象的设计原则是构造高质量软件的出发点 8 -8--8- 设计目标 ?构造出高质量软件,以保持系统稳定?设计目标 –可扩展性(Extensibility )–灵活性(Flexibility )–可插入性(Pluggability )– …… 9-9--9- 设计质量:培养灵敏的嗅觉 ?糟糕的设计总是散发出臭味,让人不悦 –判断一个设计的好坏,主观上能否让你的合作方感到心情愉悦,是最直观的标准 ?设计开发人员要培养嗅觉,当你看到UML 图或者代码,感到杂乱、繁琐、郁闷的时候,你可能正面对一个糟糕的设计 ?这种嗅觉是在实践开发中培养起来的,而面向对象设计原则对此加以归纳和总结 10 -10--10- 设计质量:坏的设计 ?什么是坏的设计? –僵硬性(Rigidity ):刚性,难以扩展–脆弱性(Fragility ):易碎,难以修改 –牢固性(Immobility ):无法分解成可移植的组件 –不必要的复杂性(Needless Repetition ):Ctrl C + Ctrl V –晦涩性(Opacity ):不透明,很难看清设计者的真实意图 11-11--11- 设计质量:好的设计 ?什么是好的设计? –容易理解 –容易修改和扩展–容易复用 –容易实现与应用 – 简单、紧凑、经济适用 ?让人工作起来心情愉快的设计 ?设计原则是提高设计质量的基本原则 12 -12--12- 面向对象的基本设计原则 ?LSP :Liskov 替换原则 –The Liskov Substitution Principle ?OCP :开放-封闭原则 –The Open-Close Principle ?SRP :单一职责原则 –The Single Responsibility Principle ?ISP :接口隔离原则 –The Interface Segregation Principle ?DIP :依赖倒置原则 –The Dependency Inversion Principle ?……

面向对象程序的设计说明书与程序(日历记事本)

日历记事本 1.课程设计目的 通过此次课程设计,巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。使我们通过该教学环节与手段,把所学课程及相关知识加以融会贯通,全面掌握Java语言的编程思想及面向对象程序设计的方法,为今后从事实际工作打下坚实的基础。 本课程设计设计GUI界面的日历记事本,系统将日历和记事本结合在一起,可以方便的保存、查看日志,即在任何日期记载下有关容或查看某个日期记载的容。 2.设计方案论证 2.1设计思路 2.1.1 本系统界面的左侧是日历和一幅图像。该日历可以按年前后翻动,用鼠标左键单击“上年”按钮,可将当前日历的年份减一;用鼠标左键单击“下年”按钮,可将当前日历的年份加一。该日历还可以在某年按月前后翻动,用鼠标单击“上月”按钮,可将当前日历的月份减一;用鼠标单击“下月”按钮,可将当前日历的月份增一。 2.1.2 系统界面的右侧是记事本和一个时钟。用鼠标单击日历上的日期,就可以通过该记事本编辑有关日志,并将日志保存到一个文件。该文件的名字是由当前日期组成的字符序列。用户可以查看、删除某个日期的日志,也可以继续向某个日志添加新的容。2.1.3 当某个日期有日志时,显示该日期的外观上就会出现“有”标记,表明这个日期有日志;当用户删除某个日期的日志后,该日期的外观上的“有” 标记就会消失。 2.2设计方法 在设计日历记事本时,需要编写6个Java源文件:CalendarWindow.java、CalendarPad.java、NotePad.java、CalendarImage.java 、Clock.java和CalendarMessage.java。 日历记事本除了需要编写的上述6个Java源文件所给出的类外,还需要Java系统提供的一些重要的类,如JTextField、JTextArea和File类。 2.2.1 CalendarWindow.java 主类

商业空间设计的6大原则

商业空间设计最终的目的有且只有一个 那就是让消费者迈入店铺门槛,并引导他们消费更多 这也是众多零售商想尽办法想要达到的目的 他们通过播放音乐或采用诱人的气味充满整个售卖场所等等的方式 去赢得顾客的关注与消费。 而对于商业空间设计公司来说 从最初的店面的规划,到实施,再到最后的交付 其设计的诀窍是了解消费者,设计出符合消费者喜好的室内环境 这才是商业空间设计真正的艺术所在。 下面的六种商业空间设计艺术将改变零售环境: 1.引人注目的视觉营销 商业空间设计中的橱窗所带来的视觉营销力是不容小觑的。引人注目的视觉营销可以吸引购物者的注意力,并鼓励他们走进商店消费。 橱窗是所有零售店的眼睛,透过这双眼睛,可以向顾客讲述商店的故事。这个故事的每一个细节,都有可能走进顾客的心里,牵动顾客将步代迈入商店内。通常来说,橱窗的展示核心在于店铺的核心商品。

2.减慢客户的购物过程 现代消费者非常忙碌,并且倾向于匆忙购物。商业空间设计的工作是减缓 这段购物过程并增加顾客在商店的停留时间。一种方法是在入口处放置一个醒 目的大型显示屏。 客户将很快知道他们是否喜欢他们所看到的内容,并将关键产品放在商店 前面可以帮助他们做出这个决定。通过一些动线的设计,零售商可以鼓励顾客 进一步进入商店的最深层。 3.动线引导顾客的购物路径 在进行商业空间设计时,零售商应该清楚的知道,他们规划的顾客动线, 应清楚地了解,哪些产品放在什么位置会有利于引导顾客走入商店的最深层, 接触更多深层的商,品,最终获得最多的消费。 一些零售商没有合理的动线设计,没有高效的将顾客带入他们想去的地方,只是单纯的引导顾客进入走道而没有考虑去设计出一条能增加停留时间、利于 销售的动线。 而商业空间设计中的动线设计原则,是设计出一条理想的客户购物路线. 4.引导顾客到商店右侧

面向对象的设计原则之四大黄金法则

一些 面向对象的设计 法则 Bob T arr 著 outmyth 译

法则1:优先使用(对象)组合,而非(类)继承 [ Favor Composition Over Inheritance ] 组合 ?(对象)组合是一种通过创建一个组合了其它对象的对象,从而获得新功能的复用方法。 ?将功能委托给所组合的一个对象,从而获得新功能。 ?有些时候也称之为“聚合”(aggregation)或“包容”(containment),尽管有些作者对 这些术语赋予了专门的含义 ?例如: ?聚合:一个对象拥有另一个对象或对另一个对象负责(即一个对象包含另一个对象或是另一个对象的一部分),并且聚合对象和其所有者具有相同的生命周期。(译者 注:即所谓的“同生共死”关系,可参见GOF的Design Patterns: Elements of Reusable Object-Oriented Software的引言部分。) ?包容:一种特殊类型的组合,对于其它对象而言,容器中的被包含对象是不可见的,其它对象仅能通过容器对象来访问被包含对象。(Coad) ?包含可以通过以下两种方式实现: ?根据引用(By reference) ?根据值(By value) ?C++允许根据值或引用来实现包含。 ?但是在Java中,一切皆为对象的引用! 组合的优点和缺点 ?优点: ?容器类仅能通过被包含对象的接口来对其进行访问。 ?“黑盒”复用,因为被包含对象的内部细节对外是不可见。 ?对装性好。 ?实现上的相互依赖性比较小。(译者注:被包含对象与容器对象之间的依赖关系比较少) ?每一个类只专注于一项任务。 ?通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义(对象的)组合。

设计模式考试复习题(含答案)

一、1. 设计模式一般用来解决什么样的问题: A.同一问题的不同表相 2. 下列属于面向对象基本原则的是: C.里氏代换 3. Open-Close原则的含义是一个软件实体:A.应当对扩展开放,对修改关闭. 4. 当我们想创建一个具体的对象而又不希望指定具体的类时,使用(A)模式。A.创建型 5. 要依赖于抽象不要依赖于具体。即针对接口编程不要针对实现编程:(D)依赖倒转原则 6. 依据设计模式思想,程序开发中应优先使用的是( A )关系实现复用。A, 委派 7. 设计模式的两大主题是( D ) D.系统复用与系统扩展 8. 单体模式中,两个基本要点(AB)和单体类自己提供单例A .构造函数私有 B.唯一实例 9. 下列模式中,属于行为模式的是( B ) B观察者 10. “不要和陌生人说话”是( D )原则的通俗表述 D.迪米特 1. 软件体系结构是指一个系统的有目的的设计和规划,这个设计规划既不描述活动,也不描述系统怎样开发,它只描述系统的组成元素及其相互的交互协作。 2.一个UML模型只描述了一个系统要做什么,它并没告诉我们系统是怎么做。 3.接口是可以在整个模型中反复使用的一组行为,是一个没有属性而只有方法的类。 4.多重性指的是,某个类有多个对象可以和另一个类的一对象关联。 5.当一个类的对象可以充当多种角色时,自身关联就可能发生。 6.在泛化关系中,子类可以替代父类。后前者出现的可以相同地方。反过来却不成立。 7.最通常的依赖关系是一个类操作的形构中用到了另一个类的定义。 8.组成是强类型的聚集,因为聚集中的每个部分体只能属于一个整体。 9.实现的符号和继承的符号有相似之处,两者的唯一差别是实现关系用虚线表示,继承关系用实线表示。 10. 设计模式中应优先使用对象组合而不是类继承。 1.适配器模式属于创建型模式结构型( F ) 2.在设计模式中,“效果”只是指“原因和结果”( T ) 3.设计模式使代码编制不能真正工程化( T ) 4.面向对象语言编程中的异常处理,可以理解为责任链模式(T ) 5.反模式就是反对在软件开发过程中使用设计模式分析:反模式用来解决问题的带有共性的不良方法(F ) 1.什么是设计模式?设计模式目标是什么? 答:设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解,保证代码可靠性。 2.设计模式中一般都遵循的原则有什么? 答:开闭原则、根据场景进行设计原则、优先组合原则、包容变化原则 3.“Gang of Four”针对“创建优秀面向对象设计”建议了哪些策略? 答:针对接口编程、优先使用对象组合而不是类继承,找到并封装变化点。 4.面向对象系统中功能复用的两种最常用技术是什么? 答:类继承和对象组合,类继承允许你根据其他类的实现来定义一个类的实现。父类的内部细节对子类可见。 类继承是在编译时刻静态定义的,且可直接使用,类继承可以较方便地改变被复用的实现。对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。 5.只根据抽象类中定义的接口来操纵对象有什么好处? 答:1) 客户无须知道他们使用对象的特定类型,只须对象有客户所期望的接口。 2) 客户无须知道他们使用的对象是用什么类来实现的,他们只须知道定义接口的抽象类。 五、应用题(分值15) 公司架构:经理、工程师、技师和后勤人员都是公司的雇员,经理管理工程师、技师和后勤人员。高层经理领导较低级别的经理。典型层次图如下:可以使用哪种设计模式实现公司的层级关系?并说明为什么? 组合模式,第一,其公司关系架构为树形结构;第二,其表示了部分-整体关系(自己扩展)

相关主题
文本预览
相关文档 最新文档