软件工程知识点总结(3):需求分析(二)——分析模型建模

news2024/12/24 3:53:55

1 类(Class)、对象(Object)和它们之间的关系是面向对象技术中最基本的元素。类图 技术是 OO 方法的核心。 类图标加上它们之间的关系就构成了类图。

说明:类图描述类和类之间的静态关系。它不仅显示了信息的结构,同时还描述 了系统的行为。类图中可以包含接口,包,关系等建模元素,也可以包含对象等 实例。

类的表示:类是具有相似结构、行为和关系的一组对象的描述符。

类的命名:由字母、数字、下划线组成的惟一的字符串;大写字母开头,每个单 词以大写开始,避免使用特殊符号

类名的两种表示方法:简单名          Order

                                    路径名          java::awt::Rectanget        businessRule::Order      包名::类名

类的属性:属性名的第一个字母小写;

属性的定义格式:[可见性] 属性名 [:类型] [=初始值] [{特性}]

属性的可见性,四类:

       public(+): 即模型中的任何类都可以访问该属性.

       private(-):表示不能被别的类访问.

       protected(#):表示该属性只能被该类及其子类访问.

       Package (~):这个类只能由同一包中的其他类访问

类的方法的命名规范:第一个字母小写。

类的方法的定义格式:[可见性] 方法名 [(参数列表)] [:返回类型]

       例: +hide():Boolean        “+”:public

               -attachXWindow(xwin:XwindowPtr) “-”:private

               #create()                    “#”:protected

类的职责:职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么 样的义务。在 UML 中,可以写在 document 中。

类图:接口、关系、注释、约束、包

接口: 是一种类似于抽象类的机制,是一个没有具体实现的类,只声明抽象方法。 接口可以实现多态;

2 关系:类和类之间的线就是关系(重点)

类与类之间关系划分为:1、关联:包含普通关联、自反关联、限定关联、关联 类 2、聚集:包含聚合、组合 3、依赖 4、泛化 5、实现

3 关联表示两个类的对象之间存在某种语义上的联系。长期的,稳定的。

多重性:某个类的对象可以和另个类的多个对象联系

关联:类与类之间稳定的关系(关系需要存储)

详细设计阶段:

       数据库中: 用户表       订单表       订单中含用户 id

       顾客表 :顾客 id       name       address

       订单表: 订单 id       商品 id       time       顾客 id

同类不同对象关联——自反关联:

抽取出类: “人”

类的属性: 身份证号、年龄、婚否、配偶

数据库:每人一条记录,该记录必有一个字段为配偶身份证号

       居民表 :居民 id       name       age       address       配偶 id

自反关联应用广泛,某些场合能够实现更加灵活的系统结构。

限定关联:利用限定词把一对多关系简化成了一对一关系。

例如:某操作系统中一个目录下有许多文件,一个文件仅属于一个目录,在一个 目录中文件名唯一确定一个唯一文件。

关联类:作为其他两个类之间的关联关系一部分的类,是为了说明这两个类之间 更多的关联信息。关联类与一般的类一样,也有属性、操作和关联。

关联:稳定的,长期的,为关联关系。表现在代码实现中,一个对象会作为另一 个对象的属性是关联。

关联关系也可以是单向关联,也可以是双向关联。

聚集:聚集是关联的一种特殊情况。聚集表示类与类之间的关系是整体与部分的 关系。聚集分为聚合和组合。

如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则 该聚集称为共享聚集,也叫聚合。

聚合图示符号:在表示关联关系的直线末端紧挨着整体类的地方画一个空心菱形。

设计中 :人的集合作为课题组的一个属性。课题组集合作为“人”类的一个属性 数据库操作中,课题组的删除,不涉及到人员删除。

4 如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消 失(或失去存在价值了),则该聚集称为组合。

例如:记录员工基本信息。员工的地址包含多类信息:email,住所,电话等。 为了处理方便,员工与地址,抽象为两个类,为一对多。

数据库操作中,员工的删除, 涉及到地址删除

5 聚合:“弱”。如果部门没有了,员工也可以继续存在;

组合: “强”。如果部门没有了,员工也不再存在。

聚合与组合的代码表现:

这两种关系的区别是:

(1)构造函数不同

       聚合类的构造函数中包含另一个类的实例作为参数。因为构造函数中传递另一 个类的实例,因此大雁类可以脱离雁群类独立存在。

       组合类的构造函数包含另一个类的实例化。因为在构造函数中进行实例化,因 此两者紧密耦合在一起,同生同灭,翅膀类不能脱离大雁类存在。

(2)信息的封装性不同

       在聚合关系中,客户端可以同时了解 GooseGroup 类和 Goose 类,因为他们是 独立的。

       在组合关系中,客户端只认识大雁类,根本不知道翅膀类的存在,因为翅膀类 被严密地封装在大雁类中。

6 依赖:依赖关系描述两个类之间的使用关系: 两个类之间是没有关系的,但是 一个类的实现需要另一个类的协助,这就产生了依赖。

依赖关系的代码表现:局部变量、方法参数、对静态方法的调用 注意:依赖关系只会表现在方法中,不会增加属性

7 泛化:UML 中的泛化关系就是通常所说的继承关系,它是通用元素和具体元素 之间的一种分类关系。具体元素完全拥有通用元素的信息,并且还可以附加一些 其他信息。

在 UML 中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通 用元素。

没有具体对象的类称为抽象类,抽象类一般作为父类,用于描述其他类(子类) 的公共属性和行为。在类名、操作下方附加一个标记值{abstract}表示;也可用斜 体表示类名称和属性、方法。抽象类或者抽象操作的名字用斜体表示

实现:对应于类和接口(箭头指向接口)之间的关系

总结:两个类之间,分析是否为泛化、实现、依赖。如果不是,分析是否是聚合、 组合。如果不是,考虑是否存在关联类、自身关联。如果不是,为普通关联。

请用类图描述公司与雇员的关系:

8 顺序图是动态交互图,描述一个用例中对象间的交互活动,它关注对象之间消息 传送的时间顺序。

目的:通过顺序图来对执行者和系统的交互过程进行建模,方便用户更好地理解 系统的工作流程。

在 UML 中,我们将顺序图分为两类 :分析模型(分析阶段)、设计模型(设计 阶段)。

在系统分析时,顺序图可显示不同的业务对象如何交互及消息交互的顺序。一般 使用用户熟悉的业务语言来进行系统描述。

顺序图组成元素:对象-- Object、生命线-- Lifeline、控制焦点(激活)-- Activation、 消息-- Message

对象:对象排列在上方,通常将发起交互的对象放在左边,将接收消息的对象放 在右边。

对象的命名方式有三种(主要第二种):显示对象名和类名 、只显示类名(匿 名对象)、只显示对象名(不关心类)

9 生命线:表示对象存在的时间。如果对象生命期结束,则用注销符号表示。

控制焦点(激活期):对象执行某个动作的时期。

消息: 对象间通过相互发消息来实现交互,一个对象通过发送消息请求另一个 对象做事。消息从源对象指向目标对象。消息一旦发送便将控制从源对象转移到 目标对象。

源对象某方法中有代码:目标对象.message(para);比如:矩形和线段

UML 中 5 种消息 :调用(同步消息)、发送(异步消息)、返回、创建、销毁

(1)调用消息(同步消息):发送者把消息发送后,等待,直到接收者返回控 制。

(2)发送消息(异步消息):消息发送后,发送者继续操作,不等待。

异步:消息可以是一个信号或一次操作调用,收到消息即为事件。可以有两种消 息,一种是从发送者向接收者发送信号,另一种是由调用者调用接收者的操作。

(3)返回消息:表示消息的返回。同步消息本身就隐含一个返回,一般情况下 可以省略返回消息,但如果需要强调明确表示返回的结果值,则可以使用返回消 息。异步返回需要返回消息。

自调用:表示某对象调用自己的操作。

(4)创建:通常利用构造方法来实现,对象一创建,生命线就开始了。

(5)销毁:生命终止符号用一个较大的叉形符号表示。

注意:在需求分析阶段,顺序图的“消息”上可以是(1)“数据”(2)“操作(传送 的数据)” 。消息可以用文字表达,也可用英文。在设计阶段,顺序图的“消息” 上,必须为“操作(参数,..)”。 消息用英文表示

顺序图:又称时序图。通常,每一个用例建立一张顺序图。 也可以,一个用例 建立几张顺序图。 顺序编号: ——在每个消息的前面加上一个用冒号隔开的顺序号来表示其顺序。

嵌套编号:——把属于同一个对象发送和接收的消息放在同一层进行编号。

嵌套编号应用:

A 要完成工作,需要 1、2、3 步。
Class A{
work(){1;2 步借助于 B.work;3;}
}
Class B{
workB(){2.1;2.2;2.3 步借助于 C.work;}
}
Class C{
workC(){...}
}

处理过程有顺序、选择、循环通过交互片段实现选择、循环。每个交互片段都有 一个操作符,操作符决定了交互片段的执行方式。

(1)表示分支的操作符:alt:支持多条件       opt:支持单条件

(2)表示循环的操作符:loop       循环次数和监护条件表达式表示执行次数

10 分析模型建模:

任务:对获取的用例模型进行理解、分析,找出描述问题域和系统责任所需要的 类及对象,建造分析模型。

分析模型:对象模型(类图,对象图)、动态模型(顺序图、状态图)

常用建立对象模型方法:(1)名词识别法 (2)类-职责-协作法 CRC( Class Responsibility Collaboration )

目标:对需求进行分析,寻找实体类及关系从现实世界可以抽象出来的。 (1)类的对象对应着现实世界中的“事物”。(2) 对必须存储的信息和相关 行为建模的类。 也可概要的称为:实体类。通常都是永久性的

1)文档来源 (基于用例模型):补充的需求规格说明、用例文档、项目说明 文档、其他文档

