【UML用户指南】-09-对基本结构建模-类图

目录

1、概述

2、引入

3、过程

4、常用建模技术

4.1、对简单协作建模

4.2、对逻辑数据库模式建模

4.3、正向工程


1、概述

类图是面向对象系统建模中最常见的图。

类图显示一组类、接口、协作以及它们之间的关系

类图用于对系统静态设计视图建模。其大多数涉及到对系统的词汇、协作或模式的建模。

类图是构件图和部署图的基础,只是它们分别包含构件和结点,而不是类

类图不仅对结构模型的可视化、详述和文档化很重要,而且对于通过正向工程与逆向工程构造可执行的系统也很重要。
 

2、引入

当建造房屋时,要从包括基本构造块(如墙、楼板、门、窗、天花板和托梁)的词汇开始。这些事物主要是结构性的(墙有高度、宽度和厚度),但也具有一些行为性(不同种类的墙支撑不同的负重,门能开关,对无支撑的楼板跨度有一些约束)。事实上,不能孤立地考虑结构特征和行为特征,而必须在建造房屋时考虑它们如何相互作用。建造房屋的过程中需要以所要求的独特和合意的方式装配这些事物,以满足所有的功能和非功能的需求。所创建的用来可视化房屋并向承包商详述细节的蓝图,实际上是对这些事物以及它们之间的关系的图形描述。构造软件也有许多与此相同的特点,

所不同的只是由于软件是“软”的,所以能够从草图定义自己的基本构造块。可以用UML的类图对这些构造块的静态方面和它们之间的关系进行可视化,并描述其构造细节

3、过程

类图主要支持系统的功能需求,即系统要提供给最终用户的服务。

3.1、对系统的词汇建模

哪些抽象是考虑中的系统的一部分

哪些抽象处于系统边界之外

用类图详述这些抽象和它们的职责。

3.2、对简单协作建模

协作是一些共同工作的类、接口和其他元素的群体,它们提供的一些合作行为大于所有这些

元素的行为之和。例如,在对分布式系统中的事务语义建模时,不能仅仅盯着一个单独的类

来推断要发生什么,而要由相互协作的一组类来实现这些语义。用类图对这组类以及它们之

间的关系进行可视化和详述。

3.3、对逻辑数据库模式建模

将模式看成数据库的概念设计的蓝图。在很多领域中,要在关系数据库或面向对象数据库中

存储持久信息。可以用类图对这些数据库的模式建模。
 

4、常用建模技术

4.1、对简单协作建模

例如,下图展示了一组取自一个自主机器人实现的类。该图关注使机器人沿着一条路径移

动的机制所涉及的类。

图中有一个抽象类(Motor),它有两个泛化的具体子类,分别是SteeringMotor和MainMotor。

这两个类都继承父类Motor的5个操作。而这两个类又被显示为另一个类Driver的部分组合

类PathAgent与Driver有一对一的关联,与CollisionSensor有一对多的关联。

虽然PathAgent被给定了系统职责,但此处没显示出它的任何属性和操作。

在这个系统中还包含更多的类,但图只关注那些被直接包含在移动机器人中的抽象。在

其他的图中会看到一些同样的类。例如,尽管此图中没有显示,但类 PathAgent 至少和另外

的两个类(Environment和GoalAgent)在更高层次机制上相互协作,用于管理机器人在特

定时刻可能有冲突的目标。类似地,尽管此图也没有显示,但类CollisionSensor和Driver

(以及它的部分)与另一个类(FaultAgent)在某种机制中协作,该机制负责持续地检查机

器人的硬件故障。通过在不同的图中关注每一个这样的协作,就从几个角度提供了可理解的

系统视图。


4.2、对逻辑数据库模式建模

下图显示了一组取自某学校的信息系统的类。本图所显示的这些类的细节足以构造一个物理数据库。

从图的左下部开始,有3个名为Student、Course和Instructor的类。

Student和Course之间有一个说明学生所听课程的关联。

此外,每个学生可以听的课程门数不限,听每门课程的学生人数也不限。显示了这5个类的属性。

注意,所有的属性都是简单类型的。

