软工导论知识框架(五)面向对象方法学

news2024/11/14 23:32:46

传统软件工程方法学适用于中小型软件产品开发;  面向对象软件工程方法学适用于大型软件产品开发。

 

一.四要素

对象+类+继承+传递消息实现通信

二.概念

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元 素具有通用语义,利用版类进行专有化和扩展,在已有元素 上增加新语义。

 版类用放置在基本模型元素符号中或附近的被《》括起 的文字串显示,还可为特殊版型创建图标,替换基本元素符号。

 

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

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

相关文章

批处理处理退格符,一行里输出百分比

直接上例子程序&#xff1a; echo off&setlocal enabledelayedexpansion for /l %%a in (1,1,6) do set "str!str!" rem set /p0%<nul for /L %%i in (0,1,100) do (sleep 1 >nul set /p%str%<nul&set /p%%i%%<nul ) pause>nul 输出效果如…

linuxARM裸机学习笔记(5)----定时器按键消抖和高精度延时实验

定时器按键消抖 之前的延时消抖&#xff0c;是直接借助delay函数进行的&#xff0c;但是这样会浪费CPU的性能。我们采用延时函数的方式实现&#xff0c;可以实现快进快出。 定时器消抖&#xff0c;必须是在t3的时间点才可以&#xff0c;当在t1,t2的时间点每次进入中断函数都要…

SSH 免密登录

SSH SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程复制等功能 SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令 SSH 为建立在应用层和传输层基础上的安全协议。对数…

vscode关闭绑定元素“xxx”隐式具有“any”类型这类错误

在ts的项目里面&#xff0c;真的经常看到any类型的报错&#xff0c;真的很烦的 所以为了眼不见心不乱&#xff0c;我决定消除这个错误提示 在tsconfig.json里面配置 "noImplicitAny": false 就可以了 {"compilerOptions": {"target": "E…

LeetCode——只出现一次的数字II(位运算方法/哈希方法)

题目地址 力扣 题目解析 位运算法 由题我们能知道该数组中只有一个数出现了一次&#xff0c;然而其他的数都出现了3次。 我们可以通过分析每一个二进制位的和来讨论这个题目的解法&#xff01; 由于前边的条件&#xff0c;那么我们可以得出&#xff0c;某一个二进制位的和…

培训Java技术要多久才能学会?答案都在这里啦

培训Java技术要多久才能学会?这是想学习Java开发的很多人都会问到的一个问题。而这个问题的答案其实并不是那么简单&#xff0c;因为学Java的时间长短受到众多因素的影响。本文将从个人基础、学习动力和学习效率三个方面来为您解答这个问题。 1. 个人基础 自己的基础对于学习…

LT8711UXD 是一款高性能双通道 Type-C/DP1.4 至 HDMI2.0 转换器

LT8711UXD 1.描述 LT8711UXD是一款高性能的双车道TypeC/DP1.4到HDMI2.0转换器&#xff0c;设计用于将USB Type-C源或DP1.4源连接到HDMI2.0接收器。LT8711UXD集成了一个DP1.4兼容的接收机&#xff0c;和一个HDMI2.0兼容的发射机。此外&#xff0c;还包括两个CC控制器&#xff0…

List和数组互转方法以及踩坑点

