UML建模学习4:UML基本构造块之图

           今天继续来看UML基本构造块中的图。

       一UML基本构造块之图

       UML基本构造块的图是在特定的视角下对系统所作的抽象描述。图是事物集合的分类,UML中包含多种图。我们

先来看分类:

       UML定义了5类,10种模型图:下图加上非UML规范的包图

        

       五种类图定义:

       1用例图:从用户角度描述系统功能,并指各功能的操作者。

       2静态图:包括类图,包图,对象图。

       2.1类图:描述系统中类的静态结构。

       2.2包图:是包和类组成的,表示包与包之间的关系,包图描述系统的分层结构。

       2.3对象图:是类图的实例。

       3行为图:描述系统动态模型和对象组成的交换关系。包括状态图和活动图。

       3.1活动图:描述了业务实现用例的工作流程。

       3.2状态图:是描述状态到状态控制流,常用于动态特性建模。

       4.交互图:描述对象之间的交互关系,包括顺序图和协作图。

       4.1顺序图:对象之间的动态合作关系,强调对象发送消息的顺序,同时显示对象之间的交互。

       4.2协作图:描述对象之间的协助关系。

       5.实现图:

       5.1部署图:定义系统中软硬件的物理体系结构。

       5.2构件图:描述代码部件的物理结构及各部件之间的依赖关系。

       九种图层次结构图示:

       

       二UML五类十种图概述

       用例图:

       (1)用例图(Use-case Diagram)

       用例图从用户的角度出发描述系统的功能、需求,展示系统外部的各类角色与系统内部的各种用例之间的关系;

用例图描述角色以及角色与用例之间的连接关系。说明的是谁要使用系统,以及他们使用该系统可以做些什么。一个

用例图包含了多个模型元素,如系统、参与者和用例,并且显示了这些元素之间的各种关系,如泛化、关联和依赖。

       用例图用来描述用户的需求,从用户的角度描述系统的功能,并指出各功能的执行者,强调谁在使用系统,系统

为执行者完成哪些功能。

       课程登记实例的Use Case图:


       下图(摘自网络):


        静态图:

        (2)类图(Class Diagram)

       类图用于定义系统中的类,包括描述系统所包含的类、类的内部结构及类之间的关系。类图主要用于描述系统的

静态结构。

       类图是描述系统中的类,以及各个类之间的关系的静态视图。能够让我们在正确编写代码以前对系统有一个全面

的认识。类图是一种模型类型,确切的说,是一种静态模型类型。类图表示类、接口和它们之间的协作关系。

       如下图(摘自网络):


       (3)对象图(Object Diagram)

       对象图与类图极为相似,它是类图的一个具体实例,对象图显示类的多个对象实例,而不是实际的类。它描述的

不是类之间的关系,而是对象之间的关系。对象图描述了系统在具体时间点上所包含的对象以及各个对象之间的关

系。 

       如下图(摘自网络):

       (4)包图(Package Diagram)

       包图表明包及其之间的依赖类图,用于描述系统的分层结构,由包或类组成,表示包与包之间的关系。

       如下图(摘自网络):


        行为图:

        (5)状态图(Statechart Diagram)

       状态图描述一类对象的所有可能的状态以及事件发生时状态的转移条件。可以捕获对象、子系统和系统的生命周

期。他们可以告知一个对象可以拥有的状态,并且事件(如消息的接收、时间的流逝、错误、条件变为真等)会怎么随

着时间的推移来影响这些状态。一个状态图应该连接到所有具有清晰的可标识状态和复杂行为的类;该图可以确定类

的行为,以及该行为如何根据当前的状态变化,也可以展示哪些事件将会改变类的对象的状态。状态图是对类图的补

充。

        如下图(摘自网络):


        

        (6)活动图(Activity Diagram)

        活动图描述系统中各种活动的执行顺序,描述用例要求所要进行的活动,以及活动间的约束关系,有利于识别并

行活动。能够演示出系统中哪些地方存在功能,以及这些功能和系统中其他组件的功能如何共同满足前面使用用例图

建模的商务需求。 

       如下图(摘自网络):


       交互图:

       (7)顺序图(Sequence Diagram,也称为序列图)

       顺序图表示对象之间动态合作的关系。描述对象之间的交互顺序,着重体现对象间消息传递的时间顺序,强调对

