搜档网
当前位置:搜档网 › 面向对象的设计原则之四大黄金法则

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

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

一些

面向对象的设计

法则

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中,一切皆为对象的引用!

组合的优点和缺点

?优点:

?容器类仅能通过被包含对象的接口来对其进行访问。

?“黑盒”复用,因为被包含对象的内部细节对外是不可见。

?对装性好。

?实现上的相互依赖性比较小。(译者注:被包含对象与容器对象之间的依赖关系比较少)

?每一个类只专注于一项任务。

?通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义(对象的)组合。

?缺点:

?从而导致系统中的对象过多。

?为了能将多个不同的对象作为组合块(composition block)来使用,必须仔细地对接口进行定义。

继承

?(类)继承是一种通过扩展一个已有对象的实现,从而获得新功能的复用方法。

?泛化类(超类)可以显式地捕获那些公共的属性和方法。

?特殊类(子类)则通过附加属性和方法来进行实现的扩展。

继承的优点和缺点

?优点:

?容易进行新的实现,因为其大多数可继承而来。

?易于修改或扩展那些被复用的实现。

?缺点:

?破坏了封装性,因为这会将父类的实现细节暴露给子类。

?“白盒”复用,因为父类的内部细节对于子类而言通常是可见的。

?当父类的实现更改时,子类也不得不会随之更改。

?从父类继承来的实现将不能在运行期间进行改变。

Coad规则

仅当下列的所有标准被满足时,方可使用继承:

?子类表达了“是一个…的特殊类型”,而非“是一个由…所扮演的角色”。

?子类的一个实例永远不需要转化(transmute)为其它类的一个对象。

?子类是对其父类的职责(responsibility)进行扩展,而非重写或废除(nullify)。

?子类没有对那些仅作为一个工具类(utility class)的功能进行扩展。

?对于一个位于实际的问题域(Problem Domain)的类而言,其子类特指一种角色(role),

交易(transaction)或设备(device)。

继承/组合示例1

?“是一个…的特殊类型”,而非“是一个由…所扮演的角色”

?失败。乘客是人所扮演的一种角色。代理人亦然。

?永远不需要转化

?失败。随着时间的发展,一个Person的子类实例可能会从Passenger转变成Agent,再到Agent Passenger。

?扩展,而非重写和废除

?通过。

?不要扩展一个工具类

?通过。

?在问题域内,特指一种角色,交易或设备

?失败。Person不是一种角色,交易或设备。

继承并非适用于此处!

使用组合进行挽救!

继承/组合示例2

?“是一个…的特殊类型”,而非“是一个由…所扮演的角色”

?通过。乘客和代理人都是特殊类型的人所扮演的角色。?永远不需要转化

?通过。一个Passenger对象将保持不变;Agent对象亦然。

?扩展,而非重写和废除

?通过。

?不要扩展一个工具类

?通过。

?在问题域内,特指一种角色,交易或设备

?通过。PersonRole是一种类型的角色。

继承适用于此处!

继承/组合示例3

?“是一个…的特殊类型”,而非“是一个由…所扮演的角色”

?通过。预订和购买都是一种特殊类型的交易。

?永远不需要转化

?通过。一个Reservation对象将保持不变;Purchase对象亦然。

?扩展,而非重写和废除

?通过。

?不要扩展一个工具类

?通过。

?在问题域内,特指一种角色,交易或设备

?通过。是一种交易。

继承适用于此处!

继承/组合示例4

?“是一个…的特殊类型”,而非“是一个由…所扮演的角色”

?失败。预订不是一种特殊类型的observable。

?永远不需要转化

?通过。一个Reservation对象将保持不变。

?扩展,而非重写和废除

?通过。

?不要扩展一个工具类

?失败。Observable就是一个工具类。

?在问题域内,特指一种角色,交易或设备

?不适用。Observable是一个工具类,并非一个问题域的类。。

继承并非适用于此处!

继承/组合总结

?组合与继承都是重要的重用方法

?在OO开发的早期,继承被过度地使用

