Skip to content

Latest commit

 

History

History
364 lines (191 loc) · 12.2 KB

软件工程.md

File metadata and controls

364 lines (191 loc) · 12.2 KB

UML

概念

统一建模语言 UML Unified Modeling Language 一种分析设计语言

特点:

  1. 工程化:使得软件工程可以与其他领域一样,根据需求创建模型,再通过模型指导实施,指导开发的各个阶段。模型可以验证需求,让用户及早发现问题,减少开发风险,降低开发维护成本。
  2. 规范化:一套标准符号,高效沟通交流。
  3. 可视化:图形符号,促进理解交流,直观发现问题,避免和减少设计缺陷产生。
  4. 系统化:视图和图从不同角度对同一个软件系统化建模,各有所长,相互补充,一起构造出系统完整蓝图。
  5. 文档化。同时可以产生系统设计文档,清楚系统目标。需要修改时,可以找到 UML 文档,降低维护成本,提高修改效率,开发人员通过 UML 图形文档资料尽快熟悉项目并投入开发工作。
  6. 智能化。大部分 UML 建模工具(Rose, Together, PowerDesigner 等)提供正向和逆向工程,将 UML 模转代码或转回去。

组成元素

视图

UML 的五种视图 view:

image-20230623133128596

  1. 用户视图:以用户的观点表示系统的目标,所有视图的核心,描述系统的需求。
  2. 结构视图:表示系统静态行为,描述系统静态元素,如包、类、对象,以及它们之间的关系
  3. 行为视图:表示系统动态行为,描述系统组成元素(如对象)在系统运行时的交互关系。
  4. 实现视图:系统的逻辑元素分布,描述系统物理文件及其之间的关系。
  5. 环境视图:系统的物理元素分布,描述系统硬件设备及其之间的关系。

UML 2.0 提供了 13 种图 diagram,与五种视图对应。

用例图、类图是使用频率最高的两种图。

  1. 用例图 use case diagram / 用况图。对应用户视图

    使用用例来表示系统的功能需求,表示多个外部执行者与系统用例之间以及用例与用例之间的关系

    与用例说明文档 use case specification 是常用的需求建模工具,也称为用例建模

  2. 类图 class diagram。对应结构视图

    使用类来描述系统的静态结构,包含类和它们之间的关系,描述系统内所声明的类,但没有描述运行时类的行为。

  3. 对象图 object diagram。UML 2.0 新增,对应结构视图

    类图某一时刻的一个实例,表示类的对象实例之间的关系

  4. 包图 package diagram。UML 2.0 新增,对应结构视图

    描述包与包之间的关系。包是一种把元素组织到一起的通用机制,如多个类组织成一个包

  5. 组合结构图 composite structure diagram。UML 2.0 新增,对应结构视图

    将每一个类放到一个整体,从类的内部结构审视一个类。用于表示一个类的内部结构,描述一些包含复杂成员或内部类的类结构

  6. 状态图 state diagram,对应行为视图

    描述一个特定对象的所有可能的状态及其引起状态转移的事件。包括一系列对象的状态及状态之间的转换

  7. 活动图 activity diagram,对应行为视图

    表示系统中各活动的次序,应用非常广泛,既可以描述用例的工作流程,也可以描述类中某个方法的操作行为

  8. 顺序图 sequence diagram / 时序图 / 序列图,对应行为视图

    用于表示对象之间的交互,重点表示对象之间发送消息的时间顺序

  9. 通信图 communication diagram。UML 1.X 称协作图,对应行为视图

    展示了一组对象、这些对象间的连接以及它们之间收发的信息

    与顺序图是同构图,包含相同信息,但表达方式不同,可以相互转换

  10. 定时图 timing diagram。UML 2.0 新增图,对应行为视图

    采用一种带数字刻度的时间轴精确地描述消息的顺序,而不是像顺序图那样只指定消息消息的相对顺序,还允许可视化地表示每条生命线的状态变化,当需要对实时事件进行定义时可以很好满足要求

  11. 交互概览图 interaction overview diagram。UML 2.0 新增图,对应行为视图

    交互图和活动图混合物,可以理解为细化的活动图,其中的活动都通过一些小型的顺序图表示;可以理解为利用标明控制流的活动图分结果的顺序图

  12. 组件图 component diagram / 构件图。对应实现视图

    描述每个功能所在的组件位置以及它们之间的关系

  13. 部署图 deployment diagram / 实施图。对应环境视图

    描述软件中各个组件驻留的硬件位置以及这些硬件之间的交互关系

顺序图、通信图、定时图、交互概览图统称交互图 interactive diagram,是表示各对象如何依据某种行为进行写作的模型,通常可以使用一个交互图表示和说明一个用例的行为

模型元素

model element。包括事物以及事物之间的联系。事物代表任何可以定义的东西。

每一个模型元素都有与之相对应的图形元素(如类、对象、消息、组件、节点等),以及它们之间的关系(如关联、泛化、依赖等)。

同一个模型元素可以在不同的 UML 图使用,保持相同的含义和相同的符号。

通用机制

general mechanism。

为模型元素提供额外的注释、修饰和语义。主要包括规格说明、修饰、公共分类、扩展机制四种。允许用户对 UML 进行扩展,以便一个特定的方法、过程、组织或用户来使用。

类图

使用频率最高的 UML 图之一。

