chapter02_GRASP模式

合集下载

GRASP更多具有职责的对象ppt课件

GRASP更多具有职责的对象ppt课件
就某种程度而言,从以下面可以发现开发者或架构师的成熟度
◦ 不断地增长更多实现PV机制的知识 ◦ 选择值得解决的适宜的PV问题 ◦ 选择恰当的PV解决方案的能力
精选版课件ppt
22
源于防止变异的机制1
数据驱动设计
◦ 涵盖了一大族技术,包括读取来自外部的代码、值、类文件路径、类名 等。用以在运行时以某种方式改变或“参数化”系统。
精选版课件ppt
12
NextGen问题:在数据库中保存Sale对象 假设需要保存一个Sale的实例到一个关系数据库,这个职责该分配给谁?
根据信息专家模式,保存Sale的实例的职责可以分配给Sale本身。 但是,会导致高内聚,低耦合和难以复用。
这个纯虚构解决了以下设计问题:
• Sale 保持了具有高内聚和低耦合的良好设计
精选版课件ppt
7
RegularSquare的情形
图25-5 RegularSquare的情形
精选版课件ppt
8
IncomeTaxSquare的情形
图25-6 IncomeTaxSquare的情形
精选版课件ppt
9
GoToJailSquare情形
图25-7 GoToJailSquare的情形
精选版课件ppt
问题:如何设计对象、 子系统和系统,使内部的变化或不稳定 性不会对其他元素产生不良影响?
解决方案:识别预计变化或不稳定之处,分配职责用以在这些 变化之外创建稳定接口。
注:通过增加一层间接性,即接口。内部对象只与稳定的接口协作。这实现
了隐藏外部系统的变化。
精选版课件ppt
20
示例:ITaxCalculatorAdapter接口实现了防止外部税金计算器的变异

通用职责分配模式(GRASP)之创建者模式

通用职责分配模式(GRASP)之创建者模式

通用职责分配模式(GRASP)之创建者模式Creator创建者模式当分析清楚客户需求并设计出用例模型以后,当分析清楚客户业务环境制作出领域模型以后,当综合用例模型、领域模型设计出类和它们的方法以后,当就在一切都准备就绪只欠东风的关键时刻,一个对象发出了撕心裂肺的怒吼——谁来创建我一个对象,不管拥有多么强大的功能,不管进行了多么精巧的设计,如果不能被创建,就如同韩信不能做将军,孙膑不能当军师,勾践不能回越国,刘备不能得荆州,一切一切的雄才武略都如废纸一张。

既然“创建”对于对象如此重要,我们就来好好探讨一下GRASP 中关于对象创建的问题。

创建者(Creator)当我们完成了用例模型、领域模型、对象分析的设计,初步完成了对象设计和职责分配的工作后,开始进一步细化的时候,一个我们不得不考虑的问题就摆在我们的面前——谁来创建这些对象?也许现在的你会觉得好笑,这也是问题吗?在软件实际开发过程中,谁需要使用某个对象,就去创建它就行了,有什么好讨论的。

但是,我不得不说的是,如果你只是漫不经心地想要随意开发一套软件系统,仅仅是完成自己工作而已,你完全不用考虑创建对象的问题。

然而如果你希望开发一套高质量的、低耦合的、封装性和复用性高的软件系统,你必须得认真考虑这个问题。

为什么呢?因为系统中如果一个对象A创建另一个对象B,那么对象A就必将与对象B耦合。

我们可以想像,如果在你的系统中,对于对象B,你也去创建,我也去创建,大家都去创建,对象B势必与许多对象发生耦合,耦合度将大大提高;但如果对象B可以都由对象A 来创建,然后由对象A向其它需要对象B的对象提供对象B,即其它对象需要使用对象B的时候都向对象A索要,那么整个系统对对象B 的耦合将会大大降低,同时对象A和B也可以形成一个封装的、可复用的独立系统,则这个软件系统的设计质量势必提高。

所以,对象创建的问题不可不察。

那么为了降低系统耦合,提高系统的清晰度、封装性和可复用性,应该有一些通用的原则,以用于对象职责分配中,关于“创建对象”这类职责的分配。

对象设计和职责分配的设计模式(GRASP)

对象设计和职责分配的设计模式(GRASP)

设计模式Gof设计模式GRASP (职责分配原则)Expert (信息专家)信息专家模式是面向对象设计的最基本原则,是我们平时使用最多,应该跟我们的思想融为一体的原则。