?随着时间的发展,我们发现优先使用组合可以获得重用性与简单性更佳的设计

?当然可以通过继承,以扩充(enlarge)可用的组合类集(the set of composable classes)。

?因此组合与继承可以一起工作

?但是我们的基本法则是:

优先使用对象组合,而非(类)继承

[ Favor Composition Over Inheritance ]

法则2:针对接口编程,而非(接口的)实现

[ Program To An Interface, Not An Implementation ]

接口

?接口是一个对象在对其它的对象进行调用时所知道的方法集合。

?一个对象可以有多个接口(实际上,接口是对象所有方法的一个子集)

?类型是对象的一个特定的接口。

?不同的对象可以具有相同的类型,而且一个对象可以具有多个不同的类型。

?一个对象仅能通过其接口才会被其它对象所了解。

?某种意义上,接口是以一种非常局限的方式,将“是一种…”表达为“一种支持该接口

的…”。

?接口是实现插件化(pluggability)的关键

实现继承和接口继承

?实现继承(类继承):一个对象的实现是根据另一个对象的实现来定义的。

?接口继承(子类型化):描述了一个对象可在什么时候被用来替代另一个对象。

?C++的继承机制既指类继承,又指接口继承。

?C++通过继承纯虚类来实现接口继承。

?Java对接口继承具有单独的语言构造方式-Java接口。

?Java接口构造方式更加易于表达和实现那些专注于对象接口的设计。

接口的好处

?优点:

?Client不必知道其使用对象的具体所属类。

?一个对象可以很容易地被(实现了相同接口的)的另一个对象所替换。

?对象间的连接不必硬绑定(hardwire)到一个具体类的对象上,因此增加了灵活性。

?松散藕合(loosens coupling)。

?增加了重用的可能性。

?提高了(对象)组合的机率,因为被包含对象可以是任何实现了一个指定接口的类。

?缺点:

?设计的复杂性略有增加

(译者注:接口表示“…像…”(LikeA)的关系,继承表示“…是…”(IsA)的关系,组合表示“…有…”(HasA)的关系。)

接口实例

?该方法是指其它的一些类可以进行交通工具的驾驶,而不必关心其实际上是(汽车,轮

船,潜艇或是其它任何实现了IManeuverabre的对象)。

法则3:开放-封闭法则(OCP)

软件组成实体应该是可扩展的,但是不可修改的。

[ Software Entities Should Be Open For Extension, Yet Closed For Modification ]

开放-封闭法则

?开放-封闭法则认为我们应该试图去设计出永远也不需要改变的模块。

?我们可以添加新代码来扩展系统的行为。我们不能对已有的代码进行修改。

?符合OCP的模块需满足两个标准:

?可扩展,即“对扩展是开放的”(Open For Extension)-模块的行为可以被扩展,以需要满足新的需求。

?不可更改,即“对更改是封闭的”(Closed for Modification)-模块的源代码是不允许进行改动的。

?我们能如何去做呢?

?抽象(Abstraction)

?多态(Polymorphism)

?继承(Inheritance)

?接口(Interface)

?一个软件系统的所有模块不可能都满足OCP,但是我们应该努力最小化这些不满足

OCP的模块数量。

?开放-封闭法则是OO设计的真正核心。

?符合该法则便意味着最高等级的复用性(reusability)和可维护性(maintainability)。OCP示例

?考虑下面某类的方法:

?以上函数的工作是在制订的部件数组中计算各个部件价格的总和。

?若Part是一个基类或接口且使用了多态,则该类可很容易地来适应新类型的部件,而

不必对其进行修改。

?其将符合OCP

?但是在计算总价格时,若财务部颁布主板和内存应使用额外费用,则将如何去做。

?下列的代码是如何来做的呢?

?这符合OCP吗?

?当每次财务部提出新的计价策略,我们都不得不要修改totalPrice()方法!这并非“对更

改是封闭的”。显然,策略的变更便意味着我们不得不要在一些地方修改代码的,因此我们该如何去做呢?

