UML和模式应用学习笔记(9)

本文详细介绍了GRASP原则,强调了职责驱动设计在对象设计中的重要性。通过讨论UML与设计原则的关系,阐述了如何在设计过程中考虑对象的职责,包括行为和认知职责。GRASP作为OO设计的系统方法,提供了分配职责的模式,如创建者、信息专家、低耦合、控制器和高内聚等,有助于理解并实施更高效的设计策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第十七章:GRASP:基于职责设计对象

17.1UML与设计原则

重点内容由于UML只是一种标准的、可视化建模语言,了解它的细节并不能教会你如何用对象思想来思考,而对象思想正是此文的主题。UML有时候被描述成一种“设计工具”。
OO设计总得来说,是基于职责驱动设计(RDD)所代表的内在含义是考虑怎样给协作中的对象分配职责。

17.3职责和职责驱动设计

思考软件对象设计以及大型构件的流行方式是考虑其职责、角色和协作。这是被称为职责驱动设计的大型方法的一部分。

在RDD中,我们认为软件对象具有职责,即对其所作所为的抽象。UML把职责定义为“类元的契约或义务”。就对象的角色而言,职责与对象的义务和行为相关。职责分为以下两种类型:行为和认知。

对象的行为职责包括:
  • 自身执行的一些行为,如创建对象或计算。
  • 初始化对象中的动作
  • 控制和协调其他对象的活动
对象的认知职责包括:
  • 对私有封装数据的认知。
  • 对相关对象的认知。
  • 对其能够导出或计算的事物的认知。

在对象设计中,职责被分配给对象类。例如,我可以声明“Sale负责创建SalesLineItems”(行为职责),或“Sale负责认知其总额”(认知职责)。

准则:对于软件领域对象来说,由于领域模型描述了领域对象的属性和关联,因此其通常产生与“认知”相关的职责。 职责与方法并非同一事物,职责是一种抽象,而方法实现了职责。

RDD也包括了协作的思想。职责借助于方法来实现,该方法既可以单独动作,也可以与其他方法和对象协作。**
RDD使我们把OO设计看做是有职责对象进行协作的共同体。

17.4GRASP:基于OO设计的系统方法

GRASP:使用职责进行OO设计的学习工具

GRASP原则或模式是一种学习工具,它能帮助你理解基本对象设计,并且以一种系统的、合理的、可以理解的方式来运用设计推理。对这种设计原则进行理解和使用的基础是分配职责的模式。

17.5职责、GRASP和UML图之间的联系

在编写代码或建模时,如何给对象分配职责。在UML中,绘制交互图时考虑这些职责(实现方法)的时机
当我们在绘制UML交互图时,就是在决定职责的分配。

17.6什么是模式

如果以结构化形式对这些问题、解决方案和命名进行描述使其系统化,那么这些原则和习惯用法就可以称为模式

“新模式”是一种矛盾修饰法

术语“模式”真正的含义是长期重复的事物,设计模式的要点并不是要表达新的设计思想。恰恰相反,优秀模式的意图是将已有的经过验证的知识、惯用法和原则汇编起来。

17.8使用GRASP进行对象设计的简短示例

  • 创建者
  • 信息专家
  • 低耦合
  • 控制器
  • 高内聚
(1)创建者模式的定义

名称:创建者
问题:谁创建了A?
解决方案:如果以下条件为真,将创建类A的实例的职责分给类B

B记录了A
B紧密的使用A
B具有A的初始化数据

(2)信息专家模式的定义

名称:信息专家
问题:给对象分配职责的基本原则是什么?
解决方案:把职责分配给具有完成该职责所需信息的类

(3)低耦合模式的定义

名称:低耦合
问题:如何减少因变化产生的影响?
解决方案:分配职责以使耦合保持在较低水平。用该原则对可选方案进行评估。

(4)控制器模式的定义

名称:控制器
问题:在UI层之上首先接受和协调(“控制”)系统操作对象是什么?
解决方案:把职责分配给能代表下列选择之一的对象:

1.代表全部“系统”、“根对象”、运行软件的设备或主要的子系统这些是外观控制器的所有变体)
2.代表发生系统操作的用例场景(用例或会话控制器)

(5)高内聚模式的定义

名称:高内聚
问题:怎样使对象保持有内聚、可理解和可管理,同时具有支持低耦合的附加作用?
解决方案:职责分配应保持高内聚,依次来评估备选方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值