也就是说,我们设计对象(类)的时候,如果某个类拥有完成某个职责所需要的所有信息,那么这个职责就应该分配给这个类来实现。

这时,这个类就是相对于这个职责的信息专家。

例如:常见的网上商店里的购物车(ShopCar),需要让每种商品(SKU)只在购物车内出现一次,购买相同商品,只需要更新商品的数量即可。

如下图:针对这个问题需要权衡的是,比较商品是否相同的方法需要放到那里类里来实现呢分析业务得知需要根据商品的编号(SKUID)来唯一区分商品,而商品编号是唯一存在于商品类里的,所以根据信息专家模式,应该把比较商品是否相同的方法放在商品类里。

(创造者)实际应用中,符合下列任一条件的时候,都应该由类A来创建类B,这时A是B的创建者:a.A是B的聚合b.A是B的容器c.A持有初始化B的信息(数据)d.A记录B的实例e.A频繁使用B如果一个类创建了另一个类,那么这两个类之间就有了耦合,也可以说产生了依赖关系。

依赖或耦合本身是没有错误的,但是它们带来的问题就是在以后的维护中会产生连锁反应,而必要的耦合是逃不掉的,我们能做的就是正确地创建耦合关系,不要随便建立类之间的依赖关系,那么该如何去做呢就是要遵守创建者模式规定的基本原则,凡是不符合以上条件的情况,都不能随便用A创建B。

例如:因为订单(Order)是商品(SKU)的容器,所以应该由订单来创建商品。

如下图:这里因为订单是商品的容器,也只有订单持有初始化商品的信息,所以这个耦合关系是正确的且没办法避免的,所以由订单来创建商品。

coupling (低耦合)低耦合模式的意思就是要我们尽可能地减少类之间的连接。

其作用非常重要:a.低耦合降低了因一个类的变化而影响其他类的范围。

b.低耦合使类更容易理解,因为类会变得简单,更内聚。

语言学_Chapter 2_Phonetics

语言学_Chapter 2_Phonetics
– The speech sounds: production, transmission, perception – Sound patterns
PHONETICS PHONOLOGY
2.1 The phonic medium
语音学 语音的 发生、传递、感知 不涉及到意义 基本单位:音素 phone (或者可以区别意义、或者不可区别意义)
classify and describe them?
• 2. How many consonants are there in English? How • • 3. What is the major difference of English vowels
and consonants? to classify and describe them?
Manner of Articulation
• ... concerns the size of the air
passage:
– the articulators may close off the oral tract for an instant or a relatively long period; – they may narrow the space considerably; or – they may simply modify the shape of the tract by approaching each other.
Of course not! All languages have both voiceless and voiced sounds contrasting in their phonological systems. Try to pronounce English vowels, they are ______. Pronounce [b, g] and [p, k]. Can you find any difference?

通用职责分配模式(GRASP)之低耦合

通用职责分配模式(GRASP)之低耦合

通用职责分配模式(GRASP)之低耦合(Low Coupling)在GRASP中的创建者模式、信息专家模式的最终目的都是降低耦合。

低耦合这个词大家已经耳熟能详,在spring、MVC、设计模式的书籍中都提到低耦合、高内聚,已经成为软件设计质量的标准之一。

什么是低耦合?耦合就是对某元素与其它元素之间的连接、感知和依赖的量度。

这里所说的元素,即可以是功能、对象(类),也可以指系统、子系统、模块。

假如一个元素A 去连接元素B,或者通过自己的方法可以感知B,或者当B不存在的时候就不能正常工作,那么就说元素A与元素B耦合。

耦合带来的问题是,当元素B发生变更或不存在时,都将影响元素A的正常工作,影响系统的可维护性和易变更性。

同时元素A只能工作于元素B存在的环境中,这也降低了元素A的可复用性。

正因为耦合的种种弊端,我们在软件设计的时候努力追求“低耦合”。

低耦合就是要求在我们的软件系统中,某元素不要过度依赖于其它元素。

请注意这里的“过度”二字。

系统中低耦合不能过度,比如说我们设计一个类可以不与JDK耦合,这可能吗?除非你不是设计的Java程序。

再比如我设计了一个类,它不与我的系统中的任何类发生耦合。

如果有这样一个类,那么它必然是低内聚(关于内聚的问题我随后讨论)。

耦合与内聚常常是一个矛盾的两个方面。

