面向对象答案整理.docx
《面向对象答案整理.docx》由会员分享,可在线阅读,更多相关《面向对象答案整理.docx(26页珍藏版)》请在冰豆网上搜索。
面向对象答案整理
1理解面向对象的思想(封装性、继承性、多态性),作出一个简述。
客观世界是由对象组成,任何客观实体都是对象,复杂对象可以由简单对象组成。
具有相同属性和操作的对象可归纳成类,对象是类的一个实例。
类可以派生出子类,子类除了继承父类的全部特性外还可以有自己的特性。
对象之间的联系通过消息传递来维系。
封装是面向对象方法的一个重要原则,封装有两个含义:
结合性即将属性和方法结合;信息隐蔽性利用接口机制隐蔽内部细节。
继承性是指子类可以自动拥有父类的全部属性与操作的机制。
继承可分为单重继承和多重继承两类。
继承简化了对现实世界的描述定义子类时不必定义那些在父类中已经定义过的属性和操作使软件的复用性提高。
多态性是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
2什么是分解、耦合度和内聚度?
耦合度是从模块外部考察模块的独立性程度。
模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。
模块间耦合高低取决于模块接口的复杂性、调用的方式及传递的消息。
内聚度(Cohesion)是模块内部各成份(语句或语句段)之间的联系。
模块内部各成份联系越紧,即其内聚度越大,模块独立性就越强。
分解:
将系统分为更小成分
3什么是动态绑定?
动态绑定,是指在程序运行时才将消息所请求的操作与实现该操作的方法进行连接。
4什么是用例图,用例图有哪些部分组成。
用例是从用户的观点对系统行为的一个描述,特定的环璄下,特定的目标相关的系统与用户之间的一组可能的交互序列组成.
用例图显示谁将是相关的用户、用户希望系统提供什么服务以及用户需要为系统提供的服务。
用例图包含6个元素:
参与者(Actor)、用例(UseCase)、关联关系(Association)
包含关系(Include)、扩展关系(Extend)、泛化关系(Generalization)
5用例图中参与者之间的关系有哪些?
用例之间的关系有哪些?
参与者之间的关系:
泛化关系
用例之间的关系:
关联关系、包含关系、扩展关系、泛化关系
6试描述用例图在UML中的地位和作用。
地位:
用例图显示了用例和活动者之间、用例之间、以及活动者之间的关系,这种关系描述了模型元素之间的语义联系。
其源于客户需求分析,又称用例分析,是整个系统开发中的非常关键的过程。
作用:
用例图是使用统一建模语言设计新系统的起点,在初始阶段完成。
用例图提供了系统的一个概览,为系统提供给用户的功能进行说明。
从形式上讲,用例记录用户使用系统时从头到尾的一系列事件。
是用户和开发者一起深入剖析系统功能的起点。
在开发项目的初期,用例图可以描述现实世界中的活动和动机。
同时可以在项目后期改进用例图以反映用户界面和设计细节。
7掌握用例模型的获取方法。
参与者获取方法
谁使用系统的主要功能
谁需要系统支持他们的主要工作
谁来维护、管理系统使其能正常工作
系统需要控制哪些硬件
系统需要与哪些系统交互
对系统产生的结果感兴趣的是哪些人或哪些事物
用例获取方法:
识别用例最好的方法就是从分析系统的参与者开始,考虑每个参与者是如何使用系统的。
参与者要求系统提供哪些功能
参与者需要读、产生、删除、修改或存储系统中的信息有哪些类型
必须提醒参与者的系统事件有哪些
参与者必须提醒系统事件有哪些
8用例之间的扩展、泛化、包含三种关系有什么异同,请分别举例说明。
扩展关系
扩展用例被定义为基础用例的增量扩展。
n基础用例提供扩展点以添加新的行为。
n扩展用例提供插入片段以插入到基础用例的扩展点上
泛化关系
父用例也可以被特别列举为一个或多个子用例。
n子用例表示父用例的特殊形式。
n子用例从父用例处继承行为和属性,还可以添加行为或覆盖、改变继承的行为
包含关系
客户用例可以简单地包含提供者用例具有的行为,并把它所包含的用例行为作为自身行为的一部分。
9类图有哪些元素构成?
类之间的关系有哪些?
掌握UML中类图的绘制方法。
类、接口、协作、依赖关系、泛化关系、关联关系、实现关系
类之间的关系:
依赖关系、泛化关系、关联关系、实现关系
10简述类的聚合和组合关系的异同点。
聚合是一种特殊的关联,聚合更明确指出聚合的主体具有整体-部分关系.
组合是一种特殊的聚合,组合中的某个主体控制着另外一个主体的生命周期,而且他们还存在整体-部分关系.
聚合和组合的主要区别在于聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。
组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。
11对象图的适用场景以及它的优缺点。
对象图适用于论证类模型的设计以及对源代码进行分析和说明。
其优点是能够直观理解出系统运行时的实时状态,缺点是比较复杂,工作量大。
12掌握交互图(时序图与协作图)的绘制方法。
●交互图用来一步一步地描述用例地实现流程,包括流中需要什么对象,对象之间发送什么,什么角色启动流、消息按什么顺序发送等。
●交互图通过从用例建模中得到的用例文档说明、词汇表和用例图来创建。
如何创建交互图
创建交互图的步骤如下:
1.寻找对象
2.寻找角色
3获取消息,并加入图中。
13掌握活动图、状态图的绘制方法。
活动图绘制方法:
●第一步,定义活动图的范围
首先应该定义您要对什么建模。
单个用户案例?
一个用户案例的一部分?
一个包含多个用户案例的商务流程?
一个类的单个方法?
一旦您定义了所作图的范围,应该在其顶部,用一个标注添加标签,指明该图的标题和唯一的标示符。
您有可能也想要包括该图的时间甚至作者名。
●第二步,添加起始和结束点
每个活动图有一个起始点和结束点,因此您也要马上添加它们。
在《UML精粹》(UMLDistilled)(参见参考资料),Fowler和Scott认为结束点是可选的。
有时候一个活动只是一个简单的结束,如果是这种情况,指明其唯一的转变是到一个结束点也是无害的。
这样,当其他人阅读您的图时,他或她知道您已经考虑了如何退出这些活动。
●第三步,添加活动
如果您正对一个用户案例建模,对每个角色(actor)所发出的主要步骤引入一个活动(该活动可能包括起始步骤,加上对起始步骤系统响应的任何步骤)。
如果您正对一个高层的商务流程建模,对每个主要流程引入一个活动,通常为一个用户案例或用户案例包。
最后,如果您正对一个方法建模,那么对此引入一个活动是很常见的。
●第四步,添加活动间的转变
我的风格总是应该退出一个活动,即使它是转变到一个结束点。
一旦一个活动有多个转变时,您必需对每个转变加以相应标示。
●第五步,添加决策点
有时候,您所建模的逻辑需要做出一个决策。
有可能是需要检查某些事务或比较某些事务。
要注意的是,使用决策点是可选的。
例如,在图1中,我可以只是简单地将“接受”和“拒绝”两个转变直接接到“在大学报名(EnrollinUniversity)”活动。
"
●第六步,找出可并行活动之处
当两个活动间没有直接的联系,而且它们都必需在第三个活动开始前结束,那它们是可以并行运行的。
在图1中,您看到是有可能“参加简要介绍(attendoverview)”和“报名研讨班(enrollinseminars)”可以按任意次序进行,但是它们都得在您结束整个流程前完成。
状态图建模技术
建模步骤:
找出适合用模型描述其行为的类。
确定对象可能存在的状态。
确定引起状态转换的事件。
确定转换进行时对象执行的相应动作。
对建模的结果进行相应的精化和细化。
14类的设计原则包括哪些内容?
①单一职责原则(SRP)含义:
就一个类而言,应该仅有一个引起它变化的原因。
②开放——封闭原则(OCP)含义:
软件实体应该是可以扩展的,但是不可修改的;对于扩展是开放的,对于修改是封闭的。
③Liskov替换原则(LSP)含义:
子类型必须能够替换掉它们的基类型。
④依赖倒置原则(DIP)含义:
高层模块不应依赖于低层模块,二者都应该依赖于抽象;抽象不应该依赖于细节,细节应该依赖于抽象。
⑤接口隔离原则(DIP)含义:
不应该强迫客户依赖于它们不用的方法。
接口属于客户,不属于它所在的类层次结构。
15包图与组件图的概念,掌握包图的设计原则,包括稳定性和抽象度的衡量方法。
包图:
对于庞大的应用系统而言,其包含的类成百上千,再加上复杂的类间关系,处理复杂度太高。
这也就是引入了“包”这种分组事物构造块。
对语义上相关的元素进行分组;定义模型中的“语义边界”;
组件图:
描述了软件的各种组件和它们之间的依赖关系。
组件图中通常包含3个元素:
组件,接口,依赖关系.
包图的设计原则:
内聚性原则:
重用-发布等价原则(REP):
重用的粒度就是发布的粒度.当一个包的目的是为了重用,那么这个包下的所有类都应该是重用的。
共同重用原则(CRP):
如果重用了包中的一个类,那么就要重用包中的所有类。
共同封闭原则(CCP):
包中的所有类对于同一种性质的变化应该是共同封闭的。
一个变化若对一个封闭的包产生影响,则将对该包中的所有类产生影响,而对于其他包则不造成任何影响。
耦合性原则:
无环依赖原则(ADP):
在包的依赖关系图中不允许存在环
稳定依赖原则(SDP):
朝着稳定的方向进行依赖
稳定抽象原则(SAP):
包的抽象程度应该与其稳定程度一致
稳定性度量
Ca输入耦合度,依赖于该包内的类的数目;
Ce输出耦合度,依赖于该包外的类的数目;
不稳定性I=Ce/(Ca+Ce)
I=0表示该包具有最大的稳定性;
I=1表示该包具有最大的不稳定性。
抽象性度量
Nc包中类的总数;
Na包中抽象类的数目;
抽象性度量A=Na/Nc
A=0意味着包中没有任何抽象类;
A=1意味着包中只包含抽象类。
16掌握所介绍的各种设计模式的用途,类图,以及相关实例。
(策略模式、工厂模式、对象装饰模式等)
策略模式:
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
本模式使得算法可独立于使用它的客户而变化。
将这些算法硬编进使用它们的类中是不可取的,其原因如下:
需要功能的客户程序如果直接包含算法代码的话将会变得复杂,这使得客户程序庞大并且难以维护,尤其当其需要支持多种算法时问题会更加严重。
不同的时候需要不同的算法,我们不想支持我们并不使用的算法。
当功能是客户程序的一个难以分割的成分时,增加新的算法或改变现有算法将十分困难。
适用性
需要使用一个算法的不同变体。
算法使用客户不应该知道的数据。
可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的形式出现。
将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。
相关实例:
收银打折系统
观察者模式:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
适用性
当对一个对象的改变需要同时改变其它对象,而不知道具体有多少对象有待改变。
桥接模式:
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
效果
采用桥接模式可以获得以下好处。
(1)将接口与实现分离:
一个接口可以有若干实现,一个实现也可以为若干对象服务,表示逻辑的对象可以动态地与实现功能的对象组合。
(2)提高可扩充性:
逻辑和实现都可以通过类层次的扩展进行扩充。
在如下情况下可以使用桥接模式
(1)不希望在业务和业务的软件实现之间存在因定的绑定关系。
(2)希望类的抽象和实现部分可以扩充,进而实现不同的抽象接口和实现部分的组合。
(3)修改实现部分对用户不产生影响,即代码无须重新编译。
(4)复用实现部分。
由于实现部分所处的层次较低,因此可以被多种业务模块复用。
对象装饰模式:
在界面设计中,一种较为灵活的实现方式是将组件嵌入另一个对象中,我们称这个嵌入的对象为装饰。
这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。
透明性使得你可以递归的嵌套多个装饰,从而可以添加任意多的功能。
动态地给对象添加一些额外的职责,就功能来说装饰模式相比生成子类更为灵活
使用场合
在以下情况下应当使用装饰模式:
1.需要扩展一个类的功能,或给一个类增加附加责任。
2.需要动态地给一个对象增加功能,这些功能可以再动态地撤销。
3.需要增加由一些基本功能的排列组合而产生的非常大量的功能,从而使继承关系变得不现实。
实例:
穿衣服,帽子,鞋子等。
工厂模式:
定义一个用于创建对象的接口,让子类决定实例化哪一个类,即使一个类的实例化延迟到其子类。
问题:
对具有共同父类的子类对象的创建,一般使用new方式实现,带来程序维护性问题。
如何解决:
集中创建对象,通过参数区分不同子类对象,即工厂模式。
简单工厂模式优缺点:
模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。
但由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。
如果增加新产品必须修改工厂角色的源码。
17.什么是实体类、边界类和控制类?
为什么将分析类划分成这三种类型
类的种类有实体类,边界类和控制类。
实体类:
判别特征是它的对象持有应用的大部分数据,一般实体类的对象是持久的,也就是说它们的存在超过一个会话的生命期,或者有时存在于系统的整个生命期间。
边界类:
参与者用边界类的对象与系统交互,边界类还可以用于建立与另一个系统的通信,因此边界类将系统与系统外部的变化隔离开。
控制类:
用于描述一个用例所具有的事件流控制行为,控制一个用例中的事件顺序
将分析类划分成这三种类型的好处在于:
所产生的类更小更专门化;这种划分将易变的外部界面与系统基本功能进行了屏蔽,使分析模型更易于变化。
(分析模型是对客观事物或现象的一种描述)
18请简要阐述在软件开发过程中使用UML的必要性以及好处。
必要性:
软件系统是产品,开发者和使用者是不同群体,对于一个复杂的软件系统,开发必须由多个方面人员参与、合作共同完成.在试图交流、理解一个系统时,可根据人们所关心的某一方面的问题,查阅对应的系统模型,从而得到对此问题的理解。
如果整个系统的功能、原理和结构没有一个全面而详细的记载的话,将会对此软件产品的开发、维护和升级产生不利的结果。
uml的好处有:
1.用统一而直观的图符来帮助不同角色(客户,分析者,设计者,实现者...)进行良好的沟通
2.开发的不同阶段(分析,设计,实施,测试)均采用一致的模型,从而保证了阶段顺利切换.
19在绘制类图时,第一步就是发现类,最常用的方法是什么?
请简要说明它的使用方法。
名词动词分析法
·通过事件流寻找类
分析事件流中的名词,将性质相同的归为一类;
去除不恰当的或含糊的,去除应归为属性的项目。
命名所获取的类。
·如何确定属性
注意需求中的名词;
注意用例模型或需求文档中的名词,数据表。
·如何确定方法
实现:
实现业务功能,通过事件流中的动词分析进行捕捉;
管理:
管理对象的创建或构造;
访问:
查询或修改每个类的属性;
帮助:
说明类完成任务所需要的操作。
20简述面向对象分析过程。
面向对象分析的目的在于建模。
面向对象分析的一般步骤如下:
1、获取客户对系统的需求,包括标识场景和用例,以及建立需求模型(根据需求所做的简单的框图);
2、用基本的需求为指南来选择类和对象;
3、定义类的结构和层次;
4、建造对象-关系模型;
5、建造对象行为模型(即动态模型,包括交互模型,状态模型,有时序图,协作图,状态图);
6、利用用例场景来复审分析模型。
21简述面向对象设计过程。
面向对象设计是将面向对象分析所创建的分析模型转换为设计模型。
面向对象设计的目标是产生一个满足用户需求,并且完全可实现的面向对象设计模型。
1、系统设计
⑴将分析模型划分成子系统
⑵标识问题本身的并发性,并为子系统分配处理器
⑶任务管理设计
⑷数据管理设计
⑸资源管理设计
⑹人机界面设计
⑺子系统间的通信
2、对象设计;
对象设计是为每个类的属性和操作做出详细的设计,并设计连接类与它的协作者之间的消息规约。
⑴对象描述的方式
①协议描述:
描述对象的接口,即定义对象可以接收的消息以及接收到消息后完成的相关操作;
②实现描述:
描述传送给对象的消息所蕴含的每个操作的实现细节,实现细节就是关于描述对象属性的数据结构的内部细节和描述操作的过程细节。
⑵为对象中的属性和操作设计数据结构和算法。
3、消息设计;
使用对象间的协作和对象—-关系模型,设计消息模型。
4、复审。
复审设计模型并在需要时迭代。
22请观察一部电梯的运行方式,并用状态图描述它的各种状态(简化为“第一层”、“向上运动”、“向下运动”、“等待”、“运动到第一层”五种状态)和可能转移。
23.简单的电子表包含两个按钮A和B,系统启动后进入显示时分秒时间状态。
在显示时间
状态下按钮B用于切换两种时间显示方式,即显示时分秒和显示年月日。
而在显示时分秒
状态下,按钮A用于切换四种操作方式:
显示时间、设置小时、设置分钟和设置秒钟;在
显示年月日状态下按钮A用于切换显示时间、设置年份、设置月份和设置日期四种操作方
式。
试画出其状态转换图。
24某“订货”用例的文字描述如下:
接收顾客的订单、确认订单是否已付款。
若未付款,则取消并退回订单;若已付款,则检查每个订单项。
对有货的订单项更新库存,同时向顾客发放提货单;对于缺货的订单项则向顾客发放缺货单,同时向采购人员发放采购单。
请用活动图描述这一用例。
25掌握UML中各种模型图的作用,画法,结合“网上学生选课系统”仔细理解。
第一类是用例图,从用户角度描述系统功能,并指出各功能的操作者。
第二类是静态图(Staticdiagram),包括类图、对象图和包图。
其中类图描述系统中类的静态结构。
不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和操作)。
类图描述的是一种静态关系,在系统的整个生命周期都是有效的。
对象图是类图的实例,几乎使用与类图完全相同的标识。
他们的不同点在于对象图显示类的多个对象实例,而不是实际的类。
由于对象存在生命周期,因此对象图只能在系统某一时间段存在。
包由包或类组成,表示包与包之间的关系。
包图用于描述系统的分层结构。
第三类是行为图(Behaviordiagram),描述系统的动态模型和组成对象间的交互关系。
其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。
通常,状态图是对类图的补充。
在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图。
而活动图描述满足用例要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。
第四类是交互图(Interactivediagram),描述对象间的交互关系。
其中顺序图显示对象之间的动态合作关系,它强调对象之间消息发送的顺序,同时显示对象之间的交互;合作图描述对象间的协作关系,合作图跟顺序图相似,显示对象间的动态合作关系。
除显示信息交换外,合作图还显示对象以及它们之间的关系。
如果强调时间和顺序,则使用顺序图;如果强调上下级关系,则选择合作图。
这两种图合称为交互图。
第五类是实现图(Implementationdiagram)。
其中构件图描述代码部件的物理结构及各部件之间的依赖关系。
配置图定义系统中软硬件的物理体系结构。
网上选课系统建模类图范例
根据前面课程的分析可知选课系统可设计如下
类:
(1)界面FormObject
(2)控制对象ControlObject(3)课程Course
角色类:
(1)管理员Register
(2)学生Student
(3)学生和管理员的父类People(4)数据库Database
时序图:
协作图:
26无向图包括点集和边集,其中边集的边连接着点集的一对点,如下图所示。
试用类模型
描述无向图,只需描述其结构,不需描述其中点的位置和边的长度等信息。
27简单有向图与无向图类似,只是边是有向的,如下图所示。
试用一个类模型描述有向图。
28下面类图是一个图形交互编辑器的部分类图,其中sheet(页面)是Line和Box的集合,
selection是选中的Line和Box的集合。
在下面的类图中没能表示一个Line或Box元素只能属于sheet或selectio之一的约束,试修改该类图,使其能表示该约束关系。
29优化下面的类图,使其在没有确认专栏(Culumn)之前可以确定文本行(Line)在哪个
页面(Page)上。
30在图33中最上面的对象的名称是什么?
该图表示的意思是什么?
请绘制出与其相应的
类图。
最上面的对象的名称是China,该图表示中国是由福建,四川等省份组成的。
相应的类图如下:
31.用面向对象方法建立一个现实问题的分析模型。
题目如下:
学校管理系统要存储下列数据:
(1)系:
系名,系主任
学生:
学号,姓名,学生所属系
教师:
工作证号,姓名,教师所属系
研究生:
专业方向
教授:
研究领域
课程:
课程号,名称,学分
(2)学生每学期要选修若干门课程,每门课有一个考试成绩;莫个学期开设的每门课程只有一
个任教教师;一个教师只任教一门课;一个教师有能力讲授多门课程,一门课程也可以有多位
教师能够讲授;每个研究生只能跟随一位教授.
试画出表示上述数据的类模型。
32.分析下面的类图,画出新的类图,将原图中的多对多的关系转换为1:
M(一对多)关系。
33.信用卡可能处于“开放”和“关闭”状态,其中“开放”状态可以直接进入“关闭”状态,而从“关闭”状态必须提供密码验证才能进入“开放”状态,“开放”状态又包括“透支”和正常状态之间的变化,当剩余金额少于0,或者使用额度大于剩余金额,或者结算余额小于0时进入透支状态,反之则为正常状态。
画出信用卡的状态转换图。
34.请判断以下类图中的类关系是否合适,并说明理由。
飞机有机翼、机身、驾驶舱
商店里的电器,一台电器可以是一台洗衣机,也可以不是;一台电器可以是一台电视机,也可以不是;一台电器可以是一台空调,也可以不是。
公司员工很多,包括程序员、分析员与项目经理等。
35.仔细分析“语音邮箱系统”的“保留语音信息”和“拨打邮箱号”的用例事件流描述,请找出里面的对象,并画出时序图或协作图。
用例1:
拨打邮箱号
呼叫者拨打语音邮件系统的主号码;
语音邮件系统发出提示音:
输入邮箱号码并加#号
呼叫者输入接收者的邮箱号
语音邮件系统发出问候语:
已进入XX的邮箱,请留言。
用例2:
保留语音信息
呼叫者“拨打邮箱号”
呼叫者说出信息
呼叫者挂断电话
语音邮件系统将记录的信息存放在接收者的邮箱中。
36.假设某高校需要建立一个档案管理系统,而你是该软件系统的负责人。
你所在的软件公司与高校一致同意系统的构建采用面向对象方法。
作为开发负责人,请你结合本课程中的学习知识,提供参考的软件体系结构设计方案,描述开发这个系统的过程,并写出开发过程的每个步骤中你认为应该用到的主要技术。
在面向对象技术中,对已有的