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

2023-11-17

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

 

一.四要素

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

二.概念

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

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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软工导论知识框架(五)面向对象方法学 的相关文章

  • 掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南

    C 变量 变量是用于存储数据值的容器 在 C 中 有不同类型的变量 用不同的关键字定义 例如 int 存储整数 没有小数点的整数 如 123 或 123 double 存储浮点数 有小数点 如 19 99 或 19 99 char 存储单个
  • Python - 字典4

    复制字典 您不能简单地通过输入 dict2 dict1 来复制一个字典 因为 dict2 只会成为 dict1 的引用 对 dict1 的更改也会自动应用于 dict2 有多种方法可以复制字典 一种方法是使用内置的 copy 方法 示例 使
  • C# Break 和 Continue 语句以及数组详解

    C Break 它被用于 跳出 switch 语句 break 语句也可用于跳出循环 以下示例在 i 等于 4 时跳出循环 示例 for int i 0 i lt 10 i if i 4 break Console WriteLine i
  • 是否有必要为每个用例都包含登录信息?

    我将设计一个具有登录功能的系统 登录后 登录的用户可以执行几项操作 因此是否需要包括login用例由那几个用例组成 在大多数情况下 它只会让你的图表变得混乱 登录既不复杂 也不会给您带来太多附加值作为用例 在包含用例和描述的文本文档中 包含
  • 这是实体关系图还是类图

    嘿 基本上我对类图和 ERD 的区别感到困惑 我创建了一个我认为是 ERD 的东西 但我的室友似乎认为它是一个类图 它是什么 与已接受的答案相反 xmojmr 也注意到这是NOTUML 图 而是实体关系图 ERD 最明显的区别是连接器末端的
  • 如何避免类图中的循环关系

    Hi I have a question about some circular relationships that I am facing with my database design I read a few more simila
  • 在线求职门户系统用例图

    我想要一个在线求职门户系统的正确用例图 这是我的尝试 我有些疑惑 我看不出在哪里制作 登录 用例 这是该系统的一个重要用例 该用例图没有显示简单访问者和注册访问者之间的区别 前者可以查看职位空缺 查看建议 而无需拥有帐户 后者可以查看职位空
  • 在序列/类图中将消费/生产事件表示为从微服务到消息队列[Kafka]的UML组件

    我有一个生成一些事件的用例 消费其他微服务生成的事件以及自己生成的事件 如何在序列图 类图中表示 Kafka 系统 运行中的微服务以及生产 消费事件 在 UML 中 我们有一个来自 DB 的特殊图表 我们有 Kafka 和 cron 作业的
  • 我应该使用什么图来表示模块中功能之间的交互?

    我需要使用 UML 或 SysML 符号创建图表 我有由函数组成的模块 有些函数仅在模块 内部 使用 其他函数则由其他模块使用 Example MODULE 1有两个功能 func1 and func2 func2 uses func1 i
  • 如何使用用例关系 - uml

    嘿伙计们 我一直在研究 UML 并且正在尝试设计问题的用例图 假设我的应用程序包含以下内容 两个要求 创建团队 创建玩家 这是这笔交易 用户可以创建一个球队 创建球队后可以为该球队创建球员 非必需 但在这个应用程序中有多个用户 一个用户可以
  • 从 umbrello 中的 java 代码自动创建类图?

    我能够将 java 代码导入到 umbrello 中 但是 如何自动生成类图呢 也许雨伞可以not有那个功能 来自handbook http docs kde org stable en kdesdk umbrello code impor
  • 传统的基于代码的工程和模型驱动的工程方法有什么区别?

    我在文献中找到了这段话 但我不明白它的含义 设计实践正在从传统的基于代码的工程转向 在整个开发生命周期中进行严格的分工 模型驱动的工程方法 其中所有人员都参与设计 流程可以对模型有发言权 任何帮助将不胜感激 基于代码的工程意味着大部分工作是
  • 如何在 UML 中建模协变关联类?

    In short 我想对两个类之间的协变关联进行建模 每个类都可以专门化 我需要展示相关关联类的专业化 但我想避免我的模型可能意味着存在冗余关联 即泛化之间的关联和专业化之间的关联 问题的逐步解释 我在 UML 类图中有一个多对多关联Per
  • 多个参与者,相同的用例 [用例]

    我试图描述一个用例 其中系统内的多个参与者可以执行相同的活动 例如 假设 作为示例 我想要使用 更新客户端 用例 但几个已确定的参与者可以执行此操作 Manager Chief Executive Customer Service Repr
  • 如何用序列图来展示一个类与另一个类之间的关系,以该类的实例的实例作为输入?

    我将使用之前的相同示例question https stackoverflow com questions 66934927 how to represent the relationship between an instance of
  • Dia:图表编辑器:盒子对象的限制?

    如标题所示 我尝试为 hte 3d 图形引擎 ogre3d 开发尽可能少的方案 问题是大图方案 Ogre Root 类需要相当多的从它下降的箭头 用关系箭头连接框的模型是它们只能通过边界周围的特定点 称为 关节 或其他东西 进入 退出 但现
  • 如何在 UML 序列图中显示实例化?

    如何显示 Web 服务器实例化视图并重新获得流的控制权 也许我没有使用正确的图表类型 非常感谢 Ruben 的答案中的图表是正确的 但缺少一般的 UML 答案 当 创建 线 在本例中为虚线 连接到所创建生命线的框 标签 顶部时 它会创建另一
  • UML三元关联实现java代码[重复]

    这个问题在这里已经有答案了 三元关联是结构关系 指定一个事物的对象连接到其他两个事物的对象 我理解这种关系 但我不知道如何实现显示这三个类之间关联的方法 让我们考虑下面的例子 项目有许多使用特定编程的开发人员 语言促进发展 开发人员使用特定
  • PlantUML 活动图 返回

    我正在使用 PlantUML 创建活动图 我想要从里面出来的箭头Modify Details回到OP2而不是钻石 我有这个图 startuml Swimlane1 start OP1 Swimlane2 OP2 if Form Valid
  • 如何使组合键唯一?

    I am making a database of students in one school Here is what I have so far 如果您不喜欢阅读 请跳至 简而言之 部分 问题是我对这个设计并不满意 我想要的组合gra

