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)
原文:https://www.cnblogs.com/mayZhou/p/10548523.html