软件设计工程——面向对象分析与设计

面向对象技术

面向对象=对象+分类+继承+通过消息的通信

设计流程:
1.对象分析(OOA);
2.对象设计(OOD);
3.面向对象程序设计(OOP);
4.画UML图
5.加入设计模式

 

面向对象分析(OOA)

1.认定对象:实质性对象;
2.组织对象:分析对象间关系,将相关对象抽象成类;
3.对象间的相互作用:描述出各对象在应用系统中的关系;
4.基于对象的操作:考虑对象的界面时,要考虑对象的操作;

 

面向对象设计(OOD)

 

活动

1.识别类及对象;
2.定义属性;
3.定义服务;
4.识别关系;
5.识别包;

 

原则

  • 单一责任原则——一个类值做一种类型责任
  • 开发-封闭原则——实体是可扩展的,但不可修改
  • 里氏替换原则——子类型必须能够替换掉他们的基类型
  • 依赖倒转原则——抽象不依赖于细节,细节依赖于抽象
  • 接口分离原则——客户不依赖于它们不用的方法
  • 重用发布等价原则——重用的粒度就是发布的粒度
  • 共同封闭原则——包中的所有类对于同一类性质的变化应该是共同封闭的
  • 共同重用原则——重用一个包中的类就要重用包中的所有类
  • 无环依赖原则——包的依赖关系图中不能有环
  • 稳定依赖原则——朝着稳定的方向进行依赖
  • 稳定抽象原则——包的抽象程度和稳定程度一致

 

面向对象程序设计(OOP)

  • 类——类的实例化
  • 继承机制——类之间的关系
  • 对象、消息传递和方法——对象之间通过消息传递方式进行通信
  • 对象自身引用——this
  • 重置——重新定义父类中的某方法
  • 类属类——参数多态机制()
  • 无实例的类——抽象类

 

面向对象测试

1.算法层——单元测试
2.类层——模块测试
3.模板层——集成测试
4.系统层——完整的面向对象软件测试

 

UML

1.类图——对象、接口、协作和它们之间的关系
2.对象图——某一时刻一组对象以及它们之间的关系
3.用例图——用例、参与者以及体面之间的关系
4.交互图——对于系统的动态方面进行建模
5.状态图——状态机,由状态、转换、事件和活动组成
6.活动图——特殊的状态图,一个活动到另一个活动的流程
7.构件图——一组构件之间的组织和依赖
8.组合结构图——描述分类器的内部结构
9.部署图——系统的物理方面建模的方法
10.包图——模型本身分解而成的组织单元以及依赖关系

 

设计模式

 

创建型设计模式

  • Abstract Factory(抽象工厂)
    • 系统由多个产品系列中的一个来配置时
    • 一个产品类库,只想显示它们的接口而不是实现时
  • Builder(生成器)
    • 创建复杂对象的算法应独立于该对象的组成部分时
    • 构造过程必须允许被构造的对象不同的表示时
  • Factory Method(工厂方法)
    • 类不知道它所必须创建的对象的类的时候
    • 类希望由它的子类来指定它所创建的对象的时候
  • Prototype(原型)
    • 系统应该独立于它的产品创建、构造和表示时
    • 要实例化的类是在运行时刻指定时
    • 避免创建一个于产品类层次平行的工程类层次时
  • Singleton(单例)
    • 类只能有一个是实例而且客户可以从一个众所周知的访问点访问它时
    • 这个唯一实例应该是通过子类化可拓展的

 

结构型设计模式

  • Adapter(适配器)
    • 想使用一个已经存在的类,而它的接口不符合要求
    • 将一个接口转换成客户想要的另一个接口
  • Bridge(桥接)
    • 不希望在抽象和实现部分之间有固定的绑定关系
    • 类的抽象以及实现都可以通过生成子类的方法扩充
  • Composite(组合)
    • 整体与部分的层次结构
    • 使用户对单个对象和组合对象的使用具有一致性
  • Decorator(装饰)
    • 不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责
    • 当不能采用生成子类的方式进行扩充时
      -Facade(外观)
    • 为一个复杂子系统提供一个简单接口时
    • 将子系统与客户以及其他子系统分离
  • Flyweight(享元)
    • 适合于使用大量对象的应用程序
    • 对象的大多数状态都可变为外部状态
  • Proxy(代理)
    • 适用于在需要比较通用和复杂的对象指针代替简单的指针的时候
    • 远程代理、虚代理、保护代理、智能引用

 

行为设计模式

  • Chain of Responsibility(责任链)
    • 多个对象处理一个请求,哪个对象处理该请求运行时刻自动确定
    • 现在不明确指定接受者的情况下向多个对象中的一个提交一个请求
  • Command(命令)
    • 抽象出带执行的动作以参数化都某对象
    • 在不同的时刻指定、排列和执行请求
    • 支持取消操作、支持修改日志
  • Inerpreter(解释器)
    • 适用于当有一个语言需要解释执行,并且可以将该语言中的句子表示为一个抽象语法树时
    • 文法简单
  • Iterator(迭代器)
    • 访问一个聚合对象的内容而无需暴露它的内部表示
    • 支持对聚合对象的多种遍历
    • 为遍历不同的聚合结构提供一个统一的接口
  • Mediator(中介者)
    • 一组对象以定义良好但是复杂的方式进行通信
    • 一个对象引用其他很多对象并且直接与这些对象通信
    • 想指定一个分部在多个类中的行为而又不想生成太多的子类
  • Memento(备忘录)
    • 必须保存一个对象在某一时刻的状态,便于以后恢复
    • 如果用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性
  • Observer(观察者)
    • 当抽象模型有两个方面,一个方面依赖于另一个方面,将这两者封装在独立的对象中以使用它们可以独自改变和服用
    • 对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有改变时
    • 当一个对象必须通知其他对象,而它又不能假定其他对象是谁
  • State(状态)
    • 一个对象的行为决定于它的状态,并且它必须在运行时刻根据状态改变他的行为
    • 一个操作中含有庞大的多分支条件语句,且这些分支依赖于该对象的状态
  • Strategy(策略)
    • 许多相关的类仅仅是行为有异
    • 需要使用一个算法的不同变体
    • 算法使客户不应该管知道的数据
    • 一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现,将相关的条件分支一如它们各自的Strategy类中
  • Template Method(模板方法)
    • 一次性实现一个算法的不变的部分并将可变的行为留给子类来实现
    • 各子类中公共的行为应该被提取出来并集中到一个公共父类中,避免代码重复
    • 控制子类扩展
  • Visitor(访问者)
    • 一个对象结构包含很多类对象,他们有不同的接口
    • 定义对象结构的类很少改变
    • 需要对一个对象结构中的对象进行很多不同的并且不相干的操作

你可能感兴趣的:(软件工程)