最佳的方案就是寻找一个合适的中间点。

哪些是耦合呢?1.元素B是元素A的属性,或者元素A引用了元素B的实例(这包括元素A调用的某个方法,其参数中包含元素B)。

2.元素A调用了元素B的方法。

3.元素A直接或间接成为元素B的子类。

4.元素A是接口B的实现。

幸运的是,目前已经有大量的框架帮助我们降低我们系统的耦合度。

比如,使用struts 我们可以应用MVC模型,使页面展现与业务逻辑分离,做到了页面展现与业务逻辑的低耦合。

当我们的页面展现需要变更时,我们只需要修改我们的页面,而不影响我们的业务逻辑;同样,我们的业务逻辑需要变更的时候,我们只需要修改我们的java程序,与我们的页面无关。

GRASP-中文版

GRASP-中文版

GRASP(中文版)——General Responsibility Assignment Software patterns(通用职责分配软件模式)它的核心思想是“职责分配(Responsibility Assignment)”。

GRASP提出了几个基本原则,用来解决面向对象设计的一些问题。

Craig Larman氏在《Applying UML and Patterns》一书中提出了GRASP设计模式的概念。

作者称其为设计模式,其实,更好的理解应该为设计原则。

因为,与GoF等设计模式不同的是,GoF等设计模式是针对特定问题而提出的解决方法,而GRASP则是站在面向对象设计的角度,告诉我们怎么样设计问题空间中的类与它们的行为责任,以及明确类之间的相互关系等等。

GRASP可以说是GoF等设计模式的基础。

GRASP概要它包含了9个基本模式:1,信息专家(Information expert)2,创建者(Creator)3,高内聚(High Cohesion)4,低耦合(Low coupling)5,控制器(Controller)6,多态性(Polymorphism)7,纯虚构(Pure Fabrication)8,间接性(Indirection)9,变化预防(Protected Variations)GRASP的主要特征:●对象职责分配的基本原则。

●主要应用在分析和建模上。

GRASP的核心思想的理解:自己干自己的事(职责的分配)自己干自己的能干的事(职责的分配)自己只干自己的事(职责的内聚)面向对象设计所谓面向对象设计,就是在系统设计的过程中,通过把系统分成相对独立但又互相联系的对象组合的一种设计方法。

对象具有属性和行为,对象间通过消息进行交互(协作)。

面向对象设计一般有以下几个关键步骤:1,发现对象。

找出系统应该由哪些对象构成。

2,对象的属性。

对象具有哪些属性。

3,对象的行为。

对象具有哪些行为;或者说对象需要做什么,它的职责是什么。

软件工程李爱萍 作业参考答案-最终版修改

第一章什么是软件?软件和程序的区别是什么?答:⑴软件是程序、数据以及开发、使用和维护程序需要的所有文档的完整集合。

软件的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必须的数据。

⑵软件不是程序,程序是软件的一部分。

程序是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列。

它是由软件开发人员设计和编码的。

程序执行时一般要输入一定的数据,也会输出运行的结果。

没有相关文档,仅有程序是不能称之为软件产品的。

什么是软件生存周期?划分生存周期的主要原则是什么?答:(1)软件的生存周期是指某一软件项目被提出并着手实现开始,直到该软件报废或停止使用为止所经历的时间。

(2)主要原则:各阶段的任务彼此间尽可能相对独立,同一个阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不同阶段之间的联系,有利于软件开发过程的组织管理。

1.3什么是软件危机?它有哪些主要表现?为什么会产生软件危机?答:(1)软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

(2)主要表现:对软件开发成本和研制进度的估计常常很不精确,导致经费预算经常突破,进度超时完成;由于开发人员常常对用户需求只有模糊的了解以及开发人员和用户又未能及时交换意见,导致已完成的软件不能满足用户的需要;软件产品质量差,可靠性得不到保证;软件产品可维护性差;软件成本在计算机系统总成本中所占的比例逐年上升,软件的发展跟不上硬件的发展;软件开发生产率提高的速度远远跟不上计算机应用速度普及深入趋势,软件发展跟不上用户的要求。

(3)产生软件危机的原因:造成软件危机的原因与软件自身的特点有关,也与软件开发人员在开发和维护时采用的生产方式、方法、技术有关。

软件是计算机系统中的逻辑部件,软件产品往往规模庞大,结构复杂。

给软件的开发和维护带来客观的困难;软件开发的管理困难。