2)建模步骤:①从文档中寻找类(名词),确定类的含义和职责;②定义类的 属性(名词);③确定类之间的关系;④确定操作(动词);动态模型辅助寻找 (顺序图、状态图)——“操作”也可放到设计阶段完成⑤精化类和类间的关系;

作为类的名词的特点:

       人员:系统需要保存或管理其信息的人员(如录像商店的会员、图书馆的读者), 或在系统中中扮演一定角色的人员(如录像商店的职员、论文评阅教师)。

       组织:在系统中发挥一定作用的组织机构(如录像商店的连锁店,医疗保险系统 中的医院,学校中的系)。

       物品:需要由系统管理的各种物品(如录像商店的商品、图书),包括无形事物 (如学校的一门课程、毕设题目)。

       设备:在系统中被使用或由系统进行监控的设备、仪器等,系统运行中的硬件设 备(如打印机)除外。

       事件:需要由系统长期记忆的事件(如在自动柜员机上的每次取款事件、每次借 书事件)。

11 分析类代表了系统中具备职责和行为的事物的早期概念模型,这些概念模型最终 会转换为设计模型中的类或子系统。

定义分析类的目标:从系统的角度,明确说明每个分析类的职责和属性及类之间 的关系,从而构造系统的分析类视图;根据这些视图来描述和理解目标系统,从 而为后续的设计提供基本的素材。

