• 6.6 面向对象设计


    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)

  • 相关阅读:
    List of Examples Converting XNA 3.1 to XNA 4.0
    XNA程序开发常用到的一些代码汇总
    在WCF中使用Flag Enumerations
    能飞过海洋的却只有海鸥【转载】
    Variant类型转换成CString代码
    一种漂亮的自绘菜单
    转 在OpenCV中用cvCalibrateCamera2进行相机标定(附程序)
    COM组件设计与应用之VC6中用ATL写组件
    vc的菜单,工具栏
    (餐饮)写一些开店的经验转
  • 原文地址:https://www.cnblogs.com/mayZhou/p/10548523.html
Copyright © 2020-2023  润新知