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

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(使用前将#替换为@)

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

  • 在 Visual Studio 2017 中的类图中创建聚合和组合

    我正在考虑在 Visual Studio 中创建类图 我注意到工具箱似乎只允许类之间的关联关系 是否可以在类图中创建更强的关系 即聚合和组合关系 另外 是否可以从代码自动创建类图 好问题 首先 Visual Studio VS 类设计器不是
  • 显示事件的典型 uml 图

    我有几个模块 他们通过事件相互交流 通常使用什么 UML 图来显示这一点 人们使用非 uml 图吗 有什么例子吗 我想你肯定想要一个顺序图 http en wikipedia org wiki Sequence diagram按顺序显示模块
  • 用例图包括

    我有一个关于用例图的问题 如图所示 用户可以输入或更新他的姓名和问题 正如您所看到的 用户在第一次输入信息时需要输入姓名和问题 因此包括在内 但是 如果他希望更新他的信息 图表是否表明他必须修改名称和问题 因为它们包含在内 例如 如果他拼错
  • 学习如何分析项目

    我刚刚偶然开始为我公司的一个客户 中小企业 分析一个项目 我是一名 Net 开发人员 5 年 在分析软件方面经验很少 来自学校的 UML 我们刚刚结束了与用户两周的交谈 并得到了一份不错的需求清单 显然 我们已经过滤掉了最重要的需求 并且必
  • 主动类与被动类

    在 UML 规范上层结构 2 5 仍为 Beta 第 203 页 中 可以通过将 isActive 设置为 true 来指定类为活动类 即 它的每个实例都是一个活动对象 当 isActive 为 false 时 类是被动的 即 它的每个实例
  • uml 与 RDF 和 OWL 的组合关系

    我是 RDF 和 OWL 本体的初学者 我正在尝试将此图转换为 OWL 语法
  • UML 类图概念、规范、实现

    我目前正在阅读 Martin Fowler 的 UML Distilled 我刚刚介绍了有关类图的部分 他在其中强调了在对类图进行建模之前理清自己的观点的必要性 然而 在实际绘制类图时 我对它的实际外观有点困惑 例如 我理解理论含义会改变关
  • 显示除“<>”或“<>”之外的 UML 用例图的依赖关系

    除了 扩展 或 包含 之外 我们如何显示用例之间的简单依赖关系 例如 我们想说用例 1 依赖于由用户 1 完成的用例 2 可以用一个简单的箭头来实现吗 向哪个方向 是的 还有其他依赖项 直接连接到用例的类的完整列表是 UML 2 5 标准的
  • 学习 UML 的最佳来源是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • UML 聚合可以是双向的吗?

    我正在 Python 中实现一个具有 MVC 模式的应用程序 具有以下类定义 class Controller object def init self model view self model model self view view
  • 将 StarUML 图转换为 Visio 绘图

    我有一个使用 Star Uml 创建的类图 但现在的要求是将其移植到 MS Visio 是否可以将 uml 移植到具有可用 xml 信息的 vsd 提前致谢 导出为 Windows 图元文件 WMF 和增强型 Windows 图元文件 EM
  • 如何在 UML 序列图中显示实例化?

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

    我正在使用 PlantUML 创建活动图 我想要从里面出来的箭头Modify Details回到OP2而不是钻石 我有这个图 startuml Swimlane1 start OP1 Swimlane2 OP2 if Form Valid
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 双向和单向关联 UML

    虽然我以为我明白了aggregation and composition 我很难理解bi directional and uni directional协会 我读过bi directional协会 两个班级都知道 彼此以及与uni dire
  • 不同保护条件下的状态转换

    在状态模式中这是如何建模的 当当前状态为 A 时 在触发器 X 和条件 C1 上状态 A 到状态 B 当当前状态为 A 时 在触发器 X 和条件 C2 上状态 A 到状态 C 这通常是如何实现的 我有很多可能需要实施的守卫条件 这是相当标准
  • Android Studio 上的代码 Iris 插件

    我正在尝试使代码 iris 插件在 Android studio 上工作 我按右键单击 gt 创建代码虹膜图 然后我收到一条通知 表明我的图表已准备就绪 但我不知道该图何时存储 创建的文件的名称是什么以及如何打开它 有任何想法吗 CODE
  • Pear PHP UML 类图 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试创建现有代码的图形表示 我尝试使用 VS PHP 使用 Visual Studios 201
  • Visual Basic 6.0 UML 图生成器

    有没有免费的 UML 图生成器可以将 VB6 源代码转换为 UML 图 您是否见过 Deanna 提到的内置 Visual Modelerhere https stackoverflow com questions 16912161 use
  • Qt中用于线程间通信的类设计

    问题陈述 用相机跟踪物体并相应地移动相机的方位角和仰角 Process 相机获取物体的图像 处理相机的每一帧以查找物体 应该被跟踪 并将每帧中生成的信息传递给机械设备 万向节 以平移和倾斜方式移动摄像机 Design 主 Gui 在一个线程

随机推荐

  • 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 类 对具有相同状态和相同操作的