一、数组转List 1. 使用for循环逐个添加 String[] array {"A", "B", "C"}; List<String> list new ArrayList<>(); for (String element : array) {list.add(element); }2. 使用Arrays.asList(arr) String[] array {"A&q…

机器学习笔记之优化算法(十一)梯度下降法:凸函数VS强凸函数

机器学习笔记之优化算法——梯度下降法&#xff1a;凸函数VS强凸函数 引言凸函数&#xff1a;凸函数的定义与判定条件凸函数的一阶条件凸函数的梯度单调性凸函数的二阶条件 强凸函数强凸函数的定义强凸函数的判定条件强凸函数的一阶条件强凸函数的梯度单调性强突函数的二阶条件…

java.sql.SQLFeatureNotSupportedException 问题及可能的解决方法

目录 问题 分析&#xff1a; 解决方法 问题 java.sql.SQLFeatureNotSupportedException 分析&#xff1a; 可能是你的 druid的maven依赖版本太低了&#xff0c;我的以前是1.1.16&#xff0c;就出现了异常&#xff01; 解决方法 把druid的maven依赖版本调高&#xff01; 运…

tui.calender日历在vue中的使用1.0

官网&#xff1a;https://ui.toast.com/tui-calendar github&#xff1a;https://github.com/nhn/tui.calendar/tree/main 月、周、日视图都有&#xff0c;拖拽也比较方便&#xff0c;但是自己用起来比较费劲&#xff0c;参考文档写得不全&#xff0c;做个记录日后方便参考&…

考研408 | 【计算机网络】 数据链路层

导图&#xff1a; 数据链路层概念&#xff1a; 结点&#xff1a;主机、路由器 链路&#xff1a;网络中两个结点之间的物理通道&#xff0c;链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。 数据链路&#xff1a;网络中两个结点之间的逻辑通道&#xff0…

idea中提示Unsupported characters for the charset ‘ISO-8859-1‘

application.properties中文注释拉黄线 &#xff0c;提示Unsupported characters for the charset ISO-8859-1 解决办法&#xff1a; 注意&#xff1a; 改完之后之前输入的中文就变成“ &#xff1f;&#xff1f;&#xff1f;”了&#xff0c;建议备份一下 1、打开setti…

并发——什么是线程死锁?如何避免死锁?

文章目录 1. 认识线程死锁2. 如何避免线程死锁? 1. 认识线程死锁 线程死锁描述的是这样一种情况&#xff1a;多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 如下图所示&#xff…

软件验收测试包括几种类型?验收测试报告有什么好处?

在软件开发中&#xff0c;验收测试是软件项目在开发完成后进行的最后一项测试工作。它是确认软件是否满足预期要求&#xff0c;并准备将软件交付用户的核心环节&#xff0c;它可以确保软件的质量和功能符合用户的需求和期望。 一、软件验收测试的类型 软件验收测试可以分为多…

网络安全【黑客】面试题汇总

前言 一眨眼2023年已经过去一大半&#xff0c;不知道大家有没有找到心仪的工作。作为一个安全老鸟&#xff0c;工作这么多年&#xff0c;面试过很多人也出过很多面试题目&#xff0c;也在网上收集了各类关于渗透面试题目&#xff0c;里面有我对一些问题的见解&#xff0c;希望…

C++结构体部分显式构造导致编译异常分析

今天调试了一段代码如下 #include <iostream> #include <shared_mutex>#define SECT_NUM 2 #define DI_HIGH_PERM 2 #define DI_READ 1 #define DI_WRITE 2 #define FMT_BIN 1#define USER_PATH "d:\\fafiles\\dbtest\\"typedef unsigned long DW…

UE4 像素流 学习笔记

使用场景&#xff1a; 1、登录服务器&#xff0c;服务器上安装node.js Download | Node.js (nodejs.org) 点击该网址 点击Windows Installer 2、登录服务器&#xff0c;拷贝本地UE Pixel Streaming包到服务器 启用插件后重启该项目 3、登录服务器&#xff0c;修改\Sample\P…

MobXterm设置快捷键ctrl+v

问题&#xff1a; MobXterm是一个很好的ssh软件&#xff0c;粘贴按键反人性Shift Insert(Ins)&#xff0c;大部分人还是习惯CtrlV 原因&#xff1a;替换快捷键设置 CtrlV 方法&#xff1a;菜单setting->keybroad shotcuts->Paste in termainal

Hello,SpringBoot!

一、回顾什么是Spring Spring是一个开源框架&#xff0c;2003 年兴起的一个轻量级的Java 开发框架&#xff0c;作者&#xff1a;Rod Johnson Spring是为了解决企业级应用开发的复杂性而创建的&#xff0c;简化开发。 Spring是如何简化Java开发的 为了降低Java开发的复杂性…