?为了使用我们第一个版本的totalPrice(),我们可以将计价策略合并到Part的

getPrice()方法中。

?这里是Part和ConcretePart类的示例:

?但是现在每当计价策略发生改变,我们就必须修改Part的每个子类!

?一个更好的思路是采用一个PricePolicy类,通过对其进行继承以提供不同的计价策略:

?看起来我们所做的就是将问题推迟到另一个类中。但是使用该解决方案,我们可通过改

变Part对象,在运行期间动态地来设定计价的策略。

?另一个解决方案是使每个ConcretePart从数据库或属性文件中获取其当前的价格。

单选法则

单选法则(the Single Choice Principle)是OCP的一个推论。

单选法则:

无论在什么时候,一个软件系统必须支持一组备选项,理想情况下,在系统中只能有一个类能够知道整个的备选项集合。

法则4:Liskov替换法则(LSP)

使用指向基类(超类)的引用的函数,必须能够在不知道具体派生类(子类)对象类型的情况下使用它们。

[ Function Thar Use Referennces To Base(Super) Classes Must Be Able To Use Objects Of Derived(Sub) Classes Without Knowing It ] Liskov替换法则

?显而易见,Liskov替换法则(LSP)是根据我所熟知的“多态”而得出的。

?例如:

?方法drawShape应该可与Sharp超类的任何子类一起工作(或者,若Sharp为Java接口,

则该方法可与任何实现了Sharp接口的类一起工作)

?但是当我们在实现子类时必须要谨慎对待,以确保我们不会无意中违背了LSP。

?若一个函数未能满足LSP,那么可能是因为它显式地引用了超类的一些或所有子类。这

样的函数也违背了OCP,因为当我们创建一个新的子类时,会不得不进行代码的修改。LSP示例

?考虑下面Rectangle类:

?现在,Square类会如何呢?显然,一个正方形是一个四边形,因此Square类应该从

Rectangle类派生而来,对否?让我们看一看!

?观察可得:

?正方形不需要将高和宽都作为属性,但是总之它将继承自Rectangle。因此,每一个Square对象会浪费一点内存,但这并不是一个主要问题。

?继承而来的setWidth()和setHeight()方法对于Square而言并非真正地适合,因为一个正方形的高和宽是相同。因此我们将需要重写setWidth()和setHeight()方法。不

得不重写这些简单的方法有可能是一种不恰当的继承使用方式。

?Square类如下:

看起来都还不错。但是让我们检验一下!

?测试程序输出:

?看上去好像我们违背了LSP!

?这里的问题出在哪里呢?编写testLsp()方法的程序员做了一个合理的假设,即改变

Rectangle的宽而保持它的高不变。

?在将一个Square对象传递给这样一个方法时产生了问题,显然是违背了LSP

?Square和Rectangle类是相互一致和合法的。尽管程序员对基类作了合理的假设,但其

所编写的方法仍然会导致设计模型的失败。

?不能孤立地去看待解决方案,必须根据设计用户所做的合理假设来看待它们。

?一个数学意义上的正方形可能是一个四边形,但是一个Square对象不是一个Rectangle

对象,因为一个Square对象的行为与一个Rectangle对象的行为是不一致的!

?从行为上来说,一个Square不是一个Rectangle!一个Square对象与一个Rectangle对

象之间不具有多态的特征。

总结

?Liskov替换法则(LSP)清楚地表明了ISA关系全部都是与行为有关的。

?为了保持LSP(并与开放-封闭法则一起),所有子类必须符合使用基类的client所期

望的行为。

?一个子类型不得具有比基类型(base type)更多的限制,可能这对于基类型来说是合法

的,但是可能会因为违背子类型的其中一个额外限制,从而违背了LSP!

?LSP保证一个子类总是能够被用在其基类可以出现的地方!

结构化分析设计与面向对象分析设计比较研究

