软工导论知识框架(五)面向对象方法学
传统软件工程方法学适用于中小型软件产品开发; 面向对象软件工程方法学适用于大型软件产品开发。

一.四要素
对象+类+继承+传递消息实现通信
二.概念
1.对象:具有相同状态的一组操作的集合,对状态和操作的封装。

2.类:对具有相同状态和相同操作的一组相似对象的定义。( 类是一个抽象数据类型,世界上不存在人类,只存在无数个具体的人类)
3.实例:实例是由某个特定类所描述的一个具体对象。

4.消息: 要求某对象执行某个操作的规格说明。(接收消息的对象、消息名、0或多个变元)
5.方法:对象执行的操作,即类中定义的服务。
6.属性:类中所定义数据,对客观世界实体具体性质的抽象。
7.继承:子类自动共享基类中定义的属性和方法的机制。

8.多态性:
在类等级不同层次可共享一个方法名,不同层次每个 类按各自需要实现这个方法。
A是基类,B和C是A的派生类,多态函数Test参数是A 的指针,Test函数可以引用A、B、C的对象。
- 提高程序可复用性(接口设计的复用,不是代码实现复用)。
- 派生类的功能可被基类指针引用,提高程序可扩充性和可维护性。
9.重载:
(1)函数重载:在同一作用域内,参数特征不同的函数可使用相同的名字。

- 调用者不需记住功能雷同函数名,方便用户
- 程序易于阅读和理解
(2)运算符重载:同一运算符可施加于不同类型操作数上面。
10.与传统方法对比


11.优点
(1)与人类习惯思维方法一致 :对象是对现实世界正确抽象,问题空间和解空间结构一致。而传统方法将实体拆分开来,用数据表达特性,用过程表达行为。
(2)稳定性好:软件系统结构根据问题领域模型建立,功能需求变 化不会引起软件结构整体变化,作局部性修改。
(3)可重用性好 :
传统软件重用技术:标准函数库。 面向对象重用技术:类,派生类和创建类的实例
(4)易开发大型软件产品 封装性好,易于分解,易于合作开发。
(5)可维护性好 稳定性好、容易修改、容易理解、易于测试和调试。
三.UML简介
1.定义 :UML 全称为 Unified Modeling Language(统一建模语言) ,是目前最流行的面向对象建模语言。
2.建模的必要性:对于某种复杂的系统,必须用合理的方式将它表现出来~(建模是捕获系统本质的过程)。建模必须使用标准图形记法。
- 捕获商业流程
- 促进沟通
- 管理复杂性
- 定义软件构架(系统模型独立于设计语言)
- 促进软件复用
3.经典的面向对象方法
- Booch的Booch’93
- Rumbaugh的OMT
- Jacobson的OOSE
- Coad-Yourdon方法等等
4.发展过程
- UML是图示化、说明、构造一个软件系统并生成其文档的标准语言。
- UML独立于开发过程,可与大多数面向对象开发过程配合使 用。
- UML独立于程序设计语言,可用C++、Java等任何一种面向对象 程序设计语言实现。

5.构成:


静态建模:用例图、类图、对象图。
动态建模:顺序图、协作图、状态图、活动图
物理建模:构件图、配置图
6.UML视图:不同的视图突出特定的参与群体所关心的系统的不同方面,通过合并所有五个视图中得到的信息就可以形成系统的完整描述 。

1.用例视图:定义了系统的外部行为,是最终用户、分析人员和测试人员所关心。该视图定义了系统的需求,因此约束了描述系统设计和构造的某些方面的所有其他视图。
2.设计视图:描述的是支持用例视图中规定的功能需求的逻辑结构。它由程序组件的定义,主要是类、类所包含的数据、类的行为以及类之间交互的说明组成。
3.实现视图:描述构造系统的物理组件,这些组件包括如可执行文件、代码库和数据库等内容。这个视图中包含的信息与配置管理和系统集成这类活动有关。
4.进程视图:进程视图包括形成并发和同步机制的进程和线程。
5.部署视图 部署视图描述物理组件如何在系统运行的实际环境(如计算机网路)中分布。
四.用例图
用例图描述外部执行者(actor)与系统的交互,表达系统功能,即系统提供服务。
主要元素:用例和执行者
用例:执行者与计算机一次典型交互,代表系统某一完整功能。
执行者:描述与系统交互的人或物,代表外部实体(如用户、硬件设备或其它软件系统)。
1.发现执行者 :
- 谁使用该系统;
- 谁改变系统的数据;
- 谁从系统获取信息;
- 谁需要系统的支持以完成日常工作任务;
- 谁负责维护、管理并保持系统正常运行;
- 系统需要应付那些硬件设备;
- 系统需要和那些外部系统交互;
- 谁对系统运行产生的结果感兴趣。
2.获取用例:
向执行者提出问题获取用例:
- 执行者需获取何种功能,需要作什么;
- 执行者需读取、产生、删除、修改或存储系统中某种信息;
- 系统发生事件和执行者间是否需要通信。