认识 MVC 三层架构:

       在系统分析的早期,倾向于使用一种通用的分层策略——MVC 三层架构。

       系统中的类对应三个层次:视图(View)、控制器(Controller)和模型(Model)。 视图:

视图(View):面向用户显示交互(接收用户输入的数据,展示数据给用 户)

模型(model): 是应用程序的主体部分,由多个类组成。主要包括业务逻辑模块 (完成软件的功能)和数据模块(对数据的存取)。

控制器(Controller):接收来自视图(view)的请求, 并交给模型(model)进行处 理。将模型(model)处理结果传递给视图(view)。它只是接收请求并决定调用哪个 模型去处理请求,然后再确定用哪个视图来显示返回的数据。UML 中分析模型 采用的就是 MVC 模式。

对象系统中的类相应的对应 MVC 架构的三个层次:边界类 Boundary,控制类 Control, 实体类 Entity 。它们统称分析类。

12 识别分析类:

       边界类(Boundary class)位于系统与外界的交界处,处于系统最上层,处理系统环 境和系统内部间的通信。

       边界类分为两类:用户界面类:系统与外部进行交互的类,在分析阶段关注于为 用户提供哪些操作,如用户输入数据,展示数据给用户。系统/设备接口类:系 统与外部系统或设备之间交互的接口类,在分析阶段关注交互的协议。

控制类 Control: 处于中间层,封装上层的边界类和下层的实体类之间的交互行 为,是整个用例行为的协调器。控制类可以有效的将边界对象和实体对象分开, 更适应系统边界对象的变更; 将用例所特有的行为与实体对象分开,使实体对 象有更高的复用性。

