zoukankan      html  css  js  c++  java
  • UML和模式应用学习笔记(9)——GRASP:基于职责设计对象

      UML与设计原则

      由于UML只是一种标准的、可视化建模语言,了解它的细节并不能教会你如何用对象思想来思考,而对象思想正是此文的主题。UML有时候被描述成一种“设计工具”。最关键的软件开发工具是受过良好设计原则训练的思维,而不是UML或任何其他技术。

      OO设计总得来说,是基于职责驱动设计(RDD)所代表的内在含义是考虑怎样给协作中的对象分配职责。

      职责和职责驱动设计

      思考软件对象设计以及大型构件的流行方式是考虑其职责、角色和协作。这是被称为职责驱动设计的大型方法的一部分。在RDD中,我们认为软件对象具有职责,即对其所作所为的抽象。UML把职责定义为“类元的契约或义务”。就对象的角色而言,职责与对象的义务和行为相关。职责分为以下两种类型:行为和认知。

      对象的行为职责包括:

    • 自身执行的一些行为,如创建对象或计算。
    • 初始化其他对象中的动作。
    • 控制和协调其他对象中的活动。

      对象的认知职责包括:

    • 对私有封装数据的认知。
    • 对相关对象的认知。
    • 对其能够导出或计算的事物的认知。

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

    准则:对于软件领域对象来说,由于领域模型描述了领域对象的属性和关联,因此其通常产生与“认知”相关的职责。

      职责与方法并非同一事物,职责是一种抽象,而方法实现了职责。

      RDD也包括了协作的思想。职责借助于方法来实现,该方法既可以单独动作,也可以与其他方法和对象协作。RDD是一种隐喻。RDD是思考OO软件设计的一般性隐喻。把软件对象想象成具有某种职责的人,他要与其他人协作完成工作。RDD使我们把OO设计看做是有职责对象进行协作的共同体。

    关键点:GRASP对一些基本的职责分配原则进行了命名和描述,因此掌握这些原则有助于支持RDD。

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

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

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

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

      在编写代码或建模时,如何给对象分配职责。在UML中,绘制交互图时考虑这些职责(实现方法)的时机。从以下图可以看出,Sale对象具有创建Payment的职责,具体实现是,使用makePayment消息向Sale发出请求,Sale在相应的makePayment方法中进行处理。此外,完成这个职责需要通过写作来创建Payment对象,并调用其构造器。

      因此,当我们在绘制UML交互图时,就是在决定职责的分配。

    下一篇文章就关于使用GRASP的对象设计给出一个示例

    技术追求卓越 梦想创造未来 ——Daywei

  • 相关阅读:
    hadoop面试
    常用脚本
    1.kafka
    2.flink
    java面试
    Hbase 项目
    linux 2>&1 和 &的意思
    Jetbrains系列产品重置试用方法
    解决GitHub网页githubusercontent地址无法访问问题
    stylus 成熟的写法
  • 原文地址:https://www.cnblogs.com/Daywei/p/2189546.html
Copyright © 2011-2022 走看看