第8章 · 播客 第5集
系统分析与设计方法 · 面向对象基础与四大方法
🎙️ 本集播客:第5集:对象三要素、实体类边界类控制类的三方辨析(第 11 题)、继承与泛化的方向、多态四形式与重载改写的本质区别(第 6 题)、模板类与消息通信,再盘点 OOA/OOD、Booch、OMT、OOSE 四大方法。 语音由微软 Edge 神经网络语音预生成(女声·晓伊,男声·云希)。点击下方任意对话可直接从该句开始播,当前句朗读时下一句已预先加载,无缝衔接。
明
阿明
第二座大山,面向对象。它到底好在哪?
雅
小雅
原文的定性:面向对象方法以客观世界中的对象为中心,其分析和设计思想符合人们的思维方式,分析和设计的结构与客观世界的实际比较接近,容易被人们接受。两个特点要背:一是分析和设计的界面并不明显,它们采用相同的符号表示,能够方便地从分析阶段平滑地过渡到设计阶段;二是用户的需求经常会发生变化,但客观世界的对象及对象间的关系比较稳定,因此用面向对象方法分析和设计的结构也相对比较稳定。
雅
小雅
先抠基本概念。对象是系统中用来描述客观事物的一个实体,它由三个要素组成:对象标识,也就是名称;属性,也叫状态、数据、成员变量;服务,也叫操作、行为、方法。三要素被封装为一个整体,以接口的形式对外提供服务。考试问「对象的三个要素」,答对象标识、属性、服务,别名也要认得。
明
阿明
那类呢?跟对象什么关系?
雅
小雅
类是对具有相同属性和服务的一个或一组对象的抽象。类与对象是抽象描述和具体实例的关系,一个具体的对象被称为类的一个实例。原文还给了个现实例子:每个对象都有它的操作,例如书籍的页数,收音机的频道、按钮等属性,以及收音机的切换频道等操作。
明
阿明
听说系统设计时类要分三种类型?
雅
小雅
对,实体类、边界类、控制类,这是本章辨析题的重仓,练习题第 11 题就考实体类。逐个来。实体类映射需求中的每个实体,实体类保存需要存储在永久存储体中的信息,例如在线教育平台系统可以提取出学员类和课程类,它们都属于实体类。实体类通常都是永久性的,它们所具有的属性和关系是长期需要的,有时甚至在系统的整个生存期都需要。
雅
小雅
实体类还有几条识别口诀:它是对用户来说最有意义的类,通常采用业务领域术语命名,一般来说是一个名词;在用例模型向领域模型的转化中,一个参与者一般对应于实体类;通常可以从 SRS 中的那些与数据库表,也就是需要持久存储,对应的名词着手来找寻实体类。最要紧的一句:通常情况下,实体类一定有属性,但不一定有操作。
明
阿明
第 11 题问实体类的主要特征,正确选项是「保存需要存储在永久存储体中的信息,通常有属性但不一定有操作」。
雅
小雅
对。干扰项逐个拆:B 选项「用于控制用例工作,通常有属性但不一定有方法」——前半句是控制类的定义,后半句「有属性不一定有方法」恰好说反了;C 选项「位于系统与外界的交接处,通常没有属性也没有方法」——前半句是边界类,后半句错,边界类可以既有属性也有方法;D 选项「用于封装在用例内外流动的信息,一定没有属性」——前半句是边界类,后半句错。这道题每个选项都缝合了两个类的特征,你把三个类的「属性与操作」口诀背死才能不被绕进去。
雅
小雅
控制类的完整画像:控制类是用于控制用例工作的类,一般是由动宾结构的短语,也就是动词加名词或名词加动词,转化来的名词,例如用例身份验证可以对应于一个控制类身份验证器,它提供了与身份验证相关的所有操作。控制类用于对一个或几个用例所特有的控制行为进行建模,控制对象通常控制其他对象,因此它们的行为具有协调性。当系统执行用例的时候就产生了一个控制对象,控制对象经常在其对应的用例执行完毕后消亡。关键口诀:通常情况下,控制类没有属性,但一定有方法。
雅
小雅
边界类的完整画像:边界类用于封装在用例内、外流动的信息或数据流,位于系统与外界的交接处,包括所有窗体、报表、打印机和扫描仪等硬件的接口,以及与其他系统的接口。每个参与者和用例交互至少要有一个边界类。常见的边界类有窗口、通信协议、打印机接口、传感器和终端等,在系统设计时产生的报表都可以作为边界类来处理。边界对象将系统与其外部环境的变更分隔开,使这些变更不会对系统的其他部分造成影响。关键口诀:通常情况下,边界类可以既有属性也有方法。
明
阿明
三方口诀连起来:实体一定有属性不一定有操作、控制没有属性一定有方法、边界既有属性也有方法。
雅
小雅
再加定位词:实体存永久数据、控制管用例流程、边界守系统出入口。这样选项缝合题怎么缝都拆得开。接着说继承与泛化。继承是面向对象方法中重要的概念,用来说明特殊类,也就是子类,与一般类,也就是父类的关系;而通常用泛化来说明一般类与特殊类的关系,也就是说它们是一对多关系。
雅
小雅
原文的例子:交通工具是自行车和小轿车的泛化;自行车和小轿车从交通工具中继承。练习题第 5 题问「用于描述一般类与特殊类之间关系的是」,选项有多态、重载、继承与泛化、消息通信,答案继承与泛化。多态和重载是实现手段,消息通信是对象间联系的途径,都不描述类层次。
明
阿明
那多态呢?我记它有四种形式。
雅
小雅
多态,即多种形式,性是指一般类中定义的属性或服务被特殊类继承后,可以具有不同的数据类型或表现出不同的行为,通常是使用重载和改写两项技术来实现的。一般有 4 种不同形式的多态:参数多态、包含多态、重载多态、强制多态。还有两分法要背:参数多态和包含多态称为通用多态,重载多态和强制多态称为特定多态。另有一个别名:重载也称为过载、重置。
明
阿明
练习题第 6 题考重载和改写的本质区别。
雅
小雅
这是希赛教育专家提示的原话:虽然重载和改写都是在多种潜在的函数体中,选择和调用某一个函数或方法并对其进行执行,但它们的本质区别在于:重载是编译时执行的,也就是静态绑定,而改写则是运行时选择的,也就是动态绑定。第 6 题正确选项就是「重载是编译时执行(静态绑定),改写是运行时选择(动态绑定)」。方向绝不能记反——说「重载是运行时绑定、改写是编译时执行」的选项是标准的镜像干扰。
明
阿明
重载编译时、改写运行时,绑定一个静态一个动态。
雅
小雅
两个小概念带过。模板类,也称为类属类,它用来实现参数多态机制。一个类属类是关于一组类的一个特性抽象,它强调的是这些类的成员特征中与具体类型无关的那些部分,而用变元来表示与具体类型有关的那些部分。注意模板类实现的是参数多态,这是个小挂钩。
雅
小雅
消息和消息通信:消息就是向对象发出的服务请求,它通常包括提供服务的对象标识、消息名、输入信息和回答信息。消息通信则是面向对象方法学中的一个重要原则,它与对象的封装原则密不可分,为对象间提供了唯一合法的动态联系的途径。注意「唯一合法」这四个字,判断题爱考。
明
阿明
概念齐了,该盘点那几个有名的 OOA 方法了吧?
雅
小雅
面向对象分析的目标是开发一系列模型,这些模型描述计算机软件,当它工作时以满足一组客户定义的需求。比较流行的方法包括 OMT、OOA、OOSE、Booch 方法等,而 OMT、OOSE、Booch 最后则统一成为 UML——这句话是考点,问「UML 是哪些方法统一的」,答 OMT、OOSE 和 Booch,没有 Coad 的 OOA。逐个看。
雅
小雅
第一,OOA/OOD 方法,由 Peter Coad 和 Edward Yourdon 提出。OOA 模型中包括 5 个层次:主题、对象类、结构、属性和服务;需经过 5 个步骤完成整个分析工作:标识对象类、标识结构与关联(包括继承、聚合、组合、实例化等)、划分主题、定义属性、定义服务。两个 5 要分开记:5 个层次、5 个步骤。
雅
小雅
OOD 中将继续贯穿 OOA 中的 5 个层次和 5 个活动,它由 4 个部分组成:人机交互部件、问题域部件、任务管理部件、数据管理部件,其主要活动就是这 4 个部件的设计工作。四个部件各自干什么:设计问题域部分——OOA 的结果恰好是 OOD 的问题域部件,分析的结果在 OOD 中可以被改动或增补,但基于问题域的总体组织框架是长时间稳定的;
雅
小雅
设计人机交互部件——加入人机交互的设计和交互的细节,包括窗口和输出报告的设计,可以用原型来帮助实际交互机制进行开发和选择;设计任务管理部分——主要是识别事件驱动任务,识别时钟驱动任务,识别优先任务和关键任务,识别协调者,审查每个任务并定义每个任务;设计数据管理部分——提供了在数据管理系统中存储和检索对象的基本结构,其目的是隔离数据管理方法对其他部分的影响。
明
阿明
Coad 五层次五步骤、OOD 四部件。Booch 呢?
雅
小雅
Booch 认为软件开发是一个螺旋上升的过程,每个周期中包括 4 个步骤:标识类和对象、确定类和对象的含义、标识关系、说明每个类的接口和实现。它的开发过程是一个迭代的、渐进式的系统开发过程,可以分为宏过程和微过程两类。宏过程用于控制微过程,是覆盖几个月或几周所进行的活动,包括 5 个主要活动:负责建立核心需求的概念化,为所期望的行为建立模型的分析,建立架构的设计,形成实现的进化,以及管理软件交付使用的维护。
雅
小雅
微过程则基本上代表开发人员的日常活动,由 4 个重要、没有顺序关系的步骤组成:在给定的抽象层次上识别出类和对象,识别出这些类和对象的语义,识别出类间和对象间的关系,实现类和对象。宏五微四,而且微过程的四个步骤没有顺序关系,这个「没有顺序关系」是细节考点。
明
阿明
OMT 的三个模型我记得考过。
雅
小雅
OMT 是对象建模技术的缩写,由 Jam Rambaugh 及其同事合作开发,主要用于分析、系统设计和对象设计。三个模型逐个记:对象模型,是静态的、结构化的系统的数据性质,通常采用类图;动态模型,是瞬时的、行为化的系统的控制性质,通常使用状态图;功能模型,表示变化的系统的功能性质,通常使用数据流图。配对口诀:对象模型对类图、动态模型对状态图、功能模型对数据流图,打乱重配就是错项。
雅
小雅
最后 OOSE 方法,是面向对象软件工程的缩写,由 Ivar Jacobson 提出。它在 OMT 的基础上,对功能模型进行了补充,提出了用例的概念,最终取代数据流图进行需求分析和建立功能模型。两个记忆点:OOSE 是 Ivar Jacobson 提出的,它带来了用例。
明
阿明
四位创始人的名字也对上号:Coad 和 Yourdon、Booch、Rambaugh、Jacobson。
雅
小雅
对,特别是 Jacobson 和用例的绑定,后面 UML 那集还会出现他。本集必背:对象三要素是对象标识、属性、服务,封装成整体以接口对外;类分实体类、控制类、边界类,实体一定有属性不一定有操作、控制没有属性一定有方法、边界既有属性也有方法;继承说子类与父类、泛化说一般与特殊、一对多;多态四形式是参数、包含、重载、强制,前两个是通用多态后两个是特定多态;
雅
小雅
重载编译时静态绑定、改写运行时动态绑定;模板类实现参数多态;消息通信是对象间唯一合法的动态联系途径;OMT、OOSE、Booch 统一成 UML;Coad 的 OOA 五层次五步骤、OOD 四部件;Booch 螺旋上升、宏过程五活动、微过程四步无顺序;OMT 三模型配类图、状态图、数据流图;OOSE 是 Jacobson 提出并带来用例。
明
阿明
四大方法的历史脉络清楚了。
雅
小雅
下一集讲本章的第三座山:统一建模语言 UML。它是什么、结构三件套,特别是 14 种图怎么按静态动态分组、4 加 1 视图各管什么,还有用例图里参与者、用例和包含扩展两种关系——练习题第 7 题和第 8 题都在那儿。