当对模式建模时,一般要用显式的关联而不是用属性对任何非简单类型的关系建模。

4.3、正向工程

通过到实现语言的映射而把模型转换为代码的过程。

由于用UML描述的模型在语义上比当前的任何面向对象编程语言都要丰富,所以正向工程将

导致一些信息丢失。

下图是一个简单的类图,它描述了一个职责模式链的例子。这个特殊的实例化包含3个类

:Client、EventHandler 和 GUIEventHandler。

Client 和 EventHandler 为抽象类,而GUIEventHandler 是具体类。

EventHandler 有这个模式(handleRequest)所期望的通常操作,但是在这个例子中增加了两个私有属性。

对类EventHandler进行正向工程将产生如下代码

public abstract class EventHandler {

        EventHandler successor;

        private Integer currentEventID;

        private String source;

        EventHandler() {}

        public void handleRequest() {}

}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/848977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java守护线程介绍

在Java中,守护线程(Daemon Thread)是一种特殊类型的线程,它在后台默默地运行,为其他线程提供服务。当 JVM 中只剩下守护线程时,JVM 会退出。这意味着,守护线程不应该执行关键的任务,…

【NOIP2020普及组复赛】题3:方格取数

题3:方格取数 【题目描述】 设有 nm 的方格图,每个方格中都有一个整数。现有一只小熊,想从图的左上角走到右下角,每一步只能向上、向下或向右走一格,并且不能重复经过已经走过的方格,也不能走出边界。小熊…

嵌入式学习记录6.6(拷贝构造/友元函数/常成员函数)

一.拷贝构造函数和拷贝赋值函数 1.1拷贝构造函数功能,格式 拷贝构造函数是一种特殊的构造函数,用来将一个类对象给另一个类对象初始化使用的。 1> 用一个类对象给另一个类对象初始化时,会自动调用拷贝构造函数。 2> 当一个类对作为函数的实参&…

微信小程序uniapp的父子之间的通信传递

1.父传递给子信息 my-test是子组件 demo是父组件 这是定义在父组件中的的info信息 要将这个传递给子组件 子组件在properties 中接收父组件传递来的数据 msg type 是类型 value是默认值,当父组件没有传递数据时,就会默认使用value的数据 子组件…

设备上CCD功能增加(从接线到程序)

今天终于完成了一个上面交给我的一个小项目,给设备增加一个CCD拍照功能,首先先说明一下本次使用基恩士的CCD相机,控制器,还有软件(三菱程序与基恩士程序)。如果对你有帮助,欢迎评论收藏&#xf…