随机推荐

  • uniapp + uview —— 上传图片

    index vue
  • 显卡的相关性能参数含义(struct cudaDeviceProp)

    中文译注 英文见下文 struct cudaDeviceProp char name 256 器件的名字size t totalGlobalMem Global Memory 的byte大小size t sharedMemPerBlock
  • 手机报错:config:invalid signature问题;网页开发工具报错:config:fali,Error:系统错误,错误码:63002,invalidsignature问题

    折腾了几天发现是 java老哥单词少了一个字母 官方建议 invalid signature签名错误 建议按如下顺序检查 1 确认签名算法正确 可用http mp weixin qq com debug cgi bin sandbox t
  • spark算子执行位置研究,driver端?executor端?

    参考资料 https cloud tencent com developer article 1545723 前言 spark算子的执行位置 driver端 还是executor端 这些之前其实没有注意过 最近在学流处理 发现这个还是很重要
  • Ubuntu20.04 添加右键新建文件

    1 在主文件夹 模板目录下创建一个文件 如下指令 ubuntu ubuntu Templates sudo gedit 2 创建了文件后 直接点击保存即可 3 这时在其他目录下点击右键就可以看到新建文档
  • oracle比较两个时间

    to char date字段 HH24 MI SS between 07 00 00 and 09 30 00 或者 to char date字段 HH24 MI SS gt 07 00 00 and to char date字段 HH24
  • 在HTML中怎么去掉超链接(标签 a)的下划线?

    转自 http zhidao baidu com question 253614370 html qbl relate question 0 word a 20 C8 A5 CF C2 BB AE CF DF a href 超链接 a
  • 【C++·Qt】Qt信号与槽总结

    信号槽是Qt为我们提供的引以为傲的机制之一 它类似设计模式中的观察者模式 观察者模式是一种对象行为模式 它定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变时 所有依赖于它的对象都得到通知并被自动更新 当某个信号signal发出时
  • 数据结构——链表一网打尽

    目录 前言 函数的传参 不带头单向非循环链表 带头双向循环链表 顺序表与链表的优缺点 单链表源码 带头双向循环链表源码 前言 链表是一种物理存储结构上非连续非线性的结构 数据元素的逻辑顺序通过指针次序链接实现 在逻辑结构上好像通过链子链接起
  • html编译器推荐

    学习html 这种简单的网页语言 我推荐大家使用 Sublime Text 代码编译器 本人是个痛快之人 推荐理由简单说 一 编译窗口看着舒服 代码自带颜色 是种高大上的美 二 功能强大 强大到你目前学习html不用以你现在的水平去担心功能
  • C++:map和set

    一 set 1 set的介绍 set 是一个Key模型的搜索二叉树 include
  • DevExpress WinForms图表组件 - 直观的数据信息呈现新方式!(一)

    凭借界面控件DevExpress WinForms全面的2D和3D图表类型的集合 DevExpress WinForms的图表控件设计大大简化了开发者直观地向最终用户呈现信息的方式 DevExpress WinForms有180 组件和UI
  • [现代控制理论]5_系统的可控性_controllability

    现代控制理论 11 现代控制理论串讲 完结 pdf获取 现代控制理论 10 可观测性与分离原理 观测器与控制器 现代控制理论 9 状态观测器设计 龙伯格观测器 现代控制理论 8 5 线性控制器设计 轨迹跟踪simulink 现代控制理论 8
  • Ubuntu20.04如何卸载软件

    自此换了Ubuntu系统 很多用起来特别不顺手 例如现在删个软件 window系统右击强制删除就完了 现在都不知道咋整 gt lt 特此整理了如下几种情况 希望能帮到跟我一样状况的小伙伴O O 手动卸载 点击 设置 应用程序 选中自己要卸载
  • 手把手带你撸zookeeper源码系列目录

    手把手带你撸zookeeper源码 前言 手把手带你撸zookeeper源码 配置文件 手把手带你撸zookeeper源码 如何启动一个zookeeper服务 手把手带你撸zookeeper源码 从源码角度分析zookeeper启动时都做了
  • Linux系统之Centos安装epel源

    Linux系统之Centos安装epel源 一 检查本地系统环境 1 检查系统版本 2 检查系统内核版本 二 检查yum仓库 1 查看repo文件 2 检查yum仓库的状态 三 安装epel源 1 查看系统epel release noar
  • 【论文笔记_目标检测_2022】Cross Domain Object Detection by Target-Perceived Dual Branch Distillation

    基于目标感知双分支提取的跨域目标检测 摘要 在野外 跨领域目标检测是一项现实而具有挑战性的任务 由于数据分布的巨大变化和目标域中缺乏实例级注释 它的性能会下降 现有的方法主要关注这两个困难中的任何一个 即使它们在跨域对象检测中紧密耦合 为了
  • arcgis不闭合线转面_ArcGIS不闭合线转面

    ArcGIS不闭合线转面 1 打开ArcMap用Add Data加载shp Polyline线文件 2 选Editor编辑 Start Editing开始编辑 3 选Editor编辑 More Editing Tools Topology拓
  • java:hashMap: get(null)引发的对其数据结构具体形态的思考

    ref 原文 https blog csdn net fenglongmiao article details 79656198 note 我们知道HashMap集合是允许存放null值的 hashMap是根据key的hashCode来寻找
  • 软工导论知识框架(五)面向对象方法学

    传统软件工程方法学适用于中小型软件产品开发 面向对象软件工程方法学适用于大型软件产品开发 一 四要素 对象 类 继承 传递消息实现通信 二 概念 1 对象 具有相同状态的一组操作的集合 对状态和操作的封装 2 类 对具有相同状态和相同操作的