SysML中的语言构造和表达式,与我们的自然语言一样,可以分为结构类型和行为类型。在英语、德语或日语等语言中,名词描述结构,动词描述行为。句子通常包含名词和动词的组合,揭示说话者世界的某些方面。SysML也有类似的划分,包含描述结构的元素和描述行为的其他元素。在SysML中,结构性事物(名词)是用Block来描述的。工程师绘制图时,通常会包含行为或结构元素的混合,描述系统的特定方面——揭示被建模系统的某个方面。
Block是系统结构的基本单位;它可以用来描述整个系统、子系统、组件、流经系统的项目、约束,或存在于系统外部的实体。类似于我们的自然语言,Block可以代表抽象、逻辑或物理的东西。这是一个重要的概念,SysML的编写者和读者必须清楚表示的意图。例如,在逻辑架构中,通常存在代表概念性想法或设计的模块,在详细设计和构造时,这些模块可能通过物理和有形组件实现。系统架构师可能会定义一个称为碰撞检测子系统的模块,它是逻辑系统组件的表达,在详细设计阶段,部件可由一组雷达和激光发射器、探测器和摄像头实现。
许多自然语言有一个语法术语叫分类器,它将词汇中的事物(名词)归类为具有共同特征和行为的类别。这一原则同样适用于Block,Block本质上是一种分类器,将一组具有相同结构和行为特征的实例分组。Block的实例可以用通用方式建模,也可以给出精确数值,比如在旅程某一时刻或事故发生时油箱中的汽油量。
在油箱图中,汽车被建模为分类器(Block)级别,模型描述的是通用车辆,表示车辆可能有一个或最多两个油箱。但是,此油箱实例图描述了具有两个具有不同容量和储备容量的油箱的特定车辆。
Block定义了一组(或一组)特征,用于描述系统、子系统、组件或其他感兴趣的元素。这些特征可以包括结构性和行为性特征,如属性、操作和接收,以表示系统的状态以及系统能够表现出的行为。
Enterprise Architect 拥有一套工具,帮助系统工程师操作Block,并可视化系统定义中这些重要元素的结构和行为。这些功能包括:
这个内部块图显示了许多子系统如何协作来创建车辆的结构。例如,照明子系统与内部子系统有连接,而内部子系统又与体子系统有连接。
图中已隐藏了一些关系;例如,电源子系统通常会连接到照明子系统。这一点很重要,因为 SysML 和Enterprise Architect的新手通常认为每个定义的关系都应该显示在图中。虽然这句话似乎是正确的,但重要的是要记住,建模师,就像创作漫画的漫画家一样,经常会在插图中聚焦细节,以将观众的注意力集中在其他主观上更重要的元素和连接器上。
截图展示了工程师如何为图设置可见关系。
如果连接器未在此对话框中勾选,当前图中将不会显示该连接器。不过,在其他显示连接元素的图中,它可能也能看到。这可以通过“布局>图>外观>可见性>设置可见关系”的功能区选项来设置。
无论图中显示哪些连接器,建模者都可以通过选择图中的元素并查看可追溯性窗口,查看该元素的所有连接器。在截图中,已选中电源子系统,尽管图中电源子系统与照明子系统的连接器设置为“不可见”,但可追溯性窗口中仍能看到该关系。
一个模块的特征要么是结构的,要么是行为的。
结构特征分为三种:
行为特征包括:
10.1 从模块开始学习
Enterprise Architect的设计团队为系统工程师及其他学科创造了极大的灵活性,认识到团队成员通常承担多种角色,需要在项目中甚至一天内多次有效地更换岗位。视角和工作空间为系统工程师提供了一种便捷高效的方式,使他们能够有效地转换角色,而无需启动其他工具。
设定视角与工作空间
使用该工具一段时间的系统工程师会从系统工程视角集中选择一个视角;通常这可能是 SysML 视角,允许他们访问所有模式和工具箱页面,创建任意一个 SysML 图,包括块定义图和内部图。
工作区可以设置为便于特定类型的建模;对于模块定义图,核心工作区集中包含的任一个工作区都可用于建模,包括:
在项目级别工作的工程师也可能觉得一些构建工作区很有用,包括:
创建模块定义或内部模块图
在使用Block时,通常会绘制两种图示:
内部模块图——设置上下文
在项目早期制作最重要的图之一是上下文图,它描述产品或服务在特定环境或领域中的建模情况。这有助于模型观察者清晰地了解产品在需要运行的一个或多个环境中是如何部署的。它还能提前判断项目中哪些内容在范围内,哪些不在范围内。图中的元素被标记为“外部”(使用构造型),表明它们构成产品或服务环境或上下文的一部分。
图像被用来美化图,使其对包括商业和非技术受众在内的广泛利益相关者更具吸引力。
这张内部模块图展示了混合动力SUV在典型城市环境中的情况。预计还能创建另一张图,展示一个越野环境,道路被土路和河流取代,建筑物被山脉和树木取代。
10.2 将约束建模为模块
工程分析要求工程师执行多种职能,包括构建性能和可靠性模型、权衡分析、备选方案分析以及贸易研究。这些分析通常需要使用数学表达式和方程来约束分析的元素。SysML 提供了一种语言机制,以ConstraintBlock 的形式用于图形化建模方程。这是一种有用的机制,使表达式及其参数及其类型能够被明确表达。这些建模后的方程可以在多种不同情境中复用,使工程师能够定义牛顿第二运动定律{F=m*a}的公式或卡诺定理,从而得到热力学的基本定理{p= W/t =(mg)h/t}。用图形化建模这些方程的一个有益结果是,它们可以与其他模型元素相关联,如利益相关者的需求、使命目标以及低层元素,如模块和实施工件。
Enterprise Architect 允许对这些ConstraintBlock进行建模,然后作为参数化图上的约束属性再利用。约束定义可以分组到库中,不仅在当前项目中使用,还可在多个项目和项目中重复使用。在后续内容中,我们将看到如何将约束构建成方程网络,并用于参数图以评估备选方案,并进行权衡和备选分析。该工具的精确性和技术优势将确保以这种方式定义的方程能够被严谨地创建、维护和使用。
10.3 介绍模块定义图
Block提供了一个统一的概念来描述元素或系统的结构,包括:
Block可以有多个标准隔间,这些隔间可以在图示中显示,以描述Block的特性,包括:
任何隔间都可以被取消。缺失的隔间不会画分隔线。如果一个隔间被取消,就无法推断其中元素的存在或缺失。在这张图中,Pendulum 被建模出来,并展示了多个隔间,以便创建参数化仿真。
还可以作为工具扩展提供额外的隔间,以显示其他预定义或用户定义的模型属性(例如,显示业务规则、职责、变更情况、处理或提出的问题等)。
每个模块必须有一个非空名称,并且在其命名空间内是唯一的。名称的作用域是其所属的包以及能够访问该包的其他包。
创建模块定义图
模块定义图可以通过以下任一选项从用户界面的多个位置创建:
我们将使用设计功能区来创建模块定义图。首先,在浏览器窗口中选择模块定义图所在的位置。与所有图一样,位置可以置于包或元素之下,但通常会在包下 创建模块定义图。在浏览器窗口中选定位置后,选择功能区选项:
设计>图>添加图
选择此选项后,会打开“图构建器”对话框中的“图构建器”标签页,您可以选择图的类型并指定图名。名称最初默认为包含图的包或元素的名称。选择SysML视角并选择SysML版本后,会显示一系列图示类型;选择块定义图,点击“创建图”按钮。浏览器窗口中选定的位置将创建一个新的模块定义图。打开图视图,允许你开始添加描述模块及其他重要结构元素(如端口、接口和值类型)的元素和连接器。Enterprise Architect 还会显示图示工具箱中的“模块定义”页面,其中包含 SysML 规范中定义的元素和关系,适用于构建模块定义图。如果需要,还可以打开任意数量的其他工具箱页面,此外还有“通用”元素和“通用关系”页面,这些页面始终可用。
与块定义图一起使用的最重要的元素和连接器是:
元素
连接器
元素可以通过从工具箱拖拽到图视图中添加。
创建Block元素
Block元素,和其他任何类型的元素一样,可以通过包上下文菜单中的“添加元素”选项创建,或者使用图工具箱的“SysML 模块定义”页面将块放置在模块定义图(BDD)上。
Block通常会出现在多个BDD中,其中每个图都旨在解决特定利益利益相关者或利益相关者群体的问题。Enterprise Architect 在单个Block(或任何元素)级别或图级别提供多种显示选项。这些可用于决定要显示哪些隔间,甚至要为单个元素显示哪些特征,还有广泛的通用元素和图设置来设置元素和图的样式。例如,可以设置元素颜色,包括填充、边框和文本,或者通过应用图形图像来改变元素的外观,以更好地传达模块的功能。在此示例中,建模者决定为点焊机器人使用替代图像,以更清楚地传达生产线上发生的自动化过程。
10.4 模块构建基础结构
Block是系统描述中基本且离散的模块单元。Block定义了一组用于定义系统或系统本身某方面的特征。这些特征主要分为两类:结构性(Block的组成部分)和行为性(其功能)。Block与其他Block(包括自身)及其他类型元素的关系,有助于描述系统、子系统或组件的结构。
系统建模师使用模块定义图(BDD)来定义块的结构,并使用内部模块图(IBD)来描述其使用方式。
这些图可以通过浏览器窗口工具栏中的“新建图”对话框创建。
10.5 结构特征建模
Block通常通过一系列结构特征来定义。这些是Block的属性,并定义了Block的性质。例如,一台列车机车(车辆)会具有机车类、标识号、车轮组件数量、原动力、电机以及一系列其他属性。需要记住的一个重要点是,Block是一个分类器,用来描述一组引擎。你暑假乘坐的列车组前部的机车是机车的一个实例,它会有特定的机车类,例如OSE 660级,标识符为SM-09873,以及8轮组件。
Enterprise Architect 支持三种基本结构特征,每种结构特征对于建模Block结构的不同方面都很重要。
这张图展示了所有三种结构特征。
制动系统由多个部件组成,图中展示了其中两个部件。部件关联被用来表示主缸和轮缸是制动系统的基本组成部分。引用关联被用来展示两种气缸之间的关系,以及气缸与制动液之间的关系。作为属性输入的值会与其配套的值类型一同显示;例如,体积的值类型为L,这是体积尺寸的符号,其国际单位制单位为升。
由部件组成的Block
部件是Block的结构特征,构成Block与其属性之间最强的关系之一。需要理解的是,一个模块的实例可能包含多个部件实例;例如,一辆卡车可能有多个轮组组件,根据卡车的大小和类型,这个比例可能低至2个,也可以高至10个。这些可能的配置可以在模块及其部件的定义中指定,正式称为多重性——较低的数字称为下限,较高的数字称为上限。部件通常由另一个模块类型化,因此在本例中,部件类型为另一个名为“轮组件”的模块,而该模块本身通常包含一个车轴和两个轮组件。因此,每个部件在模块中定义,包含名称、类型和多重性。该工具允许通过多种方式创建部件组合关系,但最直接的方式可能是将底盘模块(整体)和轮装配块(部件)拖曳到图中,然后用快速链接器将部件(轮组)拖曳到整体(底盘)。
从源对象拖拽到目标时,会显示可能连接器的菜单,工程师会选择“组合到整体”连接器。结果将与底盘端的菱形标记形成关系,表示它是整体,而轮组端的元素是部件。
连接器属性允许设置源角色和多重性,如前所述,这些属性会指定每个机箱实例的名称和可能的部件数量。
在图中,建模者通过SysML模块定义工具箱中的部件关联明确定义了各部件。
在这张图中,建模者使用了拥有模块的部件隔间来显示底盘模块所拥有的部件。
部件隔间默认显示,但其可见性可以通过图属性在图级别控制,或在单个元素级别通过元素的“上下文可见性”选项在该元素的上下文菜单中控制。在图级别设置可见性会使图中所有元素都符合指定的可见性——无论是显示还是不显示,而在元素级别设置只会影响所选元素。
无论在图、浏览器或其他窗口中编辑,存储库元素都会被更新。在示例中,工程师通过从工具箱中拖拽部件关联创建了图中的部件;作为对此响应,Enterprise Architect创建了三个新的部件,这些部件放置在浏览器的机箱节点下方,如截图所示。
部件关联是最强的关联类型——从最弱到最强的强度连续体为:
对其他模块的引用
如前所述,部件关联是SysML中最强的关系类型,暗示整体承担责任感:
第二个条件意味着一个部件组合的整个末端的多重性总是1..1,可以简写为1。
然而,还有另一种关系,即引用关联(简称引用),可以用来指定模块之间的关系,不依赖于组合或一个模块是另一个模块的一部分。这为创建不同部件层级中的模块之间或任何相互关联的模块之间建立了一种非常有用的机制。例如,主缸和轮缸都与用于填充其储液的制动液有关。轮缸可能与机械师有关,机械师会定期检查气缸是否有泄漏,从而影响制动系统的效能。`
用于描述数量的数值
模块可以具有某种可量化值的属性;例如,机车有功率输出,水库有体积,汽车有颜色,铁路车厢有若干转向架。这些类型可以是定义为数、整数、实数、复数、布尔或字符串的原始类型,如图所示。
工程师、团队或实践社区也可以定义任意数量的值类型,这些值类型可以简单或结构化。这些可以基于任意数量的单位制,例如国际单位制(SI)。设计制动系统的汽车工程师可能会使用多个标准国际单位制值类型和若干派生类型,以及该标准中未定义的其他值。本图展示了如何使用SysML模块定义工具箱中的值类型元素来定义这些值。
值类型有两个定义的属性——quantityKind 和 Unit。这些也可以在Enterprise Architect中建模,从而增强值类型的适用性。工程师会知道类型基于一个数量和定义的单位。图示展示了值类型的这些元素。
10.6 行为特征建模
当系统运行时,作为架构和详细设计一部分定义的模块实例会被实例化。此时,如果某个模块定义了分类器行为,这种行为通常会开始并持续运行,直到该区块被销毁。例如,以我们的停车场系统为例,系统激活后,刷卡机开始工作,其主要行为将生效。此外,模块(尽管本质上是结构性的)还具有用于执行工作的行为特征。总之,在Block的上下文中,行为有两种基本定义,分别是:
模块分类器行为
一个模块具有执行工作的潜力,但其本身是一种相对静态的实体,需要通过某种操作调用、信号接收、状态变化或其他行为触发来启动。模块具有其原生行为或分类器行为的概念,即正式所称的“分类器行为”。该图显示了浏览器窗口中的一个模块,其中包含一个嵌套的活动,该活动将被定义为该块的分类器行为。
要为分类器行为选择该行为,打开属性窗口,通过选择[...]图标并找到相应的行为(活动),如图所示,更改分类器行为属性。
操作作为行为特征
模块可以将操作定义为模块的“肌肉”,因为这些操作承担了系统所需大部分的工作。在Enterprise Architect中,工程师可以从用户界面的多个位置访问操作,但所有这些位置都会打开“Features”窗口,该窗口在“Operations”选项卡上列出操作,如下图所示:
“Features”窗口可用于汇总块所拥有的所有结构和行为特性,包括部件和交互点。创建操作最简单的方法是:在图表或浏览器窗口中选择该块,然后单击功能区中的项目:
设计 > 元素 > 编辑器 > 特征> 操作
只需选择“操作”选项卡并在窗口的一行中添加名称和其他详细信息即可创建操作。可以创建任意数量的操作,每个操作都可以定义任意数量的参数,这些参数用于指定操作的输入和输出。它们的重要性将在本节后续部分讨论,即在介绍活动参数与动作引脚之间的关系时会进一步说明。操作也可以以图形式显示,既可以单独显示,也可以与其他功能一起显示,每种类型都显示在父元素的独立隔间中。
有多种选项可控制操作的显示方式,包括选择不显示整个隔间,或仅显示特定操作而隐藏其他操作。
这将导致选定的操作在图中被隐藏,这是一种非常实用的展示方式,有助于工程师创建聚焦于模块特定方面的图,从而屏蔽或隐藏无关且分散注意力的内容。该图片段展示了隐藏操作后的效果:
在元素级别,也可以对属性执行相同的操作,同时在图级别也提供了类似的功能,用于隐藏特定的操作、属性和标记值。当某个操作出现在多个模块中,并且工程师希望在图中的所有元素上都将其隐藏时,就可以使用图级别的功能。
操作可以以同步或异步两种模式调用,并且根据协调系统行为的行为类型,可以通过多种不同方式启动,包括:
这意味着该操作可以在多种SysML图中进行可视化,并在不同上下文中呈现不同的形式。例如,在序列图中,当消息在“模块”或其他分类器实例之间发送时,该操作将显示为对其中一个模块的传入消息的注解,以表明操作将作为消息的结果进行初始化。Enterprise Architect 允许工程师直接从该图访问模块的操作列表,并支持直接从图中创建操作。
在调用操作动作的情况下,元素的引脚必须按类型和名称与被调用操作的参数进行对齐;Enterprise Architect 可通过“链接到特征”功能帮助您在图上可视化这种映射关系。
信号接收作为行为特征
信号接收是模块的另一个行为特征,但是,与操作相比,信号接收只能被称为异步。信号接收也与操作不同,因为操作重新调用具体标识要调用的操作,而接收信号的实例被认为是对引用该信号的接收object的任何接收的请求,或者它的任何直接或间接概括。通过这种方式,调用元素和接收之间存在一定程度的间接性。接收的参数对应于接收所引用信号的属性,并且这些被认为是接收的“输入”参数。
创建接收的最简单方法是单击图或浏览器窗口中的模块,然后选择功能区项“设计>元素>编辑器>信号接收”。
要创建一个新的接收器,您必须先创建相应的信号,以便将该接收器与之关联。当您创建接收器时,系统会提示您在浏览器窗口中找到相应的信号,如下图所示:
接收操作与操作一样,可以在图中的模块分隔区显示。可以自定义显示方式,隐藏所有接收操作,或配置仅显示特定的接收操作。在此截图中,工程师选择将所有接收操作显示出来,但每个图以及图内的每个模块均可独立进行不同设置。
10.7 其他模块关系
模块是SysML中的关键结构元素,可以参与多种关系。其中一些在我们讨论关联(Associations)时已在早期章节中讨论过。此外,在定义模块时还可以使用其他一些关系。
泛化(Generalization)
在前面的一节中,我们提到部件关联是最强的关联类型,但还有另一种关系——泛化——也非常强,本质上用于建模模块(及其他分类器)属于同一家族。“分类器”一词来源于我们的自然语言,如中文和泰语,它们有一种抽象的方式来分类或分组具有相似特征的名词类别;例如,一条皮带和一条公路是细长的,而莓果和球是圆形的。SysML 也是如此,泛化关系用于对事物进行分类,其结构可以具有任意深度。在很多方面,工程师更自然地反过来解读这种关系,说某物是某物的特化版本。
Enterprise Architect 允许工程师为模块、值类型、信号、接口、活动等创建这些分类层次结构。通常,一个图包含一个单一的类。
可以通过先在工具箱中选择“泛化”图标,然后从更专业的元素拖放到更通用的元素,即可绘制关系。或者也可以使用快速链接器来完成此操作。
当一个模块参与泛化层次结构并拥有多个特化时,从该模块出发的连接线可能会变得杂乱。Enterprise Architect 提供了一种机制,可将线条样式更改为多种样式中的任意一种,但其中最有用的样式是垂直对齐树状样式,它将关系的首部合并,并允许其尾部平行对齐。
泛化带来的一个有用语言机制是,特化元素继承了通用元素的结构和行为特征。到目前为止,在示例图中,工程师选择不显示这些继承特征,但可以通过元素属性表的隔间部分设置它们显示。
结果将是专用模块将显示从父模块继承的属性和操作。这些将按父模块的名称分组显示。这种机制在软件工程中被广泛使用,但对系统工程师也很有用,其中专业模块由于是“家庭成员”而自动继承其父级的特征。就像在人类家庭中,一个专门的模块(孩子)可以覆盖从父母那里继承的结构或行为特征。
模块基于某些标准,可以使用这个泛化来建模,这是一种用于定义家庭成员资格的机制。
依赖(Dependency)关系
依赖关系是一种实用但语义较弱的关系。它是工程师关系工具箱中的“棋子”,通常在建模初期使用,此时系统元素之间的关系细节尚未分析或根本不清楚。该关系用于表示:关系末端的元素(客户端)在某种程度上依赖于关系箭头起点的元素(供应商)。初学者建模者可能会误将此关系画成反向,因为人们普遍认为数据流是从供应商流向客户端的。一旦理解了该关系的语义,并意识到该关系本身并不说明数据流动的方向,这种错误便不会再次发生。
有多种类型的依赖关系,Enterprise Architect 都支持这些类型。可以通过在工具箱的“SysML 块关系”页面中选择“依赖”图标,然后点击客户端(尾端)元素,并将光标拖动到供应商(箭头末端)元素上来创建连接器。此外,也可以使用所选图示元素右上角的快速链接箭头来创建连接器。创建关系后,可在连接器的属性窗口中选择一种特征(stereotype),以使依赖关系更加具体。此截图显示了所有可用的特征,其中一些特征用于不同类型的元素之间,而不仅仅是块;例如包(Packages)和需求(Requirements)。
模块与活动之间的分配
分配关系可以在多种情况下使用,但它特别适合表达两个最典型的行为和结构元素——即活动和模块之间的基本关系。这类似于我们的自然语言,在动词中没有执行动词描述动作的名词,动词就毫无意义。这种类型的分配称为功能分配,工程师通过寻找能够执行活动描述行为的块来弥合系统这两个方面之间的界限。
在这张图中,工程师创建了两个功能分配关系,描述了活动验证进入者中指定的工作将如何执行。其中一个关系指向相机系统,该系统用于拍摄车辆的牌照,以确定该车辆是否已获准进入;另一个关系指向读卡器模块,用于判断持卡人与停车场之间是否存在关联。
10.8 交互点建模
模块及其由模块所定义的部件存在于一个环境中,并会与该环境以及其中包含的其他元素进行交互。总体而言,SysML 提供了一种称为“交互点”的语言结构,这些交互点位于元素边界上,作为与所属元素通信的入口和出口端口是一种交互点,为模块提供一种机制来揭示其行为——无论是它本身拥有的行为,还是由其部件提供的。端口由放在模块或部件边界上的一个小矩形(通常是正方形)表示。SysML目前支持两种端口类型,旨在最终取代早期的流端口和标准端口概念:
Enterprise Architect 对这两种类型的端口均提供完整支持,并且与早期的标准端口和流端口具有向后兼容性(这些端口仍可使用,但在标准的后续版本中将被弃用)。
一旦创建了模块定义图并放置了模块,就可以通过以下方式创建端口:
无论选择哪种方法,端口都会自动放置在模块的边界上,并可移动到所需位置并命名。请注意,端口也可以通过“设计”功能区的“元素”面板添加。此屏幕截图显示的是一个示意图的部分,其中包含两个带有方向指示器的端口元素。这两个端口分别被命名为“in”和“out”,并标注了“Fluid”,以表示到达该端口的项类型。
端口可以包含接口,也可以嵌套其他端口;Enterprise Architect 提供了一个实用功能,允许工程师自定义端口大小,从而将小方块有效转换为小矩形。
接口与端口
接口是一种封装模块所提供的服务组的有用方式,可为客户端提供简单的方式来展示这些服务。接口的外观与模块相同,可以定义操作和接收器,但不包含属性(即Properties)。
可以通过从工具箱页面拖动“接口”图标来创建一个接口。通过在接口的上下文菜单中选择相应的功能,可以添加行为特性。
另一种创建接口操作的简便方法是:在图或浏览器窗口中选择“模块”,然后点击功能区中的项:
设计 > 元素 > 编辑器 > 功能 > 操作
只需选择“操作”选项卡并在窗口的一行中添加名称和其他详细信息即可创建操作。可以创建任意数量的操作,每个操作均可定义任意数量的参数,以指定该操作的输入和输出。其他行为功能——接收操作——可使用“接收”选项卡以类似方式添加。这些项目均可通过按<Ctrl>键配合上下箭头键进行重新排序。
接口可以添加到端口上,端口是统一建模语言中常见的机制,用于发布端口所提供的服务。接口主要有两种基本类型:
在图中,某个模块的边界上选中一个端口时,可像添加其他结构元素一样添加接口——通过该端口的上下文菜单项进行操作:
通过这种方式添加的接口必须由一个正确的接口类型(即被标注为 <<interface>> 的元素)来定义。可以通过先在图中选择该接口,然后从接口的上下文菜单中选择“属性”窗口来实现。之后可以为该接口命名,并使用 [...] 图标来导航或搜索该接口元素。此图展示了信号注册接口的创建步骤。
10.9 使用值类型建模数量
一个模块可以具有称为值属性的简单属性,这些属性定义了表示标量或矢量数量的模块特征。值用于表达有关模块的信息,并为模块实例中输入实际数值提供一个位置。例如,一个储罐可以定义直径、高度和体积等属性。值类型使工程师能够创建一种通用的方式来量化属性;例如:
该图展示了可在Enterprise Architect中定义并应用于模块中任意数量属性的多种不同值类型。
值类型的目的是允许工程师、团队或行业定义标准类型,这些标准类型可以重复使用来表征为任意数量的模块定义的值属性。例如,“千克”这一值类型可用于表示火车重量、公交车重量,或两者中的座位容量等值属性。
这些值类型,顾名思义,具有描述属性数量的数值;它们可以通过“特征”窗口中的“属性”选项卡进行定义,如下图所示。
例如,表示火车和公共汽车的两个模块可以定义一个名为“重量”的属性,并将其数据类型设置为“千克”。如果“座位容量”等属性使用的是“整数”等简单类型,则可以直接在“类型”下拉菜单中选择;但如果“类型”基于值类型,则需通过下拉菜单中的“选择类型…”选项进行选择。
在Enterprise Architect中,具有定义属性(Value Property)的模块实例可以为该属性指定实际值。例如,每辆公交车和火车的实例,若具有特定的型号编号,其重量可被设定为不同的数值。其他属性如“座位容量”可被定义为原始类型“整数”,这些属性也可针对特定的“车厢”实例进行设置。
Enterprise Architect允许工程师通过“特征”子菜单中的“设置运行状态”选项,为模块实例的每个设置每个定义属性的值。
属性值(插槽)可以显示在图上,使工程师能够创建出有说服力的模块实例示例或目录,如下图所示。