软件工程笔记5-面向对象设计

less than 1 minute read

Published:

我觉得孩子都是不规则的图形,进入社会后,无数不规则的图形相互践踏,慢慢磨成了一个个圆。圆和圆的按触,只有一个点,这个点就是你最想展示的东西。大人们管这个点叫作优点,而你以为这就是成熟。


面向对象设计

面向对象设计过程和准则

面向对象设计过程

  1. 建立系统环境模型:展现软件与外部实体交互的方式
  2. 建立系统体系结构
  3. 对各个子系统进行设计
  4. 对象设计及优化

面向对象设计的准则模块化,抽象,信息隐藏,弱耦合,强内聚,可复用

体系结构模块及依赖性

在面向对象软件中,常见软件模块有:类、接口、包、构件

类的依赖性

在面向对象的程序设计中,类和接口是程序的基本组成单元 在不同阶段或者从不同角度,类可以分为:设计类,实现类,系统类,应用类

继承依赖性:继承会带来类和方法的依赖性。

  • 多态继承:编译时继承依赖性运行时继承依赖性
  • 无多态继承:子类不覆盖从父类继承来的方法
  • 扩展继承和约束继承:

交互依赖性(方法依赖性),出现在如下情况:类A的方法fA调用了类B的方法fB,则fA依赖于fB

接口的依赖性

实现的依赖性:类和该类实现的接口之间的依赖性

使用的依赖性:类和它所需的接口之间的依赖性

包的依赖性

包是高度相关的类的聚合,这些类本身是内聚的,但相对于其他聚合来说又是松散耦合的

包依赖性:本质上,两个包之间的依赖性来自于两个包中类的依赖性,主要消除包之间的循环依赖

构件

构件:软件开发过程中可以重复使用的软件元素(是一个抽象的概念)

构建图表示构件之间的依赖关系,构件可以支持一些接口,并使用另一些接口

软件构件应该具有以下特性:

  1. 单独部署单元
  2. 作为第三方的组装单元
  3. 构件不能又任何可见的状态(构件不能与自己的拷贝又所区别)

构件与类是双重的:

  1. 构件是部署在某个计算机节点上的物理抽象
  2. 构件只显示它所包含的类的接口,很多其他接口都封装在构件中,它们智能被写作在类的内部使用,对于其他构件是不可见的

系统分解

  • 子系统和类:首先根据需求的功能模型(用例模型),将系统分解为若干部分,每个部分又可以分为若干子系统或类,没饿过子系统还可以由更小的子系统或类构成
  • 服务与子系统接口
    • 服务:一组有公共目的的相关操作,子系统通过给其他子系统提供服务发挥自己的能力(子系统不需要其他子系统为他提供服务)
    • 子系统接口:供其他子系统调用的某个子系统操作集合,包括子系统的接口包括操作名、操作参数类型及返回值
    • 子系统被分层以建立系统的层次结构

      封闭体系结构:系统每层只能访问其相邻的下一层

      开放体系结构:层可以访问低于它的层次

问题域部分设计

数据库层,业务逻辑层,用户界面层 是典型的面向对象系统的组成

问题域部分(业务逻辑层)是 面向对象设计开始的地方

问题域部分设计的流程:

  1. 调整需求:用户需求或外部环境的变化;分析员对问题理解不透彻。
  2. 复用已有的类:从类库中选择已有类,在服用的类和问题域之间添加泛化关系,标出因服用类而多余的属性和服务;修改与问题相关的关联
  3. 把问题域类组合在一起
  4. 增添泛化关系以建立类之间的协议
  5. 调整继承的支持级别
  6. 改进性能
  7. 存储对象

人机交互部分的设计

界面设计的目标:简单性,一致性,确定性,健壮性,导航性,视觉吸引,兼容性

任务管理部分的设计

任务管理主要包括任务的选择和调整

常见的任务有:时间驱动型任务、时钟驱动型任务、优先任务、关键任务和协调任务

  1. 识别时间驱动任务:任务处于休眠状态并等待中断;一旦接到中断则唤醒该任务,接受数据;通知需要知道这件事的对象,执行任务后再回到睡眠模式
  2. 识别时钟型任务:以固定时间间隔激发事件
  3. 识别优先任务:根据处理的优先级安排各个任务
  4. 识别关键任务
  5. 识别协调任务
  6. 审查每个任务
  7. 定义每个任务:它是什么任务,如何协调任务,如何通信

数据管理部分的设计

继承关系的映射

策略1:将基类映射到一张子表,子类映射到另一张表,基类对应的表中定义主键,而在子类的定义的表中定义外键

策略2:将每个子类映射到一个表,没有基类表

对象设计

对象设计过程包括:使用模式设计对象,接口规格说明,对象模型重构,对象模型优化。

  1. 使用模式设计对象:选择合适的设计模式,复用已有的解决方案,以提高系统的灵活性
  2. 接口规格说明:子系统供功能需要在类中详细说明,包括操作,参数,类型规格说明和异常情况等
  3. 对象模型重构,改进对象设计模型,提高模型等可读性和拓展性
  4. 对象模型优化,改进对象设计模型,以实现模型中的性能要求