结构化分析设计与面向对象分析设计比较研究 重庆工商大学计算机科学与技术08软件龚霞 指导老师康世瀛 中文摘要:解析了结构化方法和面向对象方法这两种软件开发方法具有的分析设计过程,讨论了各自在不同软件开发中的应用及局限性,提出了在选用面向对象开发大型软件系统的同时可结合结构化方法。 关键词:软件开发;结构化方法;面向对象方法 Abstract:This paper anatomizes the analysis and design process of Structural method and objected-oriented method,discusses their applications and disadvantages and proposes that structural method can also be used while developing the large-scale software systems in selecting the objected-oriented method. Key words:software-development;objected-oriented method;structural method 一、引言 结构化方法由E.Yourdon和L.L.Constantine在1978年提出,结构化方法又可称为面向功能的软件开发方法或面向数据流的软件开发方法。结构化方法是建立在软件生存周期的模型基础上的一种软件开发方法,相对于早期的个体化开发方法无疑是前进了一大步。 由于传统的生命周期开发学存在下面的问题:生产率提高的幅度远不能满足需求,软件的重用度很低,软件难以维护,软件往往不能满足用户的需求。所以出现了面向对象软件开发方法。这是一种自底向上和自顶向下相结合的方法,而且它以对象建模为基础,从而不仅考虑了输入、输出数据结构,实际上也包含了所有对象的数据结构,所以面向对象的软件开发方法彻底实现了PAM没有完全实现的目标。不仅如此,面向对象技术在需求分析、可维护性和可靠性这三个软件开发的关键环节和质量指标上有了

面向对象设计原则

面向对象设计原则 ?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

问卷设计六大原则

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

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

六大设计原则

设计模式六大设计原则 单一职责原则(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 一、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模式对代码重构;

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

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

面向对象分析与设计简答题

1、什么面向对象? 面向对象不仅是以些具体的软件开发技术与策略,而且以一套关于如何看待软件系统与现实世界的关系,以什么观点来研究问题并进行求解,以及如何进行系统构造的软件方法学。 2、软件开发方法学的基本方法有哪些? 1)软件工程和瀑布方法学2)新方法学:螺旋式、迭代式、递增式、合并式3)面向对象方法学:UML、RUP、XP 3、为什么需要OOA、OOD。 OOA就是运用面向对象的方法进行需求分析,OOA加强了对问题域和系统责任的理解,有利于人员之间的交流,对需求变化的适应性较强,很好的支持软件复用。 OOD就是运用面向对象的方法进行系统设计,OOD.符合人们习惯的思维方法,便于分解大型的复杂多变的问题;易于软件的维护和功能的增减;可重用性好;与可视化技术相结合,改善了工作界面。 4、从概念层次、规格层次、实现层次三个角度如何理解对象的概念? 从概念层次来看,一个对象就是一系列的责任; 从规格层次来看,一个对象是一系列可以被其他对象或该对象自己调用的方法;从实现层次来看,一个对象是一些代码和数据。 5、如何绘制类图和对象图?简述其步骤。 类图绘制:1发现类,找到备选类,确定候选类2关联分析,确定关联关系,多重性分析3职责分析4限定与修改,导航性分析,约束,限定符; 对象图绘制:1发现类和对象2对其细化,分析,确定关系。 6、简述重定义方法与重载的区别。 重定义:1参数列表必须完全与被重写的方法相同2返回类型必须一直域被重写的方法的类型相同3访问修饰符的限制一定要大于被重写方法的访问修饰符4重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查性异常:重载:1必须有不同参数列表2可以有不同的返回类型,只要参数列表不同即可3可有不同访问修饰符4可抛出不同的异常。 7.简述抽象方法与虚方法的联系与区别 虚方法有一个实现部分可以为子类实现有共同的方法,并为派生提供了覆盖该方法的选,抽象方法只是强制派生覆盖方法;抽象方法只能在抽象类中声明,而虚方法不是;抽象方法不能声明方法实体,虚方法可以;包含抽象方法的类不能实例化,但虚方法可以。 8、简述使用继承的规则。 1)、不要过度使用;2)、子类应是超类的一个类型;3)、子类应是超类的扩展; 4)、尽量少从具体类继承,最好继承接或抽象类。

