Java教程

软件建模和设计模式

本文主要是介绍软件建模和设计模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

软件建模

1. 软件建模的原则
  • 选择正确的模型,模型要与现实相联系
  • 从不同的视角,使用不同的模型去表示一个系统
    • 外部视角
    • 交互视角
    • 结构化视角
    • 行为视角
  • 模型是抽象的
2. 软件建模方法
  • 结构化方法
  • 面向对象方法
  • 基于构件方法
  • 面向服务方法
  • 面向方面方法
  • 模型驱动方法
  • 形式化方法
3. UML的特点
  • 面向对象
  • 可视化,表示能力强
  • 独立于过程
  • 独立于程序设计语言
  • 易于掌握
4. UML内容组成
  • 事物
    • 结构事物
    • 行为事物
    • 组织事物
    • 辅助事物
  • 关系
    • 关联
    • 依赖
    • 泛化
    • 实现
    • 静态
      • 用例图:角色与用例之间的连接关系(包含、泛化、扩展),并描述系统在干什么
      • 类图:类之间的关系: 泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖
        • 实现:类与接口的关系,表示类是接口所有特征和行为的实现
          • ---- ⊳ \rhd ⊳
        • 依赖:使用关系,有单向依赖和双向依赖,但避免使用双向依赖
          • ---->
        • 泛化:继承关系,指定了子类继承父类的所有特征和行为
          • —— ⊳ \rhd ⊳
        • 关联:拥有关系,使一个类知道另一个类的属性和方法
          • ——>
        • 聚合:整体与个体的关系,可以理解成把个体聚集在一起
          • ⋄ \diamond ⋄——>
        • 组合:整体与局部的关系,整体由局部组成
          • ∙ \bullet ∙——>
      • 对象图
      • 组件图
      • 部署图
    • 动态
      • 顺序图:参与者与对象之间有序的交互过程,强调消息是如何在对象之间发送和接收的。强调多个不同对象之间交互的先后顺序
        • 顺序图将交互关系表示为一个二维图
        • 纵向是时间轴,时间沿竖线向下延伸
        • 横向轴代表了在协作中各独立对象的类元角色
        • 类元角色用生命线表示
        • 消息用从一个对象的生命线到另一个对象生命线的箭头表示
      • 合作图
      • 状态图:对象所有可能的状态,以及事件发生时状态的转移条件。强调复杂流程处理中活动单元的分支处理
        • 状态:描述了一个类对象生命周期中的一个时间段
        • 事件:发生在时间和而空间上的值得注意的事情
        • 转换:处于此状态的对象对外界发生的事件所做出的反应
      • 活动图:描述用例所要进行的活动,以及活动间的约束关系,有利于识别并行活动。强调特定对象在不同事件发生后的状态变化
        • 活动
        • 活动流
        • 控制符
        • 泳道
5. UML4+1 视图
  • 逻辑视图(类图、对象图)
  • 实现视图(组件图)
  • 部署视图(部署图)
  • 行为视图(顺序图、合作图、状态图、活动图)
  • 用例视图(用例图)
6. UML模型在软件开发流程中的应用
  • 需求分析(用例图)
  • 概要设计(类图、对象图、合作图、状态图、顺序图、活动图)
  • 详细设计(类图、对象图、合作图、状态图、顺序图、活动图)
  • 编码设计
  • 测试(类图、组件图、部署图)

设计原则和设计模式

1. 正交四原则
  • 最小化重复
  • 分离变化
  • 缩小依赖范围
  • 向稳定方向依赖
2. SOLID原则
  • 单一职责
  • 开闭原则:向扩展开放/向修改封闭
  • 里氏替换原则:子类要能替换父类
  • 接口分离原则:接口隔离/最小化接口依赖
  • 依赖倒置原则:依赖倒置/只依赖接口
3. 设计模式
创建型
  • 工厂方法:隔离创建对象的细节,使得创建对象的行为可扩展
    • 优点:创建从使用中解耦
    • 缺点:每次增加一个新的分类,都要增加一个创建的具体工厂
  • 抽象工厂:抽象出一组相关对象的接口,每个方法即为工厂方法
    • 优点:创建一组产品对象,只需要实现相应的具体工厂就好了
    • 缺点:产品族扩展非常困难,增加一个系列,既要在抽象工厂类添加代码,又要在具体工厂里添加代码
  • 建造者
  • 原型
  • 单例
结构型
  • 适配器:强调将现有接口转变成需要的接口
    • 优点:提升现有类的复用性、提升扩展性、可避免对现有代码的修改
    • 缺点:过度使用会引入较多零散的类,导致系统变得凌乱
  • 桥接
  • 组合
  • 装饰
  • 外观:封装扇出,利用树状结构减少调用者的复杂度。强调统一对外接口
    • 优点:降低系统间及系统与外部的耦合度,提升安全性。简化了系统接口,更易于使用
    • 缺点:对统一接口的使用可能会引入较多约束,减低灵活性。不易修改,违背开闭原则
  • 享元
  • 代理
行为型
  • 解释器
  • 模板方法
  • 责任链:一组对象按照既定的顺序关联起来,依次处理请求,其中任一对象都有权停止调用传递
    • 优点:
      • 降低了对象之间的耦合度
      • 增强了系统的可扩展性
      • 增强了给对象指派职责的灵活性
      • 简化了对象之间的连接
      • 责任分担,符合类的单一职责原则
  • 命令
  • 迭代器
  • 中介者
  • 备忘录
  • 观察者:订阅/发布模型,用于事件驱动的设计。实现了依赖倒置
    • 优点:降低了目标与观察者之间的耦合关系。目标和观察者之间建立了一套出发机制
  • 状态
  • 策略
  • 访问者
这篇关于软件建模和设计模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!