象之间消息的发送顺序,同时也显示对象之间的交互顺序。

       顺序图是用来显示你的参与者如何以一系列顺序的步骤与系统的对象交互的模型。顺序图可以用来展示对象之间

是如何进行交互的。顺序图将显示的重点放在消息序列上,即强调消息是如何在对象之间被发送和接收的。

       如下图(摘自网络):

        实现图:

        (8)协作图(Collaboration Diagram,也称合作图)

       协作图描述对象之间的协作关系,更侧重于说明哪些对象之间有消息的传递。和顺序图相似,显示对象间的动态

合作关系。可以看成是类图和顺序图的交集,协作图建模对象或者角色,以及它们彼此之间是如何通信的。

       如下图(摘自网络):


       如果强调时间和顺序,则使用序列图;如果强调上下级关系,则选择协作图;这两种图合称为交互图。序列图和

协作图可以相互转化。

       (9)构件图(Compoment Diagram,也称组件图)

       组件图描述代码部件的物理结构以及各部件之间的依赖关系。一个构件可以是一个资源文件、一个二进制文件或

者一个可执行文件。

       构件图用来建模软件的组件及其相互之间的关系,这些图由构件标记符和构件之间的关系构成。在构件图中,构

件是软件单个组成部分,它可以是一个文件,产品、可执行文件和脚本等。

       如下图(摘自网络):

       (10)部署图(Deployment Diagram,也称实施图或配置图)

       部署图定义系统中软硬件的物理体系结构,用来描述实际的物理设备以及它们之间的连接关系。部署图是用来建

模系统的物理部署。例如计算机和设备,以及它们之间是如何连接的。部署图的使用者是开发人员、系统集成人员和

测试人员。部署图用于表示一组物理结点的集合及结点间的相互关系,从而建立了系统物理层面的模型。

       如下图(摘自网络):

       三UML建模机制

       从应用的角度看,当采用面向对象技术设计系统时,首先是描述需求;其次根据需求建立系统的静态模型,以构

造系统的结构;第三步是描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图(包

含包)、对象图、组件图和部暑图等五个图形,是标准建模语言UML的静态建模机制。其中第三步中所建立的模型或者

可以执行,或者表示执行时的时序状态或交互关系。它包括UML模型图中状态图、活动图、顺序图和协作图等四个图

形,是标准建模语言UML的动态建模机制。因此,标准建模语言UML的主要内容也可以归纳为静态建模机制和动态建

模机制两大类。

       四UML简单示例

       显示"Hello World"的简单Java Applet程序,先来看一下代码:

import java.awt.Graphics;

public class HelloWorld extends java.applet.Applet{
     public void paint(Graphics g){
         g.drawString("Hello World!",10,20);
     }
}
        根据以上代码结合UML画出下面的几种UML图:

        类:

        

        类的关系:

         

        继承层次:

         

        包:

        

        序列图:

        

        构件图:

        

       五UML在软件开发各个阶段的应用

       在软件开发各个阶段,使用不同的UML图对系统进行描述。

       采用面向对象技术设计软件系统时,使用用例图来描述用户需求;使用类图、对象图、包图、构件图和部署图这

5种静态图来描述系统的静态结构;使用顺序图、合作图、活动图和状态图这4种图描述系统动态行为。


       需求:

       采用用例图来描述需求(角色,功能、外部交互)


       分析:明确解决问题的细节

       采用类图来描述静态结构

       采用顺序图、合作图、活动图、状态图来描述动态行为。


       设计:给出解决方案

       采用类图、包,对类的接口进行设计。


       实现:

       将类用某面向对象语言实现


       集成与交付:

       构建图、包、部署图


       测试:

       单元测试使用类图和类的规格说明书

       集成测试使用类图、包、构件图和合作图

       系统测试使用用例图测试系统功能。

       UML基本构造块总结:

       事物是对模型中最具有代表性的成分的抽象;关系把事物结合在一起;图聚集了相关的事物。


