软工导论知识框架(五)面向对象方法学
传统软件工程方法学适用于中小型软件产品开发; 面向对象软件工程方法学适用于大型软件产品开发。
一.四要素
对象+类+继承+传递消息实现通信
二.概念
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 远程调试之后,前端调试器默认情况下对…...

STM32什么是寄存器
提示:文章 文章目录 前言一、背景二、2.12.2 三、3.1 总结 前言 前期疑问: 1、什么是寄存器? 答:在4GB的地址空间中,512MB的block2上,每4个字节组成32位,这个32位为一个单元,控制&a…...

Codeforces Round 509 (Div. 2) C. Coffee Break
题目大意: 给你n、m、d n为元素个数,m为数列长度,d为每个元素之间的最短间隔 问最少需要多少个数列可以使得元素都能装进数列,并且满足每个元素之间的间隔大于等于d 核心思想 使用贪心的思想,将元素的大小进行排序,问题出在必…...

为什么React列表项需要key?(React key)(稳定的唯一标识key有助于React虚拟DOM优化重绘大型列表)
文章目录 1. **帮助 React 识别列表项的变化**2. **性能优化**3. **避免组件状态混乱**4. **为什么使用 rpid 作为 key**5. **不好的做法示例**6. **✅ 正确的做法** 在 React 中添加 key{item.rpid} 是非常重要的,主要有以下几个原因: 1. 帮助 React 识…...

深入理解 Spring IOC:从概念到实践
目录 一、引言 二、什么是 IOC? 2.1 控制反转的本质 2.2 类比理解 三、Spring IOC 的核心组件 3.1 IOC 容器的分类 3.2 Bean 的生命周期 四、依赖注入(DI)的三种方式 4.1 构造器注入 4.2 Setter 方法注入 4.3 注解注入(…...
ASR技术(自动语音识别)深度解析
ASR技术(自动语音识别)深度解析 自动语音识别(Automatic Speech Recognition,ASR)是将人类语音转换为文本的核心技术,以下是其全面解析: 一、技术原理架构 #mermaid-svg-QlJOWpMtlGi9LNeF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:1…...
用 NGINX 构建高效 SMTP 代理`ngx_mail_smtp_module`
一、模块定位与作用 协议代理 NGINX 监听指定端口(如 25、587、465 等),接收客户端的 SMTP 会话请求。代理层在会话中透明转发客户端的 EHLO、MAIL FROM、RCPT TO、DATA 等命令到后端 MTA。 认证控制 通过 smtp_auth 指令指定允许的 SASL 认…...
.Net Framework 4/C# 属性和方法
一、属性的概述 属性是对实体特征的抽象,用于提供对类或对象的访问,C# 中的属性具有访问器,这些访问器指定在它们的值被读取或写入时需要执行的语句,因此属性提供了一种机制,用于把读取和写入对象的某些特征与一些操作…...

Python分形几何可视化—— 复数迭代、L系统与生物分形模拟
Python分形几何可视化—— 复数迭代、L系统与生物分形模拟 本节将深入探索分形几何的奇妙世界,实现Mandelbrot集生成器和L系统分形树工具,并通过肺部血管分形案例展示分形在医学领域的应用。我们将使用Python的NumPy进行高效计算,结合Matplo…...

作为过来人,浅谈一下高考、考研、读博
写在前面 由于本人正在读博,标题中的三个阶段都经历过或正在经历,本意是闲聊,也算是给将要经历的读者们做个参考、排雷。本文写于2022年,时效性略有落后,不过逻辑上还是值得大家参考,若所述存在偏颇&#…...
NGINX `ngx_stream_core_module` 模块概览
一、模块定位与功能 通用 TCP/UDP 代理 支持同时处理 TCP 和 UDP 流量,透明转发请求到后端服务器组(upstream)。可作为四层负载均衡,根据客户端 IP、权重、最少连接等策略将连接分发给后端。 预读(preread)…...