面向对象分析设计原则

一、单一职责原则(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、将可变的部分和不可变的部分分离 "将可变的部分和不可变的部分分离"是面向对象设计的第三个原则。如果使用继承的复用技术,我们

商业空间设计的6大原则

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

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

第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 ?……

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

一些 面向对象的设计 法则 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中,一切皆为对象的引用! 组合的优点和缺点 ?优点: ?容器类仅能通过被包含对象的接口来对其进行访问。 ?“黑盒”复用,因为被包含对象的内部细节对外是不可见。 ?对装性好。 ?实现上的相互依赖性比较小。(译者注:被包含对象与容器对象之间的依赖关系比较少) ?每一个类只专注于一项任务。 ?通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义(对象的)组合。

面向对象设计原则概述

面向对象设计原则概述 对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平。 面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则。面向对象设计原则也是我们用于评价一个设计模式的使用效果的重要指标之一,在设计模式的学习中,大家经常会看到诸如“XXX模式符合XXX原则”、“XXX模式违反了XXX原则”这样的语句。 最常见的7种面向对象设计原则如下表所示: 表1 7种常用的面向对象设计原则

面向对象设计原则之单一职责原则 单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。单一职责原则定义如下: 单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中,如果多个职责总是同时发生改变则可将它们封装在同一类中。 单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验。 下面通过一个简单实例来进一步分析单一职责原则: 在图1中,CustomerDataChart类承担了太多的职责,既包含与数据库相关的方法,又包含与图表生成和显示相关的方法。如果在其他类中也需要连接数据库或者使用findCustomers()方法查询客户信息,则难以实现代码的重用。无论是修改数据库连接方式还是修改图表显示方式都需要修改该类,它不止一个引起它变化的原因,违背了单一

面向对象分析与设计试题B卷

面向对象分析与设计试题B卷 一、单项选择题( 在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。每小题2 分,共20 分) 1.到20世纪末,面向对象软件工程已经逐渐发展成熟,特别是( D )的 形成和广泛使用,采用面向对象分析与编程的软件开发方法已成为软件开发的主流方法。A. Simula67语言 B. Smalltalk语言 C. Java语言 D. 统一建模语言(UML)的标准 2. 面向对象的运动产生了多种面向对象的语言, 其中(C )是一种混合性面向对象语言, 既支持面向过程的程序设计方法,又支持面向对象的程序设计方法,有广泛应用的基础和丰富开发环境的支持,因而使面向对象的程序设计能得到很快普及。 A. Smalltalk B. Eiffel C. C++ D. Java 3.下列不属于面向对象技术的基本特征的是(B )。 A. 封装性 B. 模块性 C. 多态性 D. 继承性 4. 面向对象程序设计将描述事物的数据与(C ) 封装在一起,作为一个相互依存、不可分割的整体来处理。 A. 信息 B. 数据隐藏 C. 对数据的操作 D. 数据抽象 5. 关于面向对象方法的优点,下列不正确的叙述是(C )。 A. 与人类习惯的思维方法比较一致 B. 可重用性好 C. 以数据操作为中心 D.可维护性好 6. (D )是从用户使用系统的角度描述系统功能的图形表达方法。 A. 类图 B. 对象图 C. 序列图 D. 用例图 7. ( C ) 是表达系统类及其相互联系的图示,它是面向对象设计的核心,建立状态图、协作图 和其他图的基础。 A.对象图 B. 组件图 C. 类图 D. 配置图 8.(D )描述了一组交互对象间的动态协作关系,它表示完成某项行为的对象和这些对象 之间传递消息的时间顺序。 A.对象图 B. 协作图 C. 状态图 D. 序列图 9.(D )就是用于表示构成分布式系统的节点集和节点之间的联系的图示,它可以表示系 统中软件和硬件的物理架构。 A. 组件图 B. 协作图 C. 状态图 D. 配置图 10. 使用UML进行关系数据库的(B )时,需要设计出表达持久数据的实体类及其联系,并把它们映射成为关系数据库表(Table)、视图(View)等。 A. 业务Use Case模型设计 B. 逻辑数据模型设计 C. 物理数据模型设计 C. 物理实现设计 二、填空题( 每空1 分,共20 分) 1. 面向对象开发方法一改过去传统的以_____功能分析___为基础的_____面向对象_的结 构化分析与设计方法,它模拟人们理解和处理客观世界的方式来分析问题,把系统视为

广告海报设计的6大原则

广告海报设计的6大原则 导语:无规矩不成方圆,凡事都应该遵守原则,我们都知道广告对于我们很严重,广告海报设计的好可以为企业带来优良的效益,如今的社会是遵循优胜劣汰的生存法则,所以我们要增加自己的竞争力,更好的发展自己,因此宣传就很严重,然而广告海报设计在宣传上能起到很好的作用,下面就由为大家介绍一下广告海报设计的6大原则,希望对大家有所帮助! 一、冲击性原则。 在令人眼花缭乱的各种广告中,要想迅速吸引人们的视线,在广告公司创意海报就必须把提升视觉张力放在首位。 照片是广告中常用的视觉内容,将摄影艺术与电脑后期制作充分结合,拓展了广告公司创意海报的视野与表现手法,产生了剧烈的视觉冲击力,给观众留下了深刻的印象。 二、包蕴性原则。 吸引人们眼球的是形式,打动人心的是内容。独到醒目的形式必须蕴含耐人思索的深厚内容,才拥有吸引人一看再看的魅力。这就要求广告公司创意广告海报设计时不能停留在表层,而要使“本质”通过“表象”显现出来,这样才能有用地挖掘读者内心深处的渴望。 三、新奇性原则。新奇是广告作品引人注目的奥秘所在,也是一条不可忽视的广告创意规律。有了新奇,才能使广告公司创意海报波澜起伏,奇峰突起,引人入胜;有了新奇,才能使广告公司创意海报主题得到深化、升华。 四、应合理规划。 每一份广告海报设计的版面规划是否科学与规范也影响广告海报设计的广告效果的一个非常严重的条件。科学的对版面进行规划能够给大家造成一种比较好的视觉效果。 五、需构思要精巧。 产品的构思往往决定着一个产品能否得到大家的喜欢。 1/ 2

对于一份构思比较精巧的广告海报设计来说,无疑是会吸引大家关注的目光的,也是能够得到人们认可的一个非常严重的条件。 六、内容要全面充分。 因为广告海报设计最严重的一个要素就是广告宣传,所以,在设计广告海报设计的时候,应尽可能的把有关广告宣传的信息较好的融入到广告海报设计的中。 2/ 2

uml面向对象的分析与设计考题与答案

u m l面向对象的分析与设计考题与答案 集团文件版本号:(M928-T898-M248-WU2669-I2896-

《面向对象的分析与设计》练习题 一、选择题 1.UML 语言不支持的建模方式有(D )。 A. 静态建模 B.动态建模 C. 模块化建模 D. 功能建模 2.一个设计得好的OO系统具有( B )。 A. 低内聚、低耦合的特征 B.高内聚、低耦合的特征 C. 高内聚、高耦合的特征 D.低内聚、高耦合的特征 3.下列不属于面向对象技术的基本特征的是( B)。 A. 封装性 B. 模块性 C. 多态性 D. 继承性 4. 面向对象程序设计将描述事物的数据与 ( C ) 封装在一起,作为一个相互依存、不可分割的整体来处理。 A. 信息 B. 数据隐藏 C. 对数据的操作 D. 数据抽象 5. 关于面向对象方法的优点,下列不正确的叙述是(C )。 A. 与人类习惯的思维方法比较一致 B. 可重用性好 C. 以数据操作为中心 D.可维护性好 6.用例之间的关系不包括以下哪种关系?D A.泛化 B.包含 C. 扩展 D. 聚集和组合 7.顺序图中不包括以下哪种元素?(A) A.用例 B. 对象 C. 生命线 D. 消息

8. 用例图中不包括以下哪种元素?(B) A. 用例 B. 类 C. 参与者 D. 关联 9. 继承机制的作用是 ( C )。 A. 信息隐藏 B. 数据封装 C. 派生新类 D. 数据抽象 10. 面向对象方法学中,对象之间仅能通过(C )相联系。 A. 类 B.抽象 C. 消息 D. 封装 11. 脚本与用例之间的关系类似与(A)之间的关系。 A. 对象与类 B. 参与者与用例 C. 顺序图和抽象类 D. 消息和对象 12. 下列元素中,(D )不属于消息的组成。 A. 提供服务的对象 B. 服务 C. 输入信息 D. 事件 13. ( D )描述了一组交互对象间的动态协作关系,它表示完成某项行为的对象和这些对象之间传递消息的时间顺序。 A.对象图 B. 协作图 C. 状态图 D. 顺序图 14. ( D)是从用户使用系统的角度描述系统功能的图形表达方法。 A. 类图 B. 对象图 C. 序列图 D. 用例图 15. ( C ) 是表达系统的类及其相互联系的图示,它是面向对象设计的核心,建立状态图、协作图和其他图的基础。

Java面向对象16种设计原则

一类的设计原则 1依赖倒置原则-Dependency Inversion Principle (DIP) 2里氏替换原则-Liskov Substitution Principle (LSP) 3接口分隔原则-Interface Segregation Principle (ISP) 4单一职责原则-Single Responsibility Principle (SRP) 5开闭原则-The Open-Closed Principle (OCP) 二包的设计原则 6重用发布等价原则-Release ReuseEquivalency Principle (REP) 7无环依赖原则-The AcyclicDependencies Principle (ADP) 8稳定依赖原则-The StableDependencies Principle (SDP) 9稳定抽象等价原则-The StableAbstractions Principle (SAP) 10共同封闭原则-The CommonClosure Principle (CCP) 11全部重用原则-The Common Reuse Principle (CRP) 三扩展原则 12 迪米特法则-Least Knowledge Principle (LKP) 13 黑盒原则-BBP(Black Box Principle) 14 缺省抽象原则-DAP(Default Abstraction Principle) 15 接口设计原则-IDP(Interface Design Principle) 16 不要构造具体的超类原则-DCSP(Don't Concrete SupperclassPrinciple) 1. Dependency Inversion Principle (DIP) - 依赖倒置原则 依赖:在程序设计中,如果一个模块a使用或调用了另一个模块b,我们称模块a依赖模块b。高层模块与低层模块:往往在一个应用程序中,我们有一些低层次的类,这些类实现了一些基本的或初级的操作,我们称之为低层模块;另外有一些高层次的类,这些类封装了某些复杂的逻辑,并且依赖于低层次的类,这些类我们称之为高层模块。 依赖倒置原则的2个重要方针: A. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象 B. 抽象不应该依赖于细节,细节应该依赖于抽象 为什么叫做依赖倒置(Dependency Inversion)呢? 面向对象程序设计相对于面向过程(结构化)程序设计而言,依赖关系被倒置了。因为传统的结构化程序设计中,高层模块总是依赖于低层模块。

设计模式的六大原则实例

一、设计模式的六大原则 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类。开闭原则是面向对象的可复用设计的第一块基石。 开闭原则的关键是抽象化。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。 面向对象的设计关注的是对象的行为,它是使用“行为”来对对象进行分类的,只有行为一致的对象才能抽象出一个类来。我经常说类的继承关系就是一种“Is-A”关系,实际上指的是行为上的“Is-A”关系,可以把它描述为 “Act-As”。 3、依赖倒转原则(Dependence Inversion Principle) 这个是开闭原则的基础,具体内容:真对接口编程,依赖于抽象而不依赖于具体。 4、接口隔离原则(Interface Segregation Principle) 这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。

相关主题