第五章 面向对象方法与UML
面向对象方法与UML
1.判断题
(1)UML是一种建模语言,是一种标准的表示,是一种方法。( √ )
(2)类图用来表示系统中的类和类与类之间的关系,它是对系统动态结构的描述。(×)
解释:类图是对系统的静态结构进行描述,而不是动态结构
(3)在面向对象的软件开发方法中,每个类都存在其相应的对象,类是对象的实例,对
象是生成类的模板。(×)
解释:类是对象的模板,而对象是类的实例
(4)顺序图用于描述对象是如何交互的,并且将重点放在消息序列上。(√ )
(5)继承性是父类和子类之间共享数据结构和消息的机制,这是类之间的一种关系。(√)
(6)多态性增强了软件的灵活性和重用性,允许用更为明确、易懂的方式去建立通用软
件,多态性和继承性相结合使软件具有更广泛的重用性和可扩充性。(√)
(7)类封装比对象封装更具体、更细致。(错)
解释 :对象封装和类封装是相同的概念,用于将数据和相关操作封装在一个单元中
(8)用例之间有扩展、使用和组合等几种关系。(√ )
(9)活动图用于显示动作及其结果,着重描述操作实现中所完成的工作,以及用例实例或类中的活动。(√)
(10)UML语言支持面向对象的主要概念,并与具体的开发过程相关。(√)
(11)部署图用于描述系统硬件的物理拓扑结构,以及在此结构上执行的软件。(√)
2.选择题
(1)面向对象技术中,对象是类的实例。对象有3种成分:(A)、属性和方法(或操作)。
A.标识
B.继承
C.封装
D.消息
(2)以下不是面向对象的特征的是(D)
A.多态性
B.继承性
C.封装性
D.过程调用
(3)汽车有一个发动机,汽车和发动机之间的关系是(B)关系。
A.组装
B.整体与部分
C.分类
D.一般与具体
(4)(D)是把对象的属性和操作结合在一起,构成一个独立的对象,其内部信息对外界是隐藏的,外界只能通过有限的接口与对象发生联系。.
A.多态性
B.继承
C.消息
D.封装
(5)面向对象的主要特征除了对象唯一性、封装和继承外,还有(D)。
A.兼容性
B.完整性
C.可移植性
D.多态性
(6)关联是建立(A)之间关系的一种手段。
A.对象
B.类
C.功能
D.属性
(7)面向对象软件技术的许多强有力的功能和突出的优点,都来源于把类组织成一个层次结构的系统,一个类的上层可以有父亲,下层可以有子类,这种层次结构系统的一个重要性质是(B),一个类获得其父亲的全部描述(数据和操作)。
B.继承性
C.复用性
D.多态性
A.兼容性
(8)所有的对象可以成为各种对象类,每个对象类都定义了一组(B)。
A.说明
B.类型
C.过程
D.方法
(9)通过执行对象的操作可以改变对象的属性,但它必须通过(B)的传递。
A.操作
B.消息
C.信息
D.继承
(10)UML是软件开发中的一个重要工具,它主要应用于(D)。
A.基于螺旋模型的结构化方法
B.基于需求动态定义的原型化方法
D.基于对象的面向对象的方法
C.基于数据的数据流开发方法
(11)(C)是从用户使用系统的角度描述系统功能的图形表达方法。
A.类图
B.活动图
C.用例图
D.状态图
(12)(B)描述了一组交互对象间的动态协作关系,它表示完成某项行为的对象和这
些对象之间传递消息的时间顺序。
A.类图
B.顺序图
C.状态图
D.协作图
3.简答题
(1)请简述面向对象的基本概念。
面向对象:按人们认识客观世界的系统思维方式,采用基于对象的概念建立模型,模拟客观世界分析、设计和实现软件的办法。通过面向对象的理念使计算机软件系统能与现实世界中的系统一一对应。
(2)与面向结构化开发过程相比,为什么面向对象能更真实地反映客观世界?
- 符合人类的思考习惯
- 稳定性好
- 可复用性好
- 可维护性好
(3)什么是面向对象技术?面向对象方法的特点有哪些?
面向对象技术(Object-Oriented Technology)是一种软件开发方法和设计范式,它以对象为基本构建单元,通过将数据和对数据的操作封装在一起来组织和管理复杂系统的开发。
面向对象技术的特点包括:
- 封装性(Encapsulation):封装是将数据和对数据的操作封装在一个对象中,隐藏对象内部的实现细节,只暴露特定的接口供外部使用。这种封装性能够提高代码的可维护性和安全性,并支持模块化开发。
- 继承性(Inheritance):继承是指通过建立类之间的父子关系,从已有的类(父类)派生出新的类(子类)。子类可以继承父类的属性和方法,并可以扩展或修改它们。继承能够提高代码的重用性和可扩展性,同时支持多态性的实现。
- 多态性(Polymorphism):多态是指不同类型的对象对同一消息做出不同的响应。通过多态性,可以在不考虑对象具体类型的情况下,以统一的方式调用对象的方法,从而增加代码的灵活性和可拓展性。
- 抽象性(Abstraction):抽象是将现实世界中的事物抽象为对象,只关注对象的属性和行为,而忽略对象的具体实现细节。通过抽象,可以建立对象的模型和层次结构,使系统的设计更加清晰和可理解。
- 消息传递(Message Passing):面向对象技术通过对象之间的消息传递来实现对象之间的通信和交互。对象通过发送消息来请求其他对象执行特定的操作,接收消息的对象根据自己的类型和状态来做出相应的响应。
这些特点使得面向对象技术适用于构建复杂的软件系统。它能够提高代码的可维护性、可重用性和可扩展性,使系统更容易理解和修改。面向对象技术也有助于团队的协作开发,因为对象的封装性和接口定义可以使不同的开发人员独立地工作在系统的不同部分上。
(4)什么是类?类与传统的数据类型有什么关系?
类是具有相似内部状态和运动规律的实体的集合。类的概念来自于人们认识自然、认识社会的过程。在这一程中,人们主要使用两种方法:由特殊到一般的归纳法和由一般到特殊的演绎法。在归纳的过程中,人们从一个个具体的事物中把共同的特征抽取出来,形成
一个一般的概念,这就是“归类”;在演绎的过程中人们又把同类的事物,根据不同的特征分成不同的小类,这就是“分类”;对于一个具体的类,它有许多具体的个体,把这些个体称为“对象”。类的内部状态是指类集合中对象的共同状态;类的运动规律是指类集合中对象的共同运动规律。
(5)与传统的软件工程方法相比,面向对象的软件工程方法有哪些优点?
2.面向对象的软件工程方法的优势
**1)符合人类的思维习惯。**通常人类在认识客观世界中的事物时,不仅会考虑到事物会哪些属性,还会考虑到事物能完成哪些操作,也就是说静态的属性及动态的动作特征都是组成事物的一部分,它们组合起来才能完整地表达一个事物。而面向对象的软件工程方法最重要的
特点就是把事物的属性和操作组成一个整体,以对象为核心,更符合人类的思维习惯。
**2)稳定性好。**传统的软件工程方法基于功能分析和功能分解。当软件功能发生变化时,很容易引起软件结构的改变。而面向对象的软件工程方法则是基于对象的概念,用对象来表示与待解决的问题相关的实体,以对象之间的联系来表示实体之间的关系。当目标系统的需求发生变化时,只要实体及实体之间的关系不发生变化,就不会引起软件系统结构的变化,而只需要对部分对象进行局部修改,就可以实现系统功能的扩充。因此,基于对象的软件系统稳定性比较好。
**3)可复用性好。**面向对象技术采用了继承和多态的机制,极大地提高了代码的可复用性。从父类派生出子类,一方面复用了父类中定义的数据结构和代码,另一方面提高了代码的可扩展性。
**4)可维护性好。**由于利用面向对象软件工程方法开发的软件系统稳定性好,可复用性好,而且采用了封装和信息隐藏机制,易于对局部软件进行调整,所以系统的可维护性比较好。
(6)UML的作用和优点有哪些?
统一建模语言(Unified Modeling Language,UML)是一种通用的可视化建模语言,可以用来描述、可视化、构造和文档化软件密集型系统的各种构件。
UML具有以下几个特点。
·统一标准。UML融合了当前一些流行的面向对象开发方法的主要概念和技术,是一种面向对象的、标准化的、统一的建模语言。UML提供了标准的、面向对象的、模型元素的定义和表示方法,并已经成为OM C的标准。面向对象
·可视化,表达能力强大。UML是一种图形化语言,系统的逻辑模型或实现模型都能用相应的图形清晰地表示,每一个图形表示符号后面都有良好定义的语义。UML可以处理与软件的说明和文档有关的问题。UML提供了语言的扩展机制,用户可以根据需要增加定义自己的构造型、标记值和约束等,它的强大表达能力使它可以用于各种复杂类型的软件系统的建模。
·独立于过程。UML是系统建模语言,独立于开发过程。
·容易掌握使用。UML概念明确,建模表示法简洁明了,图形结构清晰,容易掌握使用。学习UML应着重学习3方面的主要内容:UML的基本模型元素,把这些模型元素组织在一起的规则,UML语言中的公共机制。
·与编程语言的关系。用Java、C++等编程语言可以实现一个系统。支持UML的一些CASE工具(如Rose)可以根据UML所建立的系统模型自动产生Java、C++等代码框架,并且支持这些程序的测试及配置管理等环节的工作。
(7)如何着手从自然语言描述的用户需求中画出用例图?
- 理解用户需求: 仔细阅读和理解自然语言描述的用户需求。确保对需求的含义和要求有清晰的理解,以便正确地转化为用例图中的用例和参与者。
- 识别参与者(Actors): 根据用户需求确定参与者,即与系统交互的外部实体。参与者可以是人、其他系统或外部组织。将每个参与者命名,并确定其与系统的关系。
- 识别用例(Use Cases): 从用户需求中识别出主要的功能需求,并将其转化为用例。用例描述了系统对参与者的响应,表示系统的一项功能或服务。将每个用例命名,并确保用例是可测量和独立的。
- 建立参与者和用例之间的关系: 根据用户需求和用例之间的交互关系,绘制用例图中的参与者和用例之间的关系。使用关联关系(Association)将参与者和用例连接起来,并使用适当的关系符号表示交互类型,如包含(Include)、扩展(Extend)等。
- 添加用例的关联关系: 根据用户需求中的流程和条件,确定用例之间的关联关系。使用关联关系(Association)或包含关系(Include)表示用例之间的关系。
- 完善用例图: 完善用例图,包括添加用例的描述和优先级,标注参与者和用例的属性,以及添加适当的扩展点等。
- 验证用例图: 确保用例图准确地反映了用户需求,并与利益相关者进行验证和确认。根据反馈和交流进行必要的修改和调整。
(8)用例脚本有何作用?
- 明确用例行为: 用例脚本提供了对用例行为的明确描述。它详细说明了用例的步骤、预期结果和可能的异常情况。通过编写用例脚本,可以确保开发人员和测试人员对于用例的期望行为有清晰的共识。
- 指导开发: 用例脚本可以作为开发人员的参考,帮助他们理解系统的功能需求和用户行为。开发人员可以根据用例脚本来编写代码,确保实现的功能与用例需求一致。
- 指导测试: 用例脚本是测试人员进行测试的重要依据。测试人员可以根据用例脚本来设计测试用例,执行测试并验证系统的功能是否符合预期。用例脚本也有助于测试人员全面覆盖用例的各种情况和路径。
- 支持自动化测试: 用例脚本可以用于自动化测试的开发和执行。测试人员可以将用例脚本转化为自动化脚本,通过自动化工具和框架执行测试。这样可以提高测试效率,减少人工测试的工作量,并实现反复执行的测试用例。
- 需求追踪和变更管理: 用例脚本可以与需求进行关联,帮助跟踪系统需求的实现情况。如果需求发生变更,可以根据用例脚本进行相应的更新和调整,确保用例与需求保持一致。
(9)类间的外部关系有几种类型?每种关系表达什么语义?
类与类之间的关系有关联、依赖、泛化和实现等。
关联(Association):表达模型元素间的一种语义关系,是对具有共同的结构特性、行为特性、关系和语义的链的描述。UML中使用一条直线表示关联关系,直线两端上的数字表示重数。关联类是一种充当关联关系的类,和类一样具有自己的属性和操作。关联类使用虚线连接自己和关联符号。关联类依赖于连接类,没有连接类时,关联类不能单独存在。
依赖关系(Dependency): 依赖关系表示一个类在执行过程中需要另一个类的协助或信息。它是一种临时性的关系,表示一个类对另一个类的依赖。依赖关系通常在一个类的方法中作为参数类型、局部变量类型或方法返回类型出现
泛化关系:描述类的一般-特殊关系,特殊描述之间的一种分类学关系。
**实现关系:**将一个模型连接到另一个模型,通常情况下,后者是行为的规约(如接口),前者要求必须至少支持后者的所有操作。如果前者是类,后者是接口,则该类是后者的实现。
实现与泛化很相似,区别是泛化是针对同层级元素之间的连接,而实现是针对不同语义层上的元素的连接。例如,子类与父类关系是泛化,类与接口关系是实现。
4.应用题
(1)某市进行招考公务员工作,分为行政、法律和财经3个专业。市人事局公布所有用人单位招收各专业的人数,考生报名,招考办公室发放准考证。考试结束后,招考办公室发放考试成绩单,公布录取分数线,针对每个专业,分别将考生按总分从高到低进行排序。用人单位根据排序名单进行录用,发放录用通知书给考生,并给招考办公室留存备查。请根据以上情
况进行分析,画出顺序图。
(2)某学校领书的工作流程为:学生班长填写领书单,班主任审查后签名,然后班长拿领书单到书库领书。书库保管员审查领书单是否有班主任签名,填写是否正确等,将不正确的领书单退回给班长;如果填写正确则给予领书并修改库存清单;当某书的库存量低于临界值时,登记需订书的信息,每天下班前为采购部门提供一张订书单。用用例图、顺序图和活动图来描述领书的过程。
(3)当手机开机时,它处于空闲状态,当用户使用电话呼叫某人时,手机进人拨号状态。如果呼叫成功,即电话接通,手机就处于通话状态;如果呼叫不成功,例如对方线路有问题或关机,则拒绝接听。这时手机停止呼叫,重新进人空闲状态。手机进入空闲状态下被呼叫,手机进人响铃状态;如果用户接听电话,手机处于通话状态;如果用户未做出任何反应,可能他没有听见铃声,手机一直处于响铃状态;如果用户拒绝来电,手机回到空闲状态。
请按以上描述绘制出使用手机的状态图。