[软件工程导论(第六版)]第9章 面向对象方法学引论(复习笔记)

news2024/11/13 14:52:11

文章目录

    • 9.1 面向对象方法学概述要点
    • 9.2 面向对象的概念对象
    • 9.3 面向对象建模
    • 9.4 对象模型
    • 9.5 动态模型
    • 9.6 功能模型
    • 9.7 3种模型之间的关系


9.1 面向对象方法学概述要点

  • 面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,使描述问题的问题空间与实现解法的解空间在结构上尽可能一致
  • (1)定义
    • 面向对象方法是一种以数据或信息为主线,把数据和处理相结合的方法。
  • (2)要点
    • ① 对象;
    • ② 类;
    • ③ 继承性;
    • ④ 封装性。
    • 【注意】需理解四个要点各自的含义。
  • 面向对象方法学的优点
    • (1)与人类习惯的思维方法一致;
    • (2)稳定性好;
    • (3)可重用性好;
    • (4)较易开发大型软件产品;
    • (5)可维护性好。

9.2 面向对象的概念对象

  • (1)对象的定义
    • ① 面向对象程序设计的角度:对象是具有相同状态的一组操作的集合。
    • ② 信息模拟的角度:对象是对属性值和操作的封装
    • ③ 对象的形式化定义:对象 ::= <ID, MS, DS, MI>
      • ID 对象的标识或名字
      • MS 对象中的操作集合
      • DS 对象的数据结构
      • MI 对象受理的信息名集合(对外接口)
    • ④ 结构化的角度:对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体。
    • 面向对象方法学认为,客观世界是由对象组成,任何事物都是对象。
    • 传统的软件开发以算法为核心,面向对象以对象为核心
  • (2)对象的特点
    • ① 以数据为中心;
    • ② 对象是主动的;
    • ③ 实现了数据封装;
    • ④ 具有并行性;
    • ⑤ 模块独立性好。
  • 其他概念
  • (1)类
    • 类是对具有相同数据和相同操作的一组相似对象的定义。
  • (2)实例
    • 实例就是由某个特定的类所描述的一个具体的对象。
    • 【注意】类是对象的抽象,对象是类的实例。
  • (3)消息
    • ① 定义:消息就是要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。
    • ② 组成:一个消息由接收消息的对象、消息选择符、零个或多个变元组成。
  • (4)方法
    • 方法就是对象所能执行的操作,也就是类中所定义的服务。
  • (5)属性
    • 属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。
  • (6)封装
    • 封装是把数据和实现操作的代码集中起来放在对象内部。
  • (7)继承
    • ① 定义
      • 继承是子类自动地共享基类中定义的数据和方法的机制。
    • ② 特点
      • a.继承具有传递性;
      • b.低层的性质将屏蔽高层的同名性质。
    • ③ 分类
      • a.单继承:一个类只允许有一个父类,即类等级为树形结构。
      • b.多重继承:允许一个类有多个父类。
    • 在这里插入图片描述
  • (8)多态性
    • ① 定义
      • 多态性指在类等级的不同层次中可以共享一个方法的名字,不同层次中的每个类各自按自己的需要来实现这个行为。
      • 【注意】在C++中,多态性是通过虚函数来实现的。
    • ② 动态联编
      • 在运行时刻根据接收消息的对象所属于的类,决定执行哪个特定版本的函数,这称为动态联编(滞后联编)。
    • ③ 优点
      • a.增加了面向对象软件系统的灵活性,进一步减少了信息冗余。
      • b.显著提高了软件的可重用性和可扩充性。
  • (9)重载
    • ① 分类
      • a.函数重载
        • 在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。
        • 【注意】常考点:重载函数的形式参数(指参数的个数或者类型或者顺序)必须不同,而与函数返回值类型无关。
      • b.运算符重载
        • 同一个运算符可以施加于不同类型的操作数上面。
    • ② 实现
      • a.函数重载是通过静态联编(先前联编)实现的。
      • b.运算符重载是在编译时根据被操作数的类型,决定使用该算符的哪种语义。
    • ③ 优点
      • 进一步提高了面向对象系统的灵活性和可读性。