由于软件规模大、结构复杂、又具有无形性,导致管理困难,进度控制困难,可靠性无法保证;软件开发费用不断增加,维护费用急剧上升,直接威胁计算机应用的扩大;软件开发技术落后;生产方式落后;开发工具落后,生产效率提高缓慢。

第三讲 GRASP模式


例子:


为了说明问题,我们使用“学生成绩管理系统” 来说明。 用例1: - 管理员创建题库(把题条加入题库) 再细化一下: - 管理员创建题库(把题条加入题库):如果题库中已经存在所给的题条,则退 出,否则加入题条。 这样就存在3个对象:管理员用户User,题条SubjectItem,题库SubjectLibrary 2个职责:判断(新加入的题条是否与题库某题条相等),加入(题条的加入) 这2个职责究竟应该由哪个对象执行? 我们使用Information Expert模式来分析。 1. 判断2个题条是否相等,只要判断题条的ID属性(或其它属性)是否相等就可 以了。题条的ID是属于题条的,所以对它的操作应该放在题条SubjectItem里。 2. 题条的加入需要操作的数据有2部分,一部分是新加入的题条本身,另一部分 是题库(加入到题库),题条是题库的一部分,所以题条的加入应该放在题库 SubjectLibrary里完成。
例子:


以上述“用户注册”的用例为例,对于问题领域里的类“用户 (User)”,如果把“数据库操作的职责”分配给“用户 (User)”,那么User类的内聚性大大降低。 应用Pure Fabrication模式,应该人工定义一个数据库管理的概 念类UserDbMgr,把数据库操作的功能分配给它完成。
创建者(Creator)

将创建一个类A的实例的职责指派给类B的实例,如果下列条件满足 的话:

a) B聚合了A对象 b) B包含了A对象 c) B纪录了A对象的实例 d) B要经常使用A对象 e) 当A的实例被创建时,B具有要传递给A的初始化数据(也就是说B是创 建A的实例这项任务的信息专家) f) B是A对象的创建者
例子:

医疗器械专业英语(第2版)PPT课件 Chapter 2-Section 7-PPT


Section 7 Biomaterials
Text 2 Dental materials Understanding the content (4) What is the medical use of dental amalgam?
Answer: Dental amalgam is a dental filling material which is used to fill cavities
Answer: Non-resorbable gauze dressings are made of woven or no-woven cotton-
mesh cellulose or cellulose derivatives.
非吸收性纱布敷料是由织造或无纺棉网纤维素或纤维素衍生物制成。
Section 7 Biomaterials
Section 7 Biomaterials
Text 3 Metallic biomaterials in orthopaedic surgery Understanding the content (4) What is stainless steel?
Answer: Like any steel, it is an iron-carbon alloy. Alloying elements were added and
Text 2 Dental materials Understanding the content (2) What are dental impressions?
Answer: Dental impressions are negative imprints of teeth and oral soft tissues

系统分析与设计课后习题答案

第一章1.什么是系统?信息系统一般具有那些特性?答:系统是一组为实现某些结果相互联系相互作用的部件的集合。

1.可分解性2.边界性2.从应用范围来看,信息系统可以分为哪些类型?答:1.事物处理系统2.管理信息系统3.智能支持决策系统4.办公自动化系统3.信息系统中典型的关联人员有哪些?他们的角色是什么?答:系统所有者(通常是中层或者高层经理,对于小型系统来说,可能是中层经理或者主管)、用户、分析设计人员(都代表信息系统的技术专家角色)、外部服务者(业务顾问和系统顾问等)以及项目经理(团队的领导者)4.请解释系统内部用户和外部用户的区别是什么?答:内部系统用户主要是指系统实际操作人员,这些人员往往专注于信息系统的处理速度和处理事务的正确性。

外部系统用户主要是指系统的直接或者间接使用人员,所有这些外部系统用户最关注的是使用系统的服务操作是否简单易学,方便操作。

5.什么是模型驱动分析?为什么要使用此方法?举例说明。

答:模型驱动分析法强调绘制图形化系统模型来记录和验证现有的或建议的系统。

系统模型最终将成为设计和构造一个改进系统的蓝图。

结构化分析、信息工程和面向对象分析都是基于模型驱动的分析方法。