(抽象时要站在用户使用功能的角度~)

3.执行者间关联:泛化关系。

4.用例间关联
(1)泛化关系:一般与特殊关系
有父用例的行为,可出现在父用例出现的任何地方。 添加自己行为(前者检查文本密码,后者检查用户视网膜)。

(2)扩展关系
允许一个用例扩展另一用例提供的功能,与泛化关联类似,有更多规则限制: 基本UseCase必须声明若干“扩展点”,扩展UseCase只能在扩展点上增加新行为。

(3)包含关系
一个基本UseCase行为包含另一个UseCase行为。

五.类图
1.定义:类图是面向对象建模最常用的图,描述类与类间的静态关系。

2.类属性的语法:[可见性] 属性名[:类型][=初值]
可见性:公有(+)、私有(-)、保护(#)
公有:可被外部对象访问
私有:不可为外部对象访问,只能为本类对象使用
保护:可为本类对象和子类对象访问。
3.类操作的语法:[可见性]操作名 [(参数列表)] [:返回类型]
4.类的版型:

- 边界类:位于系统与外界的交界处
(1)User interface boundary class 用户接口边界类: 窗体(form)、对话框(dialog box)、报表(report)
(2)External system boundary class 实体系统边界类:表示通讯协议(如TCP/IP)的类 直接与外部设备交互的类,直接与外部系统交互的类
- 控制类:每个用例通常有一个控制类,控制用例中的事件顺序,控制类也可以在多个用例间共用。
- 实体类: 用于对必须存储的信息和相关行为建模的类。
- 接口类: 描述一个类或构件服务的操作集,不含属性,只包含方法的声明。
5.类之间的关系:关联、泛化(继承)、依赖、实现。
(1)关联关系
普通关联:双向,用实线连接两个类。(类似ER图)
导航关联:关联是单向的,用实线箭头连接两个类。
限定关联:限定符放在关联关系末端的矩形内。
关联类:用关联类记录关联附加信息。
聚合(Aggregation):类与类间关系是"has-a",整体与部分关系,较弱情况。
菱形端代表整体事物类;代表部分事物类可属于整体事物类。
聚合关系中代表部分事物对象与代表聚合事物对象生存期无关,删除聚合对象不一定删除代表部分事物对象。
组合(Composition): 组合是“contains-a”关系,是整体与部分较强关系,部分类完全隶属于整体类。 组合中删除组合对象,同时也就删除代表部分事物对象。
(2)泛化关系:是指类间的“一般-特殊”关系。

(3)依赖 :一模型元素变化必影响另一模型元素。
(4)实现 :是指一个类描述了另一个类保证实现的合约。

系统设计视图中的类AccountBusinessRules(帐户商业规则)由接口类IRuleAgent(规则代理)实现。
六.对象图
对象图表示一组对象之间联系,对象图是类图的实例。

类图和对象图是建立对象模型主要工具,用于各类系统:信息管理系统、数据库系统、Web应用系统、实时控制系统。
七.包(分组机制)
UML中包是对模型元素成组组织的通用机制。
把语言相近,可能一起变更模型元素组织在包里,便于理解复杂系统。
包图由包和包间联系构成,包的联系:依赖、泛化。
包依赖: 一个元素定义改变引起另一元素发生相应改变,用虚线箭头表示包间依赖关系,虚箭线从依赖包指向独立包。
包泛化: 两个包间有一般特殊关系,实线箭头表示包间泛化关系。

八.消息:对象间交互通过消息。
1.简单消息:没有描述通信的细节。
2.同步消息:调用者发出消息后等待消息返回后再继续执行。
3.异步消息:调用者发出消息后不等待消息返回就继续执行。
4.返回消息:代表从过程调用的返回。
- 过程控制流:可省,隐含每个调用有配对返回
- 非过程控制流(如异步):不可省
九.顺序图:描述对象间交互关系。
- 对象用矩形框表示,框内标对象名;
- 矩形框下的竖线代表对象的生命线;
- 对象生命线上的细长矩形框表示对象被激活;
- 对象间通信用对象间水平消息线表示,箭头形状表明消息类型(同步、异步或简单)。
十.协作图:描述相互协作对象间交互关系和链接关系。
- 顺序图着重表现交互时间顺序
- 协作图着重表现交互对象的静态链接消息
- 协作图显示对象间处理过程的分布

十一.活动图:描述为完成某一个用例需要做的活动以及这些活动的执行顺序。
活动图由状态图变化而来,各自用于不同目的。状态图着重描述对象的状态变化以及触发状态变化的事件。活动图着重描述各种活动的执行顺序。


十二.UML物理框架机制
系统架构:逻辑架构and物理架构
逻辑架构:描述系统功能。用例图、类图、对象图、状态图、活动图、协作图、顺序图。
物理框架:关心的是实现。类和对象物理上分布在那个程序或进程中;程序进程在哪台计算机上运行;系统有哪些硬件设备,如何连接,构件图和配置图。
1.构件图:
构件图(Component Diagrams)展现了一组构件的类型、内部结构和它们之间的依赖关系。
构件代表系统一物理实现块,一般作为一独立文件存在。
构件种类:
部署构件:是构成一可执行系统必要构件,如操作系统,Java虚拟机。
工作产品构件:开发过程产物,包括源代码文件及数据文件。构件不直接参与可执行系统,用来产生可执行系统的中间工作产品。

2.配置图:
描述了系统硬件和软件物理配置情况和系统体系结构,显示系统运行时刻的结构。
配置图包含结点和连接两个元素,配置图中的结点代表实际的物理设备以及在该设备上运行的构件和对象,结点的图符是一个立方体。
配置图各结点之间进行交互的通信路径称为连接用结点间的连线表示。
十三.UML扩展机制
利用扩展机制,用户可定义使用自己的模型元素。
1.标签值:存储元素相关信息字符串,可附加在任何独立元素(图形元素、视图元素)。
标签是建模人员需要记录某些特性的名称;
值是给定特性的值。
标签值对项目管理特别有用,如元素创建日期 开发状态、完成日期和测试状态。
标签值用{}扩起。
2.约束:用文字表达式表达的语义限制,对声明全局的或影响大量元素的条件特别适用。
约束表示为括号中的表达式字符串,附加在类、 对象、关系上和注释上等。

3.版类:在模型本身中定义的一种模型元素,UML元 素具有通用语义,利用版类进行专有化和扩展,在已有元素 上增加新语义。
版类用放置在基本模型元素符号中或附近的被《》括起 的文字串显示,还可为特殊版型创建图标,替换基本元素符号。

相关文章:
软工导论知识框架(五)面向对象方法学
传统软件工程方法学适用于中小型软件产品开发; 面向对象软件工程方法学适用于大型软件产品开发。 一.四要素 对象+类+继承+传递消息实现通信 二.概念 1.对象:具有相同状态的一组操作的集合,对状态和操作…...
MyBatisPlus代码生成器
首先需要mybaits-plus依赖和自动代码生成器依赖 <!-- mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency><!-…...
文件传输软件常见问题解决办法大全
文件传输软件是我们工作中不可缺少的一种工具,它可以帮助我们快速、安全、稳定地传输各种文件,如文档、图片、视频等。但是在使用文件传输软件的过程中,我们也可能会遇到一些问题,影响我们的工作效率和传输质量。那么,…...
springboot工程测试临时数据修改技巧
目录 properties临时属性测试注入 args临时参数测试注入 bean配置类属性注入(Import) SpringBootTest是一个注解,用于测试Spring Boot应用程序。它可用于指示Spring Boot测试应用程序的启动点,并为测试提供一个可用的Spring应用…...
Echarts 清空画布空白以及鼠标悬浮提示信息格式化问题
清空画布用clear()会导致图表空白 const option1 = this.myEchart1.getOption()const option2 = this.myEchart2.getOption()const option3 = this.myEchart3.getOption()// 清空数据option1.series = []option1.xAxis[0].data = []option2.series = []option2.xAxis[0].data …...
数据结构入门:栈
目录 前言 1. 栈 1.1栈的概念及结构 1.2 栈的实现 1.2.1 栈的定义 1.2.2 栈的初始化 1.2.3 入栈 1.2.4 出栈 1.2.5 栈的元素个数 1.2.6 栈顶数据 1.2.7 栈的判空 2.栈的应用 2.1 题目一:括号匹配 2.1.1 思路 2.1.2 分析 2.1.3 题解 总结 前言 无论你是计算机科学专…...
《UNUX环境高级编程》(14)高级I/O
1、引言 2、 非阻塞I/O 系统调用分为两类:低速系统调用和其他系统调用。低速系统调用是可能会使进程永远阻塞的一类系统调用,包括: 如果某些文件类型(如读管道、终端设备和网络设备)的数据并不存在,读操作…...
第5讲:如何构建类的方法
【分享成果,随喜正能量】在这个社会上,对别人好一点,多站在别人的角度考虑,不要为小事争执,不要取笑他人,不要在别人背后嚼舌根,更不能逼人太甚。凡事退一步,对你有好处。。 《VBA中…...
【TypeScript】TS接口interface类型(三)
【TypeScript】TS接口interface类型(三) 【TypeScript】TS接口interface类型(三)一、接口类型二、实践使用2.1 常规类型2.2 设置属性只读 readonly2.3 设置索引签名2.4 设置可选属性2.5 函数类型接口 一、接口类型 TypeScript中的…...
Python web实战之Django 的 RESTful API 设计详解
关键词: Python, Web 开发, Django, RESTful API 1 API的一些事儿 1.1 什么是API? API是应用程序编程接口(Application Programming Interface)的缩写。它是一种定义了不同软件组件之间交互方式的规范。API允许不同的应用程序之间进行通信和…...
Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)
Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数) 目录 Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)一、匿名函数的定义二、匿名函数的特征三、匿…...
【MySQL系列】表约束的学习
「前言」文章内容大致是MySQL的表的约束。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、MySQL表的约束1.1 空属性1.2 默认值(default)1.3 列描述(comment)1.4 zerofill1.5 主键(primary ke…...
低功耗LoRaWAN国产低功耗LoRa+RF射频前端芯片XD6500S
目录 典型应用XD6500S简介芯片特性 LoRa系列选型参考 LoRa是为低数据速率、远距离距离和超低功耗而优化的扩频协议,用于LPWAN应用程序的通信。 典型应用 一、智慧农业 智慧农业大田解决方案利用传感设备、自动化控制设备、气象站实时监测采集田间土壤墒情、气象…...
【基础IO】文件系统 {磁盘的物理结构,存储结构,逻辑结构;CHS 和 LBA 寻址方式;磁盘分区和块组;文件inode;软硬链接}
文件系统 文件分为: 内存文件:被进程打开的文件,文件被加载到内存中供进程快速读写。磁盘文件:没有被打开的文件,保存在磁盘上。磁盘文件被分门别类的存储和管理,用于支持更好的存取。 提示: …...
全角字符和半角字符
全角字符的由来 全角符号是双字节中文编码的历史遗留问题。当年在纯文本的界面中,为了让西文和中日韩的方块字对齐,就让西文字母、数字和标点也占用一个汉字的视觉空间,并使用 2 个字节存储。后来,其中的一些全角字符因为比较有用…...
【java】【经验】java: 错误: 不支持发行版本 6
前言:配置过maven之后,发现原来的一些项目运行提示java: 错误: 不支持发行版本 6或者java: 错误: 不支持发行版本 5,主要原因:是因为项目使用的Java版本和安装的Java版本不符合 目录 1 设置项目java版本 2 设置模块版本 3 set…...
Spring Boot3.0(四):Thymeleaf 使用详解
Thymeleaf 介绍 简单说,Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点: 1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以…...
杨辉三角【Java二维数组】
这个代码中,我们定义了一个二维数组nums来存储杨辉三角的每一个数字。在for循环中,我们初始化每一行的第一个和最后一个数字,并且根据上一行的数字来计算出中间的数字。 接着,我们使用两个嵌套的for循环来输出杨辉三角。第一个循…...
解决SpringBoot服务返回数据存在$ref $.data等相关问题
1、场景 在日常的开发中,我们数据接口返回数据使用了FastJson序列化数据,当返回一个数据list时候出现" r e f " " ref" " ref"".data" 等类似乱码一样的数据,当时我比较匪夷所思,我写…...
【iOS安全】开启任意app的WebView远程调试
参考:https://mp.weixin.qq.com/s/bNKxQaVrPaXsZ5BPbsXy7w (来自周智老师的公众号) 概述 Safari 有一个内置的前端调试器, 在iPhone通过局域网或者USB连接MacBook 并启用Safari 远程调试之后,前端调试器默认情况下对…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...