类 class 封装了数据和行为,是具有相同属性、操作、关系的对象集合的总称。运行时实例化成对象 Object。对象是类的实例 instance。

类使用具有类名称、属性、操作分隔的长方形表示。

image-20230623144136737

  • 类名。每一个单词首字母大写。

  • 属性 attributes。类的性质。

    可见性 名称:类型 [= 默认值]

  • 操作 operations。

    可见性 名称([参数列表])[:返回类型]

其中:

  1. 名称:属性或方法的第一个单词首字母小写、之后各单词首字母大写
  2. 可见性:
    • 公有 public +
    • 私有 private -
    • 保护 protected #
    • 包内可见性 package *
  3. 类型:基本数据类型或自定义类型。

Java 内部类:

image-20230623144945569

关系

关联

association。最常用关系。结构化关系。

实线表示。单向关联带箭头。-> 形状。

表示一类对象与另一类对象有联系。

关联关系可以角色名,动词或名词(名词可为实例对象名)。可以不写。

  1. 双向关联。默认。可以有两个角色名。

  2. 单向关联。只有一个角色名。

    指向被关联的类(被指向的类不与指向它的类关联)

  3. 自关联。

  4. 多重性关联。

    重数性关联关系 multiplicity。一个类的对象与另一个类的对象的连接的个数。

    1. 1..1 0..1 一对一 (0表示可以不与之关联或最多关联一个)
    2. 0..* 1..* 一对多(0表示多可以是零个到多个;1则必须至少1个)
    3. m..n 多对多。与最少m个最多n个有关系,其中m<=n
  5. 聚合关系 aggregation

    整体与部分的关系。带空心菱形的直线。整体指向部分。

    整体与部分不存在生命周期制约关系。弱关系。

    一般通过对象注入实现。

  6. 组合关系 composition

    实心菱形直线。整体指向部分。

    整体与部分同一个生存期。整体消亡部分一起同生共死。强关系。

    一般通过构造函数实例化成员类。

单向关联

image-20230623145211629

image-20230623145247775

双向关联

image-20230623145227727

image-20230623145253821

自关联

image-20230623145406397

image-20230623145413260

多重性关联

image-20230623145905642

image-20230623145910570

聚合关系

image-20230623150249402

组合关系

image-20230623150303613

依赖关系

dependency。

带箭头的虚线箭头,指向被依赖。

特定事物的改变可能会影响到使用该事物的其他事物。一个事务使用其他事物,一般是作为参数。

在分析阶段忽略这些依赖:调用另一个类的静态方法、定义另一个类的局部变量等。

image-20230623151302143

image-20230623151605510

泛化关系

generalization。继承。is a kind of。

空心三角形箭头实现。子类/派生类指向父类/基类/超类。

在泛化中,子类不需要描述父类已有的属性和方法。

image-20230623151901388

接口与实现关系

realization。

空心三角形箭头+虚线。实现类指向接口。

注意接口的图形符号与类不同,左上角带一个接口符号 o-

接口没有属性,所有操作都是抽象的,一般只有声明没有实现。

image-20230623152059061

其他

注释

comment。类图或其他 UML 图形都可以用。对图中符号/元素进行附加说明,详细说明某一方法的功能或实现。

image-20230623152328922

例子

基本

Java C/S 注册

image-20230623152236274

顺序图

最常用系统动态建模工具,使用频率最高的交互图。

表示对象动态交互,图形化描述消息传递时间顺序。

  • 需求分析阶段。描述用例对象交互,可以用自然语言。
  • 系统设计阶段。一般用专业技术语言命名。

要素

组成:

  1. 执行者 actor。小人符号。有些交互过程不需要。

  2. 生命线 lifeline。纵向虚线。

  3. 对象 object。与类的不同在于名称有下划线。

  4. 激活 activation。过程的执行,包括等待过程执行的时间。激活部分替代生命线,长条矩形表示。

  5. 消息 message。对象间单路通信。有标记的箭头,发送者指向接收者。从上到下时间顺序排序。

    1. 有的消息对应于激活一个对象,为调用消息 call message。
    2. 否则,是发送消息 send message。
    3. 一个消息发给自身是自身消息 self call message。

    image-20230623153212468

  6. 交互片段 interaction fragment。大方框,左上角标准操作类型。

    1. alt。多条路径,为真执行。
    2. opt。任选。条件为真执行。
    3. par。并行。每一片段并发执行。
    4. loop。循环,多次执行该片段。

image-20230623153119785

例子

基本

登录。

image-20230623153254978

image-20230623153305475

状态图

statechart diagram

描述特定对象所有可能状态及其引起状态转移的事件。

只能描述一个类。多个不同类对象要活动图。

要素

  1. 状态 state / 中间状态。圆角矩形框。上格是状态名,下格是处于该状态时可以进行的活动 action。

  2. 初始状态 inital state / 初态。黑色实心圆圈。只有一个

  3. 结束状态 final state / 终止状态 / 终态。实心圆外加圆圈。可以有多个。

  4. 转移 transition。一个状态到另一个的连线和箭头,指向转移后的新状态。

    文字说明引发状态变化的条件。若是特定条件转移,称为守护条件 guard condition。发生事件时的处理称为动作 action。

    可以带有标注,语法为 事件名 [条件] / 动作名。三部分都可以省略。

  5. 子状态 / 复合状态。

image-20230623153846038

image-20230623153840027

例子

基本

信用卡。

image-20230623153914940