面向对象分析与设计

2016/01/01 阅读笔记

面向对象分析与设计

复杂性

软件的复杂性是一个基本特征,而不是偶然如此。

  1. 问题域的复杂性 – 系统的基本功能难于理解 外部复杂性:沟通困难 需求变更
  2. 管理开发过程的复杂性 – 软件开发团队的基本任务是制造简单的假象
  3. 软件中随处可见的灵活性
  4. 描述离散系统行为的问题

复杂系统的共同属性

  1. 层次结构 part of   is a 架构
  2. 相对本原
  3. 分离关注
  4. 共同模式
  5. 稳定的中间形式

分解的作用

控制复杂性的技巧我们从远古时代就知道了,即分而治之。(人脑的局限性)

  1. 算法分解,强调了事件的顺序
  2. 面向对象分解,强调了一些代理,要么发出动作,要么操作执行的对象

每一种工程方法的实践,都设计科学和艺术两方面的元素。

一个新结构的设计概念既包括想象力的跳跃,也包括经验和知识的融合,就像艺术家在他的画布或纸上创作作品一样。

对象模型

对象模型,或称开发对象模型,包括抽象,封装,模块化,层次结构,类型,并发和持久等。

(OOP)面向对象编程是一种实现的方法,在这种方法中,程序被组织成许多组相互协作的对象,每个对象代表某个类的一个实例,而类则属于一个通过继承关系形成的层次结构。

(OOD)面向对象设计是一种设计方法,包括面向对象分解的过程和一种表示法,这种表示法用于暂时被设计系统的逻辑模型和物理模型、静态模型和动态模型。

(OOA)面向对象分析是一种分析方法,这种方法利用从问题域的词汇表中找到的类和对象来分析需求。

对象模型要素:

  1. 抽象
  2. 封装
  3. 模块化
  4. 层次结构
  5. 类型
  6. 并发
  7. 持久

抽象描述了一个对象的基本特征,可以将这个对象与所有其他类型的对象区分开来,因此提供了清晰定义的概念边界,它与观察者的视角有关。

封装是一个过程,它分隔构成抽象的结构和行为的元素。封装的作用是分离抽象的概念接口及其实现。

模块化时一个系统的属性,这个系统被分解为一组高内经、低耦合的模块。

模块化在程序内部创造了一些定义良好的、有文档描述的边界。这些边界,或者接口,对于理解程序是非常有价值的。模块化将程序划分为一些模块,这些模块可以独立地编译,但又与其他模块有联系。模块之间的联系是模块相互之间做出的假定。分解为模块的总体目标是通过允许模块独立地设计和修改,从而减少软件的成本,每个模块的结构都应该足够坚定,这样它就能被完全理解。
层次结构是抽象的一种分级或排序。

单继承 多继承 聚合 组合
类型是关于一个对象的类的强制规定,这样一来,不同类型的对象不能够互换使用,或者至少他们的互换使用受到非常严格的限制。

静态类型 动态类型 强类型 弱类型
并发是一种属性,它区分了主动对象和非主动对象。

持久是对象的一种属性,利用这种属性,对象跨越时间和空间而存在。

类与对象

一个对象反映了某一部分的真实存在,因此它是在时间和空间中存在的某种东西。

一个对象是一个具有状态、行为和标识符的实体。结构和行为类似的对象定义在他们共同的类中。实例和对象这两个术语可以互换使用。

  1. 对象的状态包括这个对象的所有属性以及每个属性当前的值。
  2. 行为是对象在状态改变和消息传递方面的动作和反应的方式。

一个对象的状态代表了它的行为的累积效果。

分类

单个抽象的形成常常遵循某个常见的模式,首先问题以一种随意的方式得到解决。随着经验的积累,发现更好的解决方式,最后有用的解决方案得到更系统的理解,人们对它们进行编码和分析。这使得人们能够形成支持自动化实现的模型,以及让这个解决方案更通用的理论。这反过来导致了更复杂层次的实践,让我们能够处理更复杂的问题,循环又开始。

  1. 经典分类,所有具有某一个或某一组共同属性的实体构成了一个分类。
  2. 概念聚集
  3. 原型理论,游戏

面向对象分析

  1. 经典方法
  2. 行为分析
  3. 领域分析
  4. 用例分析
  5. CRC卡
  6. 非正式英语描述
  7. 结构化分析

表示法

  1. 包图
  2. 组件图
  3. 部署图
  4. 用例图
  5. 活动图
  6. 类图
  7. 序列图
  8. 交互概述图
  9. 状态机图
  10. 时间图
  11. 对象图
  12. 通信图

Search

    Table of Contents