UML
- 格式:docx
- 大小:316.75 KB
- 文档页数:9
UML科普⽂,⼀篇⽂章掌握14种UML图前⾔上⼀篇⽂章写了⼀篇建造者模式,其中有⼏个UML类图,有的读者反馈看不懂了,我们今天就来解决⼀哈。
什么是UML?UML是Unified Model Language的缩写,中⽂是统⼀建模语⾔,是由⼀整套图表组成的标准化建模语⾔。
为什么要⽤UML?通过使⽤UML使得在软件开发之前,对整个软件设计有更好的可读性,可理解性,从⽽降低开发风险。
同时,也能⽅便各个开发⼈员之间的交流。
UML提供了极富表达能⼒的建模语⾔,可以让软件开发过程中的不同⼈员分别得到⾃⼰感兴趣的信息。
Page-Jones 在《Fundamental Object-Oriented Design in UML》⼀书中总结了UML的主要⽬的,如下:1. 为⽤户提供现成的、有表现⼒的可视化建模语⾔,以便他们开发和交换有意义的模型。
2. 为核⼼概念提供可扩展性 (Extensibility) 和特殊化 (Specialization) 机制。
3. 独⽴于特定的编程语⾔和开发过程。
4. 为了解建模语⾔提供⼀个正式的基础。
5. ⿎励⾯向对象⼯具市场的发展。
6. ⽀持更⾼层次的开发概念,如协作,框架,模式和组件。
7. 整合最佳的⼯作⽅法 (Best Practices)。
UML图有哪些?UML图分为结构图和⾏为图。
结构图分为类图、轮廓图、组件图、组合结构图、对象图、部署图、包图。
⾏为图⼜分活动图、⽤例图、状态机图和交互图。
交互图⼜分为序列图、时序图、通讯图、交互概览图。
UML图概览什么是类图?【概念】类图是⼀切⾯向对象⽅法的核⼼建模⼯具。
类图描述了系统中对象的类型以及它们之间存在的各种静态关系。
【⽬的】⽤来表⽰类、接⼝以及它们之间的静态结构和关系。
在类图中,常见的有以下⼏种关系。
泛化(Generalization)【泛化关系】是⼀种继承关系,表⽰⼦类继承⽗类的所有特征和⾏为。
【箭头指向】带三⾓箭头的实线,箭头指向⽗类。
UML是Unified Modeling Language的缩写,它是一种可视化的面向对象建模语言,提供了统一的、标准的图形化工具,使得软件开发人员能够更加直观地描述软件系统的结构和行为,从而更加高效地进行软件开发。
UML的定义包括UML语义和UML表示法两个元素,前者描述了建模的概念,如类、对象、关联等,后者则定义了各种图形符号和工具,如类图、时序图、用例图等。
UML支持软件系统的各个阶段,包括需求分析、设计、实现和测试等,可以帮助开发人员更好地理解需求,设计更好的解决方案,提高软件质量和开发效率。
uml基本原理UML基本原理UML(Unified Modeling Language)是一种用于软件系统建模的标准化语言,它提供了一套丰富的符号和规范,用于描述软件系统的结构、行为和交互。
UML的设计遵循一些基本原理,这些原理不仅为软件开发人员提供了一种统一的建模方式,还能提高软件系统的可理解性和可维护性。
本文将围绕UML的基本原理展开阐述。
1. 抽象与详细化UML通过抽象和详细化的方式来描述软件系统。
在建模过程中,我们可以从整体上抽象出系统的结构和行为,然后逐步详细化,直至得到具体的实现模型。
这种抽象与详细化的方式使得我们能够以不同层次的抽象度来描述软件系统,从而更好地理解和分析系统的各个方面。
2. 分解与组合UML支持将复杂的系统分解为较小的部分,以便更好地理解和管理系统。
通过分解,我们可以将系统划分为多个模块或组件,每个模块或组件负责特定的功能或任务。
同时,UML也支持将这些部分重新组合成一个整体系统。
这种分解与组合的方式使得软件系统的设计和开发更加模块化,提高了系统的可维护性和复用性。
3. 关注点分离UML提供了一种关注点分离的机制,使得建模人员能够将不同的关注点分开进行建模。
在建模过程中,我们可以将系统的结构、行为和交互等不同方面进行分离,从而使得每个关注点的描述更加清晰和准确。
这种关注点分离的机制有助于降低建模的复杂度,提高建模人员的效率。
4. 可视化表示UML提供了一套丰富的图形符号,用于可视化地表示软件系统的结构和行为。
通过使用这些图形符号,我们可以将抽象的概念转化为直观的图形表示,从而更好地理解和沟通系统的设计和实现。
常用的UML图形包括类图、用例图、活动图、时序图等,它们分别用于表示系统的静态结构、功能需求、流程行为和时序交互。
5. 模型驱动开发UML支持模型驱动开发(Model-Driven Development,简称MDD),这是一种基于模型的软件开发方法。
在MDD中,我们首先通过建模工具创建软件系统的模型,然后通过模型转换和代码生成等技术自动生成系统的代码。
uml构件的种类UML(Unified Modeling Language)是一种用于软件系统建模的标准化语言,它提供了一组丰富的构件类型,用于描述系统的不同方面。
本文将从不同的角度介绍UML构件的种类。
1. 结构性构件结构性构件用于描述系统的静态结构,包括类、接口、包、对象等。
类是UML中最基本的构件,用于表示系统中的实体和其属性、操作。
接口定义了类或组件所提供的服务。
包是一组相关元素的容器,用于组织和管理系统的结构。
对象是类的实例化,用于描述系统中的具体实体。
2. 行为性构件行为性构件用于描述系统的动态行为,包括活动、状态机、用例等。
活动图用于描述系统中的活动流程,表示系统在不同活动之间的转换和流程控制。
状态机图用于描述系统中的状态转换,表示系统在不同状态之间的转换和行为。
用例图用于描述系统的功能需求,表示系统与外部实体之间的交互。
3. 交互构件交互构件用于描述系统中的交互行为,包括时序图、通信图等。
时序图用于描述系统中的交互顺序,表示系统中不同对象之间的消息传递和时序关系。
通信图用于描述系统中的对象之间的交互,表示系统中不同对象之间的消息传递和通信路径。
4. 实现构件实现构件用于描述系统中的实现细节,包括组件、节点等。
组件是系统中的可重用部分,用于实现系统的某个功能或服务。
节点是系统中的物理设备或软件环境,表示系统的部署和运行环境。
5. 分析构件分析构件用于描述系统的分析模型,包括用例、类、活动等。
用例是对系统功能需求的描述,表示系统与用户之间的交互。
类是对系统中实体的描述,表示系统中的对象和其属性、操作。
活动图用于描述系统中的活动流程,表示系统在不同活动之间的转换和流程控制。
6. 部署构件部署构件用于描述系统的部署架构,包括节点、组件等。
节点是系统中的物理设备或软件环境,表示系统的部署和运行环境。
组件是系统中的可重用部分,用于实现系统的某个功能或服务。
7. 用例构件用例构件用于描述系统的功能需求,包括用例、参与者等。
UML图标含义
UML 有⼏种关系图标:泛化(继承),实现,依赖,关联,聚合,组合
⼀、泛化(继承)
B——▷A B 类作为 A 类的⼦类存在。
⼆、实现
B------▷A B 类实现 A 接⼝。
三、依赖
A------>B B 类作为 A 类某个⽅法的参数,表⽰A想做某些事情需要依赖 B,不然做不成。
四、关联
A——>B(单向) B 类作为 A 类的属性存在,语义上 A 类和 B 类的地位或⽔平相等。
A—— B(双向) B 类作为 A 类的属相存在, A 类作为 B 类的属性存在,语义上 A 类和 B 类的地位或⽔平相等。
五、聚合
A♢——>B B 类作为 A 类的属性存在,语义上 B 类可作为 A 类的⼀部分,这个关系可有可⽆,是A has--a B 的关系,如房⼦(A),桌⼦(B)
六、组合
A♦——>B B 类作为 A 类的属性存在,语义上 B 类是 A 类的⼀部分,这部分必须有,是 A contain--a B 的关系,如(⼈),⼤脑(B)。
⼀般情况下,继承和实现⽐较简单,就是其他⼏个关系会有点⼩复杂。
UML的定义和组成详细介绍⽬录1、UML1.1概述UML(Unified Modeling Language 统⼀建模语⾔) 是为软件系统的制品进⾏描述(specifying)、可视化(visualizing)、构造(constructing)、⽂档化(documenting)的⼀种语⾔。
UML规范⽤来描述建模的概念有: 类、对象、关联、职责、⾏为、接⼝、⽤例、包、顺序、协作,以及状态。
1.2 UML是⼀种建模语⾔建模⽅法 = 建模语⾔ + 建模过程。
建模语⾔定义了⽤于表⽰设计的符号(通常是图形符号);建模过程描述进⾏设计所需要遵循的步骤。
标准建模语⾔UML是⼀种建模语⾔,⽽不是⼀种⽅法,它统⼀了⾯向对象建模的基本概念、术语及其图形符号,为⼈们建⽴了便于交流的共同语⾔。
建模能⼒:建模⽅法 + 领域知识 + 实践1.3 UML语⾔包含三⽅⾯1. UML基本图素:它是构成UML模型图的基本元素。
例如类、对象、包、接⼝、组件等。
2. UML模型图:它由UML基本图素按照UML建模规则构成。
例如⽤例图、类图、对象图、…等。
3. UML建模规则:UML模型图必须按特定的规则有机地组合⽽成,从⽽构成⼀个有机的、完整的UML模型图(well-formed UMLdiagram)。
2、UML⽀持软件体系结构建模为了表达不同的软件开发相关⼈员在软件开发周期的不同时期看待软件产品的不同侧重⾯, 需要对模型进⾏分层。
UML根据软件产品的体系结构(architecture)对软件进⾏分层。
软件的体系结构分解为五个不同的侧⾯,称为4+1视图(view)。
分别是:⽤例视图(Use case view,Scenarios)—场景视⾓逻辑视图(Logical view) — 逻辑视⾓进程(过程)视图(Process view) — 过程视⾓实现(开发)视图(Implementation view) —开发视⾓部署(物理、配置)视图(Deployment view) —物理视⾓每个视图分别关注软件开发的某⼀侧⾯视图由⼀种或多种模型图(diagram)构成模型图描述了构成相应视图的基本模型元素(element)及它们之间的相互关系。
uml建模实例100例UML(统一建模语言)是一种用于软件开发的标准建模语言,它可以帮助开发人员更好地理解、设计和实现软件系统。
下面是100个UML建模实例。
1. 用例图:描述系统功能和外部用户的行为。
2. 活动图:描述系统中的过程和活动,通常用来描述系统的业务流程。
3. 类图:描述系统中的类、属性和方法、关系等。
4. 对象图:描述系统中的对象及其关系。
5. 状态图:描述系统中的对象或类的状态和状态转换。
6. 序列图:描述系统中的对象或类之间的交互过程。
7. 协作图:描述系统中的对象或类之间的协作过程。
8. 构件图:描述系统的组成部分和它们之间的关系。
9. 部署图:描述系统的物理部署结构和组件之间的关系。
10. 通信图:描述系统中的对象之间的消息传递。
11. 包图:描述系统中的包和它们之间的关系。
12. 组合结构图:描述系统中的组成部分和它们之间的组合关系。
13. 时序图:描述系统中的对象或类之间的时间关系。
14. 交互概述图:描述系统中的对象或类之间的协作过程。
15. 系统顺序图:描述系统中的对象或类之间的时间关系。
16. 概念图:描述系统中的概念和它们之间的关系。
17. 数据流图:描述系统中的数据流和处理过程。
18. 流程图:描述系统中的过程和流程。
19. 参与者图:描述系统中的参与者和它们之间的关系。
20. 视图图:描述系统中的视图和它们之间的关系。
21. 规则图:描述系统中的规则和它们之间的关系。
22. 用例图扩展点:描述用例图中的扩展点和它们之间的关系。
23. 活动图扩展点:描述活动图中的扩展点和它们之间的关系。
24. 类图扩展点:描述类图中的扩展点和它们之间的关系。
25. 对象图扩展点:描述对象图中的扩展点和它们之间的关系。
26. 状态图扩展点:描述状态图中的扩展点和它们之间的关系。
27. 序列图扩展点:描述序列图中的扩展点和它们之间的关系。
28. 协作图扩展点:描述协作图中的扩展点和它们之间的关系。
主题:UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别/topic/632059继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过关键字extends明确标识,在设计时一般没有争议性;实现指的是一个class类实现interface接口(可以是多个)的功能;实现是类与接口之间最常见的关系;在Java中此类关系通过关键字 implements明确标识,在设计时一般没有争议性;依赖可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,但是B类的变化会影响到A;比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖;表现在代码层面,为类B作为参数被类A在某个method方法中使用;关联他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;聚合聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a 的关系,此时整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享;比如计算机与CPU、公司与员工的关系等;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;组合组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合;他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分;对于继承、实现这两种关系没多少疑问,他们体现的是一种类与类、或者类与接口间的纵向关系;其他的四者关系则体现的是类与类、或者类与接口间的引用、横向关系,是比较难区分的,有很多事物间的关系要想准备定位是很难的,前面也提到,这几种关系都是语义级别的,所以从代码层面并不能完全区分各种关系;但总的来说,后几种关系所表现的强弱程度依次为:组合>聚合>关联>依赖;主题:类与类关系的UML图与代码表现类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。
类与类之间存在以下关系:(1)泛化(Generalization)(2)关联(Association)(3)依赖(Dependency)(4)聚合(Aggregation)UML图与应用代码例子:1.泛化(Generalization)[泛化]表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
一般化的关系是从子类指向父类的,与继承或实现的方法相反。
[具体表现]父类父类实例=new 子类()[UML图](图1.1)图1.1Animal类与Tiger类,Dog类的泛化关系[代码表现]1.class Animal{}2.class Tiger extends Animal{}3.public class Test4.{5. public void test()6. {7. Animal a=new Tiger();8. }9.}2.依赖(Dependency)[依赖]对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
[具体表现]依赖关系表现在局部变量,方法的参数,以及对静态方法的调用[现实例子]比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作[UML表现](图1.2)图1.2 Person类与Screwdriver类的依赖关系[代码表现]1.public class Person{2. /** 拧螺丝 */3. public void screw(Screwdriver screwdriver){4. screwdriver.screw();5. }6.}3.关联(Association)[关联]对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
[具体表现]关联关系是使用实例变量来实现[现实例子]比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司[UML图] (图1.3)图1.3 公司和员工的关联关系[代码表现]1.public class Company{2. private Employee employee;3. public Employee getEmployee(){4. return employee;5. }6. public void setEmployee(Employee employee){7. this.employee=employee;8. }9. //公司运作10. public void run(){11. employee.startWorking();12. }13.}(4)聚合(Aggregation)[聚合]当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。
聚合是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系。
[具体表现]与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。
关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。
[关联与聚合的区别](1)关联关系所涉及的两个对象是处在同一个层次上的。
比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。
比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。
(2)对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。
部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。
比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存)拆了下来。
[UML图](图1.4)图1.3 电脑和组件的聚合关系[代码表现]1.public class Computer{2. private CPU cpu;3. public CPU getCPU(){4. return cpu;5. }6. public void setCPU(CPU cpu){7. this.cpu=cpu;8. }9. //开启电脑10. public void start(){11. //cpu运作12. cpu.run();13. }14.}主题:UML用例图之泛化(generalization)、扩展(extend)和包含(include)关系--UML一波流系列讲解在画用例图的时候,理清用例之间的关系是重点。
用例的关系有泛化(generalization)、扩展(extend)和包含(include)。
其中include和extend最易混淆。
下面我们结合实例彻底理清三者的关系。
基本概念用例图(Use Case Diagram):用例图显示谁是相关的用户,用户希望系统提供什么服务(用例),以及用例之间的关系图。
用例图主要的作用是获取需求、指导测试。
用例图的4个基本组件:参与者(Actor)、用例(Use Case)、关系(Relationship)和系统。
泛化(generalization):泛化关系是一种继承关系,子用例将继承基用例的所有行为,关系和通信关系,也就是说在任何使用基用例的地方都可以用子用例来代替。
泛化关系在用例图中使用空心的箭头表示,箭头方向从子用例指向基用例。
扩展(extend):extend关系是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。
extend的基用例中将存在一个扩展点,只有当扩展点被激活时,子用例才会被执行。
extend关系在用例图中使用带箭头的虚线表示(在线上标注<<extend>>),箭头从子用例指向基用例。
包含(include):include为包含关系,当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例所共享。
因为子用例被抽出,基用例并非一个完整的用例,所以include关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行。
include关系在用例图中使用带箭头的虚线表示(在线上标注<<include>>),箭头从基用例指向子用例。
实例需求场景联通客户响应OSS。
系统有故障单、业务开通、资源核查、割接、业务重保、网络品质性能等功能模块。
现在我们抽出部分需求做为例子讲解。
需求1:客户响应用户和国际客服可以进行割接通知查询,在页面上有骨干割接查询、省间割接查询、省级割接查询的Tab。
分析:可以很容易看出割接查询和不同的割接子查询Tab之间是继承的关系,所以此处用泛化。
用户和客户响应、国际客服也是继承的Actor关系。
需求2:客户响应用户和国际客服可以查看某条割接通知信息,可以在页面上导出割接信息Excel格式,可以查询和该条割接相关联的故障单信息。
分析:因为导出割接和查看相关联的故障单信息都是可选的,就是说我查看割接的时候,也可以不进行这些操作,所以这里用extend关系。
也就是导出割接和查看故障单信息扩展了查看割接信息。
需求3:客户响应用户可以以网管系统为来源创建割接通知,在创建割接通知时可以保存为草稿,也可以直接发布割接通知。
分析:由于创建割接通知时,发布割接通知可以同时进行,也可以先存为草稿,所以发布割接是可选的,用extend就比较合适。
也就是发布割接扩展了创建割接通知。
需求4:用户在进行业务开通、发布割接通知、发布重保通知及相关跨省的业务时需要进行数据分发。
分析:由于业务开通、重保、割接及其它跨省的业务都需要用到数据分发用例,我们可以将数据分发用例单独抽出来,供各业务使用,这里用include就比较合适。
实际的系统中数据分发也是单独抽出来用jms和webservice实现的接口服务。