控制类 Control 特点:独立于外部环境,不依赖于环境的变更;定义控制逻辑和 事务逻辑;实体类内部结构或行为发生变更时控制类不会有大的变更。

实体类(Entity class):代表系统的核心概念,来自对业务中的实体对象的抽象,用 于记录系统所需要维护的数据和对这些数据的处理行为。

通常,实体类不是某一个用例实现所特有的(及一个实体类会跨越多个用例)

分析类的重要性:分析类用于获取系统中主要的“职责簇”,是系统必须处理的主 要抽象概念的“第一个关口”,之后对系统的“高级”设计都是基于此进行。分析类 是从功能性需求向计算机实现转化过程中的“第一关口”。分析类可以产生系统的 设计类和子系统。这意味着计算机实现是可以通过某种途径“产生”出来的,而不 是拍着脑袋拍出来的。

13 OOA 动态模型-状态图: 一个 UML 状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复 杂行为。

作用:(1)描述一个特定对象的所有可能状态及其引起状态转移的事件。(2)描述 业务领域的业务流程: 在什么状态下,有什么事件发生,导致了什么后果。

状态的动作;do 事件则指定在该状态下的动作。如“do/看手机”

需要时可以为事件指定参数表。活动表中的动作表达式描述应做的具体动作。

事件表达式的语法:事件说明[守卫条件]/动作表达式

事件说明的语法为:事件名(参数表)。 守卫条件是一个布尔表达式。如果同时使用事件说明和守卫条件,则当且仅当事 件发生且布尔表达式为真时,状态转换才发生。如果只有守卫条件没有事件说明, 则只要守卫条件为真状态转换就发生。

事件说明和[守卫条件]至少写一个,动作表达式可以没有。

14 事件(Event)细述:

       事件:是对一个时间和空间上占有一定位置的有意义的事情的规格说明。

       事件的类型 :信号事件、调用事件、变化事件、时间事件

(1)信号事件(signal event): 对象之间可以通过发送信号和接收信号实现通信。所谓信号,是指由一个对象异 步的发送、并由另外一个对象接收的一个已命名的对象。

信号事件表示对象接收到某个信号。

(2)调用事件(call event): 一个对象请求调用某个对象的成员方法。如 turnOn

(3)变化事件(change event): 频繁的测试表达式,只要表达式由假变为真,事件就会发生。用关键字 When, 后面跟布尔表达式。

(4)时间事件(time event): 满足 一个绝对时间的到达,或者相对时间的消耗。用关键字 After 表示

绘制状态机图的一般步骤是: 1.对对象进行分析,寻找主要的状态; 2.寻找外部事件,以便确定状态之间的转换; 3.详细描述每个状态和转换; 4. 把简单状态图转换为复合状态图。

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

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

相关文章

力扣第42题 接雨水

前言 记录一下刷题历程 力扣第42题 接雨水 接雨水 原题目:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…

二进制方式部署K8s高可用集群

1 二进制方式部署K8s高可用集群 1.1 kubeadm 和二进制安装 k8s 适用场景分析 kubeadm 是官方提供的开源工具,是一个开源项目,用于快速搭建 kubernetes 集群,目前是比较方便和推荐使用的。kubeadm init 以及 kubeadm join 这两个命令可以快速…

MySQL—死锁

