首页 > 其他 > 详细

6.6 面向对象设计

时间:2019-03-17 20:43:25      阅读:156      评论:0      收藏:0      [点我收藏+]

6、面向对象设计 … Object-oriented Design
  ? 面向对象设计在系统开发中的位置

  ? Contrast the importance of object design skill versus UML notation knowledge
6.1 面向对象设计的关注点

  ? 面向对象设计

    ? 主要工作在 领域相关 domain

    ? 也称为应用 逻辑、业务 逻辑

  ? 面向对象设计 不直接关注

    ? 用户界面

    ? 数据储存
  ? 面向对象设计

    ? 领域层与 UI 层、数据层通过特定的接口,进行通信

    ? 例如,Model-View 划分原则

      ? View与领域层有不同的关注点

        ? 例如

          ? GUI 不应该计算税费(这是 domain层应该做的),但是可以对数据进行验证

          ? Domain 对象不应当去探知外部事件的发生,但应当被通知到

    ? 例如,观察者模式 Observer pattern

      ? GUI 对象通过专门的接口,到 Domain对象中注册

      ? Domain 对象并不知道是谁来注册的,仅仅知道通信接口
6.2 领域对象与设计对象的一致性

  ? 领域对象对应真实世界的对象 Domain objects should correspond with real-world objects

  ? 设计活动从领域模型开始
    领域模型中的 Payment 是 一个概念,在设计模型中是 一个软件类。它们不是同一 件事,但前者启发了后者的 命名/定义
    这样就降低了表示差异 这是面向对象技术的一个重 要思路
6.3 从SSD到设计

  ? GUI产生、或者检测到系统消息,发送到领域层的某个对象(术语:控制器,Controller)
    SSD上的每个系统操作,都将有系统进行处理。它们表示UI层对应用 层或者领域层的调用
6.4 设计思想的来源

  ? 模式 Pattern (及其变种…)

    ? 软件设计最新的概念 Important concept in software design today

      ? 同学们要经常去关注,比如 www.csdn.net , 一些开源网站等

    ? 研习针对大规模/小规模问题的“最佳实践”解决方案

    ? 教材、论文记录的一些方法

    ? 在不同上下文中重用——不要从头开始设计解决方案

    ? 设计, 还需要一点点灵感!
6.5 大规模系统设计遇到的问题

  ? 如何定义领域层对象与子系统之间的协作 How to structure collaborations between domain objects and subsystems

    ? e.g 永久存储子系统 the Persistence subsystem

  ? 如何定义UI对象到领域层对象之间的协作? How to structure collaborations between the UI objects and the domain layer objects

  ? 如何设计与实现“向上”的协作?How to design and implement “upward” collaborations

    ? e.g 领域层对象到 UI 对象
6.6 Responsibility-Driven Design (RDD)

  ? 设计的总体思路

    ? 标识职责 responsibilities,并把它们分配给不同的类

  ? 职责

    ? 行为职责 Doing

      ? create an object, perform calculations

      ? initiate operations on other objects

      ? control and coordinate activities

      ? …

    ? 认知职责 knowing

      ? about private encapsulated data

      ? about related objects

      ? about things it can derive or calculate

      ? …
  ? 职责描述是一种抽象,粒度大小不一

    ? 软件对象只有方法 methods,没有职责

    ? 从职责到对象方法的转换

      ? 比如,“负责永久存储”,粒度太大

      ? 比如“负责计算税费” ,粒度要好一些
  ? 职责描述是一种很好的隐喻

    ? 职责驱动的设计 RDD,对象设计时可以问这样的问题

      ? 这个对象有哪些职责?

      ? 这个对象与哪个对象协作?
6.7 对象设计的基本原则 GRASP 原则

  ? 该如何分配职责呢?What are the guiding principles to help assign responsibilities

  ? 有没有什么原则可以给予指导?

  ? 它们是

    ? 通用的职责分配软件原则(模式)GRASP General Responsibility Assignment Software Principles(patterns)

      ? 这是一组非常基本和通用的对象设计原则
  ? The 9 GRASP Principles

    ? Creator 创建者

    ? Information Expert 信息专家

    ? Controller 控制器

    ? Low Coupling 低耦合

    ? High Cohesion 高内聚

    ? Polymorphism 多态

    ? Pure Fabrication 纯虚构

    ? Indirection 间接

    ? Protected Variations 隔离变化

    记住每条原则的名字、含义、如何使用,它们是本课程最重要、 最有用的内容
小结

  ? 大型软件系统的设计

    ? 软件架构

    ? 分层、子系统

  ? 面向对象设计主要关注领域层对象、与 UI 层、数据存储层之间有 接口

  ? 领域层需要完成的功能,以职责来描述

  ? 面向对象设计的主要任务: 把职责分配类和对象

  ? 如何分配呢?

  ? GRASP是很好的指导原则

  ? 让我们期待课程的下一阶段

    ? 面向对象设计 (OOD, Object-Oriented Design)

6.6 面向对象设计

原文:https://www.cnblogs.com/mayZhou/p/10548523.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!