6.什么是系统开发生存周期?在项目启动阶段涉及的主要活动有哪些?答:开发一个完整的系统项目总会经历“目标、计划、分析、设计、实现、维护”这样的过程或步骤,这就是系统开发的生存周期(系统项目启动、业务需求分析、详细系统设计、系统实现与维护)。

启动阶段的主要涉及5个活动:定义问题域、制定项目的进度表、确认项目的可行性、安排项目人员、启动项目。

7.为什么引入系统原型开发方法?它的优缺点是什么?答:采用最经济的方法,尽快设计出一个可以实际运行的系统原型。

优点:提高了用户参与的主动性;系统开放周期短;能更好的适应需求的变化并减少误解,能有效的提高最终系统的质量,特别是用户接受性,为保证将系统提供给用户使用奠定了基础。

缺点:1.系统分析和功能设计贯穿于整个开发过程中,使得系统的总体结构变得不明确;2.原型选取的不确定性可能降低系统开放速度;3.对原型进行分析设计时,依然沿袭结构化方法,自顶向下模块化的设计思想,数据和功能相互分离的缺陷在原型法中依然存在,不利于软件构件的重用;4.开发过程中不断引入用户需求的变化,造成了系统开发的不确定性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(1)信息专家(Information expert)
问题:当我们为系统发现完对象和职责之后,职责的分配 原则(职责将分配给哪个对象执行)是什么? 解决方案: 职责的执行需要某些信息(information),把职责分配给 该信息的拥有者。换句话说,某项职责的执行需要某些资 源,只有拥有这些资源的对象才有资格执行职责。 这有点类似现实世界的“有能者为之”的概念。你有建筑 知识,可以去执行盖楼的职责;你有法律知识,可以去裁 判案件等等。 将职责分配给具有履行职责所需要的信息的类 通俗点就是:该干嘛干嘛去,别管别人的闲事或者我的职 责就是搞这个,别的事不管。
这2个职责究竟应该由哪个对象执行? 我们使用Information Expert模式来分析。 1、判断2个题条是否相等,只要判断题条的ID属 性(或其它属性)是否相等就可以了。题条的ID 是属于题条的,所以对它的操作应该放在题条 SubjectItem里。 2、题条的加入需要操作的数据有2部分,一部分 是新加入的题条本身,另一部分是题库(加入到 题库),题条是题库的一部分,所以题条的加入 应该放在题库SubjectLibrary里完成。 如果把以上2个职责放在第三方类中,无疑增加了 它们与第三方类之间的耦合关系。
类设计原则
一、The Single Responsibility Principle (SRP) - OO设计的单一职责原则 There should never be more than one reason for a class to change. 永远不要让一个类存在多个改变的理由。 二、The Open-Closed Principle (OCP) - 面向对象软件设计的开闭原则 Software entities (classes, modules, function, etc.) should be open for ext ension, but closed for modification. 软件实体(模块,类,方法等)应该对扩展开放,对修改关闭。 三、The Liskov Substitution Principle (LSP) - OO设计的里氏替换原则 Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it. 所有引用基类的地方必须能透明地使用其子类的对象。
GRASP模式概述
GRASP(General Responsibility Assignment Software Patterns),中文名称为“通用职责分配软 件模式”,它的核心思想是“职责分配( Responsibility Assignment)” ,它们描述了对 象设计和职责分配的基本原则。也就是说,如何把 现实世界的业务功能抽象成对象,如何决定一个系 统有多少对象,每个对象都包括什么职责,对象之 间最好通过什么样的方式协作,GRASP模式(原则 )给出了最基本的指导原则。
对象行为
行为是对象应该执行的动作,也就是对象的职责。对象具有 哪些职责呢?相对于上面所说的“名词筛选法”,可以简单 地用“动词筛选法”来发现“对象的行为”。 比如,上面的“学生考试成绩管理系统”一例中,有“创建 题库”,“输入(条件)”,“生成试题”,“成绩入库” ,“成绩管理”等动词,也就是说,系统的对象至少具有以 上这些行为(或职责)。 有时,我们可能还会发现某些“行为”的粒度过大,这时, 可以通过进一步细化用例的描述,来发现更多更细的“行为 ”。这里不再详述。 问题1:找出对象的行为(职责)之后,怎么样分配这些行 为呢?也就是说怎么确认“行为”属于哪个对象呢?
Craig Larman氏在《Applying UML and Patterns》 一书中提出了GRASP设计模式的概念。作者称其为 设计模式,其实,更好的理解应该为设计原则。因 为,与GoF等设计模式不同的是,GoF等设计模式 是针对特定问题而提出的解决方法,而GRASP则是 站在面向对象设计的角度,告诉我们怎么样设计问 题空间中的类与它们的行为责任,以及明确类之间 的相互关系等等。 GRASP可以说是GoF等设计模式的基础。
包设计原则
一、包的内部关系方面(聚合性)的原则 The Release Reuse Equivalency Principle (REP) - OO设计的重用发 布等价原则 The granule of reuse is the granule of release. 重用粒度等价于发布粒度。 The Common Reuse Principle (CRP) - OO设计的全部重用原则 The classes in a package are reused together. If you reuse one of th e classes in a package, you reuse them all. 包的所有类被一起重用。如果你重用了其中的一个类,就重用全部。 The Common Closure Principle (CCP) - OO设计的共同封闭原则 The classes in a package should be closed together against the sam e kinds of changes. a change that affects a package affects all the cl asses in that package. 一个包中所有的类应该对同一种类型的变化关闭。一个变化影响一个 包,便影响了包中所有的类。
四、The Dependency Inversion Principle (DIP) - OO设计的 依赖倒置原则 A. High level modules should not depend upon low level m odules. Both should depend upon abstractions. B. Abstractions should not depend upon details. Details sh ould depend upon abstractions. A. 高层模块不应该依赖于低层模块,二者都应该依赖于抽象 B. 抽象不应该依赖于细节,细节应该依赖于抽象 五、The Interface Segregation Principle (ISP) - OO设计的 接口分隔原则 Clients should not be forced to depend upon interfaces that they do not use. 不能强迫用户去依赖那些他们不使用的接口。
优点:
满足了面向对象设计的封装性的设计,一般情况 下都会满足Information Expert模式。因为 Information Expert是对类的属性(信息),以及 对类的属性的操作的封装,它符合对象封装性的 概念。 优点: - 信息的拥有者类同时就是信息的操作者类,可以 减少不必要的类之间的关联。 - 各类的职责单一明确,容易理解
Information Expert例
为了说明问题,我们使用“学生成绩管理系统” 中的用例1来说明。 用例1: 管理员创建题库(把题条加入题库) 再细化一下: 管理员创建题库(把题条加入题库):如果题库中已 经存在所给的题条,则退出,否则加入题条。 这样就存在3个对象:管理员用户User,题条 SubjectItem,题库SubjectLibrary 2个职责:判断(新加入的题条是否与题库某题条 相等),加入(题条的加入)
二、包之间的关系方面(耦合性)的原则 The Acyclic Dependencies Principle (ADP) - OO设计的无环 依赖原则 The dependency structure between packages must be a dir ected acyclic graph (DAG). That is, there must be no cycles in the dependency structure. 包之间的依赖结构必须是一个直接的无环图形(DAG)。也 就是说,在依赖结构中不允许出现环(循环依赖)。 The Stable Dependencies Principle (SDP) - OO设计的稳定 依赖原则 The dependencies between packages in a design should b e in the direction of the stability of the packages. A package should only depend upon packages that are more stable th at it is.
第二讲 GRASP设计原则
我们在进行面向对象分析与设计(OOA&D) 时应该怎样进行,遵循什么原则呢? 我们或许听说过设计模式(GOF),那是 针对特定的问题提出的特定的解决方法。 面向对象的设计从提出到现在经过很多人 的经验和实践,也总结出了很多原则。
在设计开发中,如果能有意识地向这些原则靠拢 ,对我们的系统设计与开发会有很大的帮助,也 是构筑具有稳定性,扩展性的系统的一个保障: - 是否遵守了那些基本原则 - 如果违反了基本原则,是否存在合适的理由 这些被大师们总结出来的基本原则包括了: 1、类的设计原则 2、包的设计原则 2.1 包的内部关系方面(聚合性)的原则 2.2 包之间的关系方面(耦合性)的原则
面向对象设计
所谓面向对象设计,就是在系统设计的过程中,通 过把系统分成相对独立但又互相联系过 消息进行交互(协作)。 面向对象设计一般有以下几个关键步骤: 1、发现对象--找出系统应该由哪些对象构成。 2、对象的属性--对象具有哪些属性。 3、对象的行为--对象具有哪些行为,或者说对象需要 做什么,它的职责是什么。 4、对象的关系--对象与对象之间的关系是什么,怎样 进行交互,协作等等。
相关文档
最新文档