什么是死锁? 好比是两个事务都在等待对方释放锁,之后进行下一步操作,但是最后双方都没有释放资源,所以导致一直处于等待的状态。 但是服务器不会让死锁的状态一直持续,会关闭其中一个影响较小的事务(右边的…

紫光展锐完成Android 15同步升级,驱动技术创新与生态共赢

近日,紫光展锐宣布,展锐5G移动平台T820、T770、T765、T760、T750以及4G平台T620、T619、T616、T615、T612、T606,完成Android 15同步升级。相较于过往Android发布,今年同步升级Android 15主要有三大提升: ■ 紫光展锐实…

SaToken认证授权快速上手

SA-TOKEN认证授权快速上手 SaToken简介认证授权实现1 创建5张测试基础表2 配置文件3 Sa-Token的全局拦截器4 自定义权限认证接口扩展5 SaToken用户控制层 测试验证用户2登录验证权限用户1登录验证权限项目代码结构 SaToken简介 SaToken 是一个轻量级 Java 权限认证框架&#x…

【信号】信号的产生

信号的概念 什么是信号?我们生活中的红绿灯,闹钟,外面电话等等这些都是信号,我们是怎么认识这些信号的,我们认识这些信号,并且知道这些信号的处理方法,对于进程来说,也会认识相应的…

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理 控制平面(Control plane) kube-apiserver etcd kube-scheduler kube-controller-manager cloud-controller-manager 小结 节点组件(Node) container runtime Pod kubelet ku…

Chrome、Edge、360及Firefox浏览器加载多个ActiveX插件的介绍

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

vc-align源码分析 -- ant-design-vue系列

vc-align源码分析 源码地址:https://github.com/vueComponent/ant-design-vue/tree/main/components/vc-align 1 基础代码 1.1 名词约定 需要对齐的节点叫source,对齐的目标叫target。 1.2 props 提供了两个参数: align:对…

成为优秀程序员-代码篇

1. 序言 刚毕业参加工作时候,公司正在快速扩张,我入职的时候组内刚刚招了一大波人,当时leader提出集体cr代码来拉齐团队内的编码规范,每当有对于相对重要改动大的项目就会集体cr代码,老板想法初衷是好的,但…

esp32 gpio 初始化不同类型的管脚,产生脉冲,发生中断

硬件:D4与D18 连接,二极管接D15与3.3v脚 图片 二极管同期性点亮,间隔1秒 参考esp32官网程序,从此程序可以看出,中断程序没有处理任何数据,只是把中断发生的事件存入队列。而用另一新线程来处理中断事务。…

GNSS CTS GNSS Start and Location Flow of Android15

目录 1. 本文概述2.CTS 测试3.Gnss Flow3.1 Gnss Start Flow3.2 Gnss Location Output Flow 1. 本文概述 本来是为了做Android 14 Gnss CTS 的相关环境的搭建和测试,然后在测试中遇到了一些问题,去寻找CTS源码(/cts/tests/tests/location/src/android/l…

Vue3-05_组件高级

背景 对组件的进一步了解,如组件之间通信等知识点,根据教程实现购物车功能,并修复原本的bug. watch 侦听器 用途 watch 侦听器允许开发者监视数据的变化,从而针对数据的变化做特定的操作。例如,监视用户名的变化并发起请求&am…

大模型AI一体机对行业的帮助

大模型AI一体机,如AntSKPro AI离线知识库一体机,是专门为企业和机构设计的集成系统,旨在提供高效的人工智能服务。这类一体机通常包含预训练的大型机器学习模型,以及必要的硬件和软件资源,以支持复杂的数据处理和分析任…

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storm…

网易云音乐歌单下载器

最近要帮小朋友下载一些小学的诗词mp3,找了各种工具,还是这个好使 yun-playlist-downloader: 网易云音乐歌单下载器 特性 支持歌单 / 专辑 / 电台音质选择下载超时 / 重试再次下载默认跳过已下载部分, 使用 content-length 匹配自定义文件名下载进度显…

【代码随想录训练营第42期 Day53打卡 - 图论Part4 - 卡码网 110. 字符串接龙 105. 有向图的完全可达性

目录 一、个人感受 二、题目与题解 题目一:卡码网 110. 字符串接龙 题目链接 题解:BFS哈希 题目二:卡码网 105. 有向图的完全可达性 题目链接 题解:DFS 三、小结 一、个人感受 对于两大基本搜索: 深度优先搜…

JDBC:连接数据库

文章目录 报错 报错 Exception in thread “main” java.sql.SQLException: Can not issue SELECT via executeUpdate(). 最后这里输出的还是地址,就是要重写toString()方法,但是我现在还不知道怎么写 修改完的代码,但是数据库显示&#…

WebGL系列教程二(环境搭建及初始化Shader)

目录 1 前言2 新建html页面3 着色器介绍3.1 顶点着色器、片元着色器与光栅化的概念3.2 声明顶点着色器3.3 声明片元着色器 4 坐标系(右手系)介绍5 着色器初始化5.1 给一个画布canvas5.2 获取WebGL对象5.3 创建着色器对象5.4 获取着色器对象的源5.5 绑定着色器的源5.6 编译着色器…

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥…