📜  OOAD-UML结构图(1)

📅  最后修改于: 2023-12-03 14:44:53.772000             🧑  作者: Mango

OOAD-UML结构图

OOAD(面向对象分析与设计)-UML(统一建模语言)结构图是一种用于描述系统的静态结构和组成部分的图解表示。它通过使用各种联接元素,如类、接口、对象、组件、包和节点等来反映系统的各个组成部分之间的关系。在软件系统的设计和开发中,这种结构图被广泛应用于说明软件组件之间的关系和依赖性。

主要的UML结构图类型

在UML中存在的主要结构图类型包括:

  1. 类图:用于描述类、接口、对象和它们之间的关系
  2. 对象图:用于显示一个特定时间点类实例的集合
  3. 组合结构图:描述程序代码中的组合结构
  4. 部署图:用于描述系统的部署结构
  5. 包图:用于描述程序代码的包结构

这些UML结构图类型形成了一个完整的描述软件系统结构的体系,程序员可以根据系统开发要求选择和应用不同类型的UML结构图。

类图

类图是UML中最常用的结构图之一。它用于表示类、接口和它们之间的关系。在一个类图中,类通常会显示为一个矩形框,类的属性和方法会显示在框的内部。关系则由各种不同的线条表示,包括:

  1. 继承关系
  2. 实现关系
  3. 关联关系
  4. 聚合关系
  5. 组合关系

例如:

@startuml
class 类名 {
  -私有变量1
  -私有变量2
  #受保护变量1
  +公共变量1
  +公共变量2
  -私有方法1()
  -私有方法2()
  +公共方法1()
  +公共方法2()
}

class 类名2 {
  ...
}
类名 --|> 类名2
类名 --> 接口名
类名1 -- class
@enduml

此UML代码片段创建了一个简单的类图,其中包含类、关联关系和继承关系。其中,类名具有几个私有变量和公共方法,与另一个类名2有着继承关系。

对象图

对象图描述了一个给定时间点的类实例集合。它通常用于对现有对象进行建模,如解释器、编译器等。在一个对象图中,每个对象通常表示为一个矩形,其中包含对象名称、属性和相关方法。对象之间则由线条表示,这些线条通常表示对象之间的关系或是否具有引用关系。

例如:

@startuml
object 对象1 {
  变量1 = 值1
  变量2 = 值2
}
object 对象2 {
  ...
}
对象1 -> 对象2 : 关联关系
对象1 --> 对象2 : 引用关系
类1 --> 对象1
@enduml

此UML代码片段创建了一个简单的对象图,其中对象1和对象2之间具有引用关系和关联关系,同时对象1由类1实例化。

组合结构图

组合结构图描述了程序代码中的组合结构。这种图通常用于显示程序的复杂部分,如线程或进程。在组合结构图中,组件通常显示为矩形,并使用各种线条表示组件之间的关系。

例如:

@startuml
class 组件1 {
  +公共变量
  +公共方法()
}
class 组件2 {
  ...
}
组件1 -组合- 类1
组件1 -组合- 组件2
@Component
class 类1 {
  ...
}
@enduml

这个UML代码片段创建了一个组合结构图,其中组件1由类1实例化,同时还具有组件2的实例,它们之间具有组合关系和共同的公共方法。

部署图

部署图通常用于描述系统的部署结构。在一个部署图中,节点表示为盒状物,节点可以是硬件或软件执行环境。组件可以放置在一个节点中以表示它所在的运行环境。

例如:

@startuml
node 节点1 {
  component 组件1 {
    +公共方法1()
    +公共方法2()
  }
  component 组件2 {
    ...
  }  
}
node 节点2 {
  component 组件3 {
    +公共方法1()
    +公共方法2()
  }
  component 组件4 {
    ...
  }  
}
节点1 -.....> 节点2 : 视察
@enduml

这个UML代码片段创建了一个简单的部署图,其中两个节点(节点1和节点2)之间具有运行环境部署关系。在节点1中,组件1和组件2运行在共同的运行环境中。

包图

包图用于描述程序代码的包结构。在一个包图中,包通常表示为文件夹形状,其中包含多个类、接口和其他包。包之间则由各种线条表示,包括:

  1. 依赖关系
  2. 关联关系
  3. 继承关系

例如:

@startuml
package 包名1 {
  class 类名1 {
    ...
  }
  class 类名2 {
    ...
  }  
}
package 包名2 {
  class 类名3 {
    ...
  }
  class 类名4 {
    ...
  }
  包名2 <-- 包名1 : 依赖关系
}
@enduml

这个UML代码片段创建了一个简单的包图,其中包括两个包——包名1和包名2。类名1和类名2属于包名1,类名3和类名4属于包名2,同时它们之间具有依赖关系。