<think>好的,用户问的是构造块的概念或用法,以及在编程中的应用和定义。首先,我需要明确“构造块”这个术语在编程中的具体含义。根据提供的引用资料,引用[1]提到了构造块、构造方法和静态代码,并指Java中每个类至少有一个构造方法,如果没有显式定义,系统会自动生成一个默认的无参构造方法。构造方法需要用public修饰,否则在其他类中无法实例化。而引用[2]讨论了C#中的构造方法定义和调用,说明当用户自定义构造方法后,系统不再提供默认的无参构造方法。引用[4]则提到Python中尝试定义多个构造器时的问题,指通过多个__init__方法不可行,可能需要其他方式实现。 不过用户的问题是关于“构造块”,而引用中并没有直接提到“构造块”的定义,可能是用户将“构造方法”或“代码”混淆了。在Java中,存在实例初始化(instance initializer block)和静态初始化(static initializer block),有时也被称为构造块。例如,实例初始化在每次创建对象时执行,无论调用哪个构造方法,它都会在构造方法之前运行。静态初始化则在类加载时执行一次。 所以,用户可能指的是这种初始化。需要确认构造块是否指的是Java中的实例初始化或静态初始化。根据引用[1]中的“构造块、构造方法与静态代码”,这里的构造块可能指的是实例初始化,而静态代码就是静态初始化。因此,构造块(实例初始化)用于对象初始化,而静态代码用于类初始化。 接下来,需要解释构造块的定义、用法和应用场景。例如,在Java中,构造块用大括号包围,直接写在类中,每次创建对象时都会执行,且在构造方法之前执行。它可以用来初始化实例变量,特别是当多个构造方法有共同的初始化代码时,可以提取到构造块中,避免代码重复。 另外,需要比较构造块和构造方法的区别:构造块在构造方法之前执行,且无论调用哪个构造方法,构造块都会执行。而构造方法可以有多个,根据参数不同进行重载。构造块适合执行所有构造方法共有的初始化步骤。 在应用方面,构造块可以用于日志记录、资源初始化、设置默认值等场景。例如,每次创建对象时记录日志,或者在构造块中初始化某些资源,确保对象创建时资源已准备就绪。 还需要注意,用户可能在问题中将“构造块”与“构造方法”混淆,因此需要明确两者的不同。同时,根据引用[4],Python中无法通过多个__init__方法实现构造器重载,但可以通过类方法或默认参数来实现类似功能。不过这可能与构造块无关,但需要确认用户是否可能混淆了这些概念。 最后,生成相关问题时要围绕构造块、构造方法、静态代码的区别,使用场景,以及在不同语言中的实现差异等方面提问,以帮助用户深入理解。</think>### 构造块的定义与编程应用 **构造块**(Instance Initializer Block)是面向对象编程中用于对象初始化的特殊代码,在Java语言中具有典型代表性。以下是其核心要点: --- #### 1. **构造块的定义** - **语法形式**:直接使用大括号`{}`包裹代码,置于类内部、方法外部 示例: ```java public class MyClass { // 构造块 { System.out.println("构造块执行"); } } ``` - **执行时机**:**每次创建对象时**,构造块会**优先于构造方法**执行[^1] - **用途**:集中处理**多个构造方法的公共初始化逻辑**,例如设置默认值或验证参数 --- #### 2. **与构造方法的区别** | 特性 | 构造块 | 构造方法 | |---------------------|--------------------------|-----------------------------| | **执行顺序** | 先于构造方法执行 | 在构造块之后执行 | | **代码复用** | 多个构造方法共享代码 | 需通过`this()`调用其他构造方法 | | **参数依赖** | 无法接收参数 | 可定义参数实现灵活初始化 | --- #### 3. **典型应用场景** 1. **资源预加载** ```java public class DatabaseConnector { private Connection conn; // 构造块初始化数据库连接 { try { conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb"); } catch (SQLException e) { e.printStackTrace(); } } } ``` 2. **日志记录** 在构造块中添加日志输,追踪对象创建过程 3. **字段默认值设置** 为复杂对象的非空字段提供默认值,避免构造方法遗漏 --- #### 4. **静态构造块(静态初始化)** - **语法**:使用`static {}`定义 - **作用**:在类加载时执行**一次**,用于初始化静态资源 示例: ```java public class ConfigLoader { static Map<String, String> config; // 静态构造块加载配置文件 static { config = loadConfigFromFile("app.properties"); } } ``` --- #### 5. **与其他语言的对比** - **C#**:通过构造函数重载实现类似功能,无直接等价语法[^2] - **Python**:通过`__init__`方法和类方法(如`@classmethod`)模拟构造块逻辑[^4] ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值