9.3 面向对象建模

  • 模型
    • (1)定义
      • 模型是为了理解事物而对事物作出的一种抽象,是对事物的一种无歧义的书面描述。
    • (2)作用
      • ① 是一种思考工具,利用这种工具可以把知识规范地表示出来。
      • ② 可以帮助人们思考问题、定义术语、在选择术语时作出适当的假设, 并且有助于保持定义和假设的一致性。
  • 模型分类
    • (1)对象模型:描述系统数据结构。
      • 对象模型是最基本、最核心、最重要。
    • (2)动态模型:描述系统控制结构。
    • (3)功能模型:描述系统功能。
  • 面向对象建模是面向对象分析的关键。

9.4 对象模型

  • 概念
    • (1)定义
      • 它是对模拟客观世界实体的对象以及对象彼此间的关系的映射,描述了系统的静态结构。
      • 【注意】对象模型表示静态的、结构化的系统的数据性质。
    • (2)工具
      • 使用UML提供的类图来建立对象模型。
      • UML:统一建模语言
        • UML的类图建立对象模型;
        • UML的状态图建立动态模型;
        • 功能模型:使用数据流图或UML的用例图建立功能模型;
  • 类图的基本符号
    • 类图描述类及类与类之间的静态关系。类图是一种静态模型,它是创建其他UML图的基础。
    • (1)定义类
      • UML中类的图形符号为长方形,用两条横线把长方形分为上、中、下3个区域,3个区域分别放类的名字、属性和服务,如图所示。
      • 在这里插入图片描述
      • 【注意】类名应该是富于描述性的、简洁的而且无二义性的。
    • (2)定义属性
      • ① UML描述属性的语法格式为:
        • 可见性 属性名:类型名=初值{性质串}
      • ② 属性的可见性分为公有的(+)、私有的(-)和保护的(#),没有默认的可见性。
    • (3)定义服务
      • ① 服务也就是操作,UML描述操作的语法格式为: 可见性 操作名(参数表):返回值类型{性质串}
      • ② 操作的可见性分为公有的(+)、私有的(-)和保护的(#),没有默认的可见性。
      • ③ 参数表中描述一个参数的语法为:参数名:类型名=默认值
  • 表示关系的符号
    • 类与类之间通常有关联、泛化(继承)、依赖和细化4种关系。
    • (1)关联
      • ① 定义
        • 关联表示两个类的对象之间存在某种语义上的联系。
      • ② 普通关联
        • a.定义
          • 只要在类与类之间存在连接关系就可以用普通关联表示。
        • b.表示
          • 第一,普通关联的图示符号是连接两个类之间的直线。
          • 第二,关联是双向的,可为关联起一个名字。在名字前面(或后面)加一个表示关联方向的黑三角。
          • 第三,在表示关联的直线两端可以写上重数。
          • 在这里插入图片描述
          • 在这里插入图片描述
      • ③ 限定关联
        • a.定义
          • 限定关联用在一对多或多对多的关联关系中,可以把重数从一对多变成一对一,或从多对多简化成多对一。
        • b.表示
          • 在类图中把限定词放在关联关系末端的一个小方框内。
          • 在这里插入图片描述
      • ④ 关联类
        • a.定义
          • 为了说明关联的性质,可能需要一些附加信息。关联类可以用来记录相关信息。
        • b.表示
          • 关联中的每个连接与关联类的一个对象相联系。关联类通过一条虚线与关联连接。
          • 在这里插入图片描述
    • (2)聚集
      • 聚集(聚合)是关联的特例。表示类与类之间的关系是整体与部分的关系。
    • ① 共享聚集
      • a.定义
        • 如果在聚集关系中处于部分方的对象可同时参与多个处于整体方对象的构成,则该聚集称为共享聚集。
      • b.表示
        • 在表示关联关系的直线末端紧挨着整体类的地方画一个空心菱形。
        • 在这里插入图片描述
    • ② 组合聚集
      • a.定义
        • 如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失,则该聚集称为组合聚集。
      • b.表示
        • 在表示关联关系的直线末端紧挨着整体类的地方画一个实心菱形。
        • 在这里插入图片描述
    • (3)泛化
      • ① 定义
        • UML中的泛化关系就是继承关系,它是通用元素和具体元素之间的一种分类关系。
      • ② 表示
        • 在UML中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。
        • 在这里插入图片描述
      • ③ 分类
        • 泛化关系包括普通泛化和受限泛化。
      • ④ 约束
        • 预定义的约束有4种:多重、不相交、完全和不完全。
      • ⑤ 继承分类
        • 分为多重继承、不相交继承、完全继承、不完全继承四类。
    • (4)依赖和细化
      • ① 依赖关系
        • a.定义
          • 依赖关系描述两个模型元素之间的语义连接关系:其中一个模型元素是独立的,另一个模型元素不是独立的,它依赖于独立的模型元素,如果独立的模型元素改变了,将影响依赖于它的模型元素。
        • b.表示
          • 在UML类图中用带箭头的虚线连接有依赖关系的两个类,箭头指向独立的类。
          • 在这里插入图片描述
      • ② 细化关系
        • a.定义
          • 对同一个事物在不同抽象层次上描述时,这些描述之间具有细化关系。
        • b.表示
          • 细化的图示符号为由元素B指向元素A的一端为空心三角形的虚线。
          • 在这里插入图片描述

9.5 动态模型

  • 概念
    • 动态模型表示瞬时的、行为化的系统的控制性质,它规定了对象模型中的对象的合法变化序列。
  • 建模
    • 每个类的动态行为用一张状态图来描绘,各个类的状态图通过共享事件合并起来,从而构成系统的动态模型。

9.6 功能模型

  • 概念
    • (1)定义
      • 功能模型表示变化的系统的功能性质,它指明了系统应该做什么。
    • (2)组成
      • 功能模型由一组数据流图组成。
  • 用例图
    • 在UML中把用用例图建立起来的系统模型称为用例模型。
    • (1)定义
      • 用例模型描述的是外部行为者所理解的系统功能。用例模型的建立是系统开发者和用户反复讨论的结果,它描述了开发者和用户对需求规格所达成的共识。
    • (2)组成和表示
      • ① 系统,用方框表示。
      • ② 用例,用椭圆表示。
      • ③ 行为者,用线条人表示。
      • ④ 关系,用连线表示。
      • 在这里插入图片描述
    • (3)关系的分类
      • UML用例之间主要有扩展和使用两种关系,它们是泛化关系的两种不同形式。
      • ① 扩展关系
        • 向一个用例中添加一些动作后构成了另一个用例,这两个用例之间的关系就是扩展关系,后者继承前者的一些行为,通常把后者称为扩展用 例。
      • ② 使用关系
        • 一个用例使用另一个用例时,这两个用例之间就构成了使用关系。
      • 在这里插入图片描述
  • 创建用例模型的工作:
    • 定义系统
    • 寻找行为者和用例
      • 寻找行为者和用例是关键
    • 描述用例
    • 定义用例之间的关系
    • 确认模型

9.7 3种模型之间的关系

  • 针对每个类建立的动态模型,描述了类实例的生命周期或运行周期。
  • 状态转换驱使行为发生,这些行为在数据流图中被映射成处理,在用例图中被映射成用例,它们同时与类图中的服务相对应。
  • 功能模型中的处理对应于对象模型中的类所提供的服务。
  • 数据流图中的数据存储,以及数据的源点/终点,通常是对象模型中的对象。
  • 数据流图中的数据流,往往是对象模型中对象的属性值,也可能是整个对象。
  • 用例图中的行为者,可能是对象模型中的对象。
  • 功能模型中的处理可能产生动态模型中的事件。
  • 对象模型描述了数据流图中的数据流、数据存储以及数据源点/终点的结构。

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

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

相关文章

CS144-Lab3

概述 在实验0中&#xff0c;你实现了流控制字节流&#xff08;ByteStream&#xff09;的抽象。 在实验1和2中&#xff0c;你实现了将不可靠数据报中的段转换为传入字节流的工具&#xff1a;StreamReassembler和TCPReceiver。 现在&#xff0c;在实验3中&#xff0c;你将实现…

【STM32笔记】低功耗模式配置及避坑汇总

【STM32笔记】低功耗模式配置及配置汇总 文章总结&#xff1a;&#xff08;后续更新以相关文章为准&#xff09; 【STM32笔记】__WFI()&#xff1b;进入不了休眠的可能原因 【STM32笔记】HAL库低功耗模式配置&#xff08;ADC唤醒无法使用、低功耗模式无法烧录解决方案&#x…

kanban系统wekan安装

看板类开源项目排名第一的wekan项目安装比较友好的leantime 下载windows 版本 wekan 进入官网 https://wekan.github.io/ , 留意最新版依赖的技术栈, 比如 WeKan v6.74 依赖的是 Meteor 2.10.0, Node.js 14.21.2, MongoDB 6.0.4。 点击 Offline Window LAN 链接进入 github wik…

「7」线性代数(期末复习)

&#x1f680;&#x1f680;&#x1f680;大家觉不错的话&#xff0c;就恳求大家点点关注&#xff0c;点点小爱心&#xff0c;指点指点&#x1f680;&#x1f680;&#x1f680; 目录 第五章 相似矩阵及二次型 &4&#xff09;对称阵的对角化 &5二次型及其标准型 …

【C++】类与对象理解和学习(中)

专栏放在【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339;六大默认成员函数前言每个类中都含有六大默认成员函数&#xff0c;也就是说&#xff0c;即使这个类是个空类&#xff0c;里面什么都没有写&#xff0c;但是编译器依然会自动生成六个默认成员函数…

【SSD 代码精读】之 model (Backbone) loss

model1、Backbone1&#xff09;ResNet-502&#xff09;截取 ResNet-50 的前半部分作为 backbone2、Module3、Loss Function1&#xff09;location loss2&#xff09;confidence loss3&#xff09;整体 loss4&#xff09;loss 代码1、Backbone 这里介绍使用 ResNet-50 作为 bac…

思维经验 | ​如何刻意练习提升用户思维?

小飞象交流会哪里有什么捷径&#xff0c;那些个“一步登天”的哪个不是在前面就打好了“地基”的。内部交流│20期思维经验分享如何刻意练习提升用户思维&#xff1f;data analysis●●●●分享人&#xff1a;大江老师‍数据部门和运营部门做了大量的用户标签和用户分层工作。为…

基于GIS的地下水脆弱性评价

&#xff08;一&#xff09;行政边界数据、土地利用数据和土壤类型数据 本文所用到的河北唐山行政边界数据、土地利用数据和土壤类型数据均来源于中国科学院资源环境科学与数据中心&#xff08;https://www.resdc.cn/Default.aspx&#xff09;。 &#xff08;二&#xff09;地…

小孩扁桃体肿大3度能自愈吗?6岁小孩扁桃体肥大怎么治效果好?

12月7日&#xff0c;四川眉山市民唐先生说&#xff0c;他刚出生的儿子在妇产医院分娩中心住了20天后感染了败血症。据唐先生介绍&#xff0c;哈子出院时各项指标正常。他在分娩中心住了半个月左右&#xff0c;孩子喝牛奶很生气&#xff0c;第二天就开始发烧了。同一天&#xff…

新版bing(集成ChatGPT)申请通过后在谷歌浏览器(Chrome)上的使用方法

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Flink-运行时架构介绍

文章目录Flink 运行时架构系统架构整体架构作业管理器&#xff08;JobManager&#xff09;任务管理器&#xff08;TaskManager&#xff09;作业提交流程高层级抽象视角独立模式&#xff08;Standalone&#xff09;YARN 集群数据流图&#xff08;Dataflow Graph&#xff09;并行…

用户画像——如何构建用户画像系统

为什么需要用户画像 如果你是用户,当你使用抖音、今日头条的时候,如果平台推荐给你的内容都是你感兴趣的,能够为你节省大量搜索内容的时间。 如果你是商家,当你投放广告的时候,如果平台推送的用户都是你的潜在买家,能够使你花更少的钱,带来更大的收益。 这两者背后都…

Linux内核驱动之efi-rtc

Linux内核驱动之efi-rtc1. UEFI与BIOS概述1.1. BIOS 概述1.1.1. BIOS缺点&#xff1a;1.1.2. BIOS的启动流程1.2 UEFI 概述1.2.1 Boot Sevices&#xff1a;1.2.2. Runtime Service&#xff1a;1.2.3. UEFI优点&#xff1a;1.2.4. UEFI启动过程&#xff1a;1.3 Legacy和UEFI1.4 …

【第31天】SQL进阶-写优化- 插入优化(SQL 小虚竹)

回城传送–》《31天SQL筑基》 文章目录零、前言一、练习题目二、SQL思路&#xff1a;SQL进阶-写优化-插入优化解法插入优化禁用索引语法如下适用数据库引擎非空表&#xff1a;禁用索引禁用唯一性检查语法如下适用数据库引擎禁用外键检查语法如下适用数据库引擎批量插入数据语法…

W806(一)模拟IIC驱动0.96OLED[移植]

前言平头哥内核的国产开发板&#xff0c;资源丰富&#xff0c;按照官方的描述是能够吊打STM32F103C8T6的&#xff0c;22年刚发布的时候就买了&#xff0c;但是当时忙于考研&#xff0c;而且开发板的SDK不够完善&#xff0c;所以23年来填一下坑&#xff0c;今年我在官方群里找到…

ChatGPT原理与技术演进剖析

—— 要抓住一个风口&#xff0c;你得先了解这个风口的内核究竟是什么。本文作者&#xff1a;黄佳 &#xff08;著有《零基础学机器学习》《数据分析咖哥十话》&#xff09; ChatGPT相关文章已经铺天盖地&#xff0c;剖析&#xff08;现阶段或者只能说揣测&#xff09;其底层原…

为啥程序会有bug?

这是一篇半娱乐性的吐槽文章&#xff0c;权当给广大技术人员解解闷&#xff1a;&#xff09;。哈哈哈&#xff0c;然后我要开始讲一个经常在发生的事实了。&#xff08;程序员们可能会感到一些不适&#xff09;99.999999999%做技术的都会被问到或者被吐槽到&#xff1a;“你的程…

PPT和回放来了 | 中国PostgreSQL数据库生态大会圆满落幕

2月17-19日&#xff0c;中国PostgreSQL数据库生态大会在北京中科院软件所和CSDN平台以线下线上结合方式盛大召开&#xff01;本届大会由中国开源软件推进联盟PostgreSQL分会主办。作为自2017年后我们举办的第六届年度行业大会&#xff0c;延续了传播技术&#xff0c;发展产业生…

代码质量与安全 | 一文了解高级驾驶辅助系统(ADAS)及其开发中需要遵循的标准

高级驾驶辅助系统&#xff08;ADAS&#xff09;有助于提高车内每个人的安全性&#xff0c;帮助他们安全抵达目的地。这项技术功能非常重要&#xff0c;因为大多数的严重车祸都是人为错误造成的。 本篇文章将讨论什么是高级驾驶辅助系统&#xff08;ADAS&#xff09;&#xff0…

Linux基础-新手必备命令

概述系统工作系统状态检测文件与目录管理文件内容查阅与编辑打包压缩与搜索常见命令图解参考资料概述常见执行 Linux 命令的格式是这样的&#xff1a;命令名称 [命令参数] [命令对象]注意&#xff0c;命令名称、命令参数、命令对象之间请用空格键分隔。命令对象一般是指要处理的…