顶顶通呼叫中心中间件-同振和顺振配置步骤(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-同振和顺振配置步骤(mod_cti基于FreeSWITCH) 一、拨号方案配置 1、同振 win-ccadmin配置方法 1、点击拨号方案->2、在红框中输入同振->3、点击添加->4、根据图中配置,配置好了等待一分钟即可生效。 web-ccadmin配置方法 2、顺振…

【Python】教你彻底了解 Python中的文件处理

​​​​ 文章目录 一、文件的打开与关闭1. 打开文件2. 关闭文件3. 文件模式 二、文件的读写操作1. 读取文件内容2. 写入文件内容 三、使用上下文管理器四、异常处理五、二进制文件操作1. 读取二进制文件2. 写入二进制文件 六、实际应用示例1. 处理CSV文件2. 处理JSON文件 结论…

kafka安装流程

安装kafka前需要安装zookeeper zookeeper安装教程 1.新建一个logs文件夹 2.修改配置文件 3.修改listeners参数 4.以管理员身份启动kafka服务 .\bin\windows\kafka-server-start.bat .\config\server.properties 如果报 输入行太长。 命令语法不正确。 解决方案如下&#x…

Java 【数据结构】 TreeSetTreeMap(二叉搜索树详解)【神装】

登神长阶 第八神装 TreeSet 第九神装 TreeMap 目录 💉 一.二叉搜索树 🩸1. 定义 💊2. 基本操作 🩹3. 插入操作 🩼4. 查找操作 🩺5. 删除操作* 🩻6. 遍历操作 🪒7.性能分析 …

引用(C++)和内联函数

前言&#xff1a;本文主要讲解C语法中引用如何使用和使用时的一些技巧 基本语法 引用就是取别名 #include <iostream> using namespace std; int main() {int a 10;int& b a;//给a取别名为bcout << a << endl;cout << b << endl;return 0…

MogoTemplate基本入门(Mongodb数据库基本增删改查)

nosql 因为没有标准的 sql&#xff0c;各有各的操作方式&#xff0c;所以学习成本比较高。实际应用也不会去命令行直接操作&#xff0c;而是用编程语言的 api。 所以我们可以简单了解一下Mongodb&#xff0c;然后用java的Api去操作就行了 没必要花很大功夫在命令行上操作执行…

【机器学习】GLM4-9B-Chat大模型/GLM-4V-9B多模态大模型概述、原理及推理实战

​​​​​​​ 目录 一、引言 二、模型简介 2.1 GLM4-9B 模型概述 2.2 GLM4-9B 模型架构 三、模型推理 3.1 GLM4-9B-Chat 语言模型 3.1.1 model.generate 3.1.2 model.chat 3.2 GLM-4V-9B 多模态模型 3.2.1 多模态模型概述 3.2.2 多模态模型实践 四、总结 一、引言…

parseInt函数

貌似遇到问题了&#xff0c;在Java中&#xff0c;parseInt方法是java.lang.Integer类的一个静态方法&#xff0c;它用来将字符串转换为基本数据类型int。如果字符串不能被解析为有效的整数&#xff0c;parseInt会抛出一个NumberFormatException。 原来是取整串转换&#xff0c;…

Vue随笔记

1 Idea里面使用Vue Idea里面要安装Vue插件 File - New - Project - JavaScript - Vue.js 然后出现&#xff1a; "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npx-cli.js" --ignore-existing --package vue/cli…

Keil中for(int i=0;;)报错

一、报错 二、报错原因 定义变量i报错 这是C的写法&#xff0c;C语言不支持 用C语言格式应该为 int i0; for(int i;;;) {} c99支持第一种写法&#xff0c;如果使用gcc&#xff0c;可以指定c99模式。 三、指定c99模式

cv2.imwrite路径中存在中文时出现乱码问题

cv2.imwrite(path, img) 在写入包含中文的路径的时候&#xff0c;保存的文件名称为乱码。 解决办法&#xff1a; cv2.imwrite(path,image)将上面的代码修改为以下代码&#xff0c;可以避免出现中文乱码。 cv2.imencode(.jpg, image)[1].tofile(path)

搜索与图论:图中点的层次

搜索与图论&#xff1a;图中点的层次 题目描述参考代码 题目描述 输入样例 4 5 1 2 2 3 3 4 1 3 1 4输出样例 1参考代码 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n, m; int h[N], e[N]…

【Linux网络】传输层协议 - UDP

文章目录 一、传输层&#xff08;运输层&#xff09;运输层的特点复用和分用再谈端口号端口号范围划分认识知名端口号&#xff08;Well-Know Port Number&#xff09;两个问题① 一个进程是否可以绑定多个端口号&#xff1f;② 一个端口号是否可以被多个进程绑定&#xff1f; n…

德国西门子论未来质量管理 - 如何与明天相遇?

未来制造业的质量 -- 如何用软件方案满足质量要求 作者&#xff1a;Bill Butcher 翻译&编辑&#xff1a;数字化营销工兵 【前言】在Frost&Sullivan最近发表的一份白皮书中&#xff0c;他们讨论了制造业的质量投资。质量是制造过程的关键要素&#xff0c;但似乎比其他…

【贡献度分析(帕累托图)】

文章目录 前言一、贡献度分析是什么&#xff1f;二、使用步骤1. 准备数据2. 排序数据3. 绘制帕累托图4. 分析结果5. 实际应用 三、示例代码 前言 贡献度分析也称为帕累托分析。它可以帮助我们理解数据集中各个因素对整体影响的程度&#xff0c;从而优先处理最重要的因素&#…