【软件工程习题(含参考答案)】面向对象章节

第一题: 面向对象设计应该遵循哪些准则? 简述每条准则的内容,并说明遵循这条准则的必要性。

答:

面向对象设计准则:

1、模块化;把程序整体划分成一个个独立命名且可独立访问的完成单个子功能的模块。采用模块化,软件结构清晰,不仅容易设计也容易阅读和理解,有利于软件开发工程的组织管理

2、抽象:抽出事物的本质特性,暂不考虑其细节,使设计从具体实现方法中超脱。包括程序抽象、数据抽象、参数抽象。

3、信息隐藏:对象封装。有利于测试期间和以后的软件维护期间进行软件的修改。

4、弱耦合:包括交互耦合、继承耦合。

5、强内聚:包括服务内聚、类内聚、一般-特殊内聚。

6、可重用:是提高软件开发生产率和目标系统质量的重要途径。

第二题: 下面叙述对一个计算机辅助设计(CAD)软件的需求:该CAD软件接受由工程师提供的二维或三维几何图形数据。工程师通过用户界面与CAD系统交互并控制它,该用户界面应该表现出良好的人机界面设计特征。几何图形数据及其他支持信息都保存在一个CAD数据库中。开发必要的分析、设计模块,以产生所需要的设计结果,这些输出将显示在各种不同的图形设备上。应该适当地设计软件,以便与外部设备交互并控制它们。所用的外部设备包括鼠标、数字化扫描仪和激光打印机。进一步精化上述要求,把CAD软件的功能分解成若干个子功能于下表.;为了用代码行技术估算软件规模,应该针对每个子功能都分别估计出下述3 个值:乐观值(即最小规模a),悲观值(即最大规模b)和可能值(即最可能规模m)。分别算出这3种规模的平均值,然后用下式的加权平均法计算每个子功能规模,结果示于下表. 

代码行技术的估算表
未调整的功能点数表 
复杂性因素表

要求:

(1)根据以上未调整的功能点数表和复杂性因素表,用功能点技术估算每个子功能的规模; 

(2)从历史数据得知,开发这类系统的平均生产率是620LOC/PM,如果软件工程师的平均月工资是8000元,请估算开发本系统的工作量和成本。

(3)如果从历史数据得知,开发这类系统的平均生产率是6.5FP/PM,请估算开发本系统的工作量和成本。

答:

 

(1)技术复杂性因子:

  TCF = 0.65+0.01×DI = 1.14 

最后计算功能点数:

          FP  =UFP × TCP

            =31  × 1.14

            =363 

PS: DI在“复杂性因素表”中已经给出数值了;以及,UFP在“未调整的功能点数表”中也给出数值了。

(2) 用代码行估算,开发本系统的工作量为

     E=33200/620 ≈ 54PM

成本为:8000×54=432000(元) 

 

(3) 用功能点技术估算,开发本系统的工作量为

    E=363/6.5 ≈56 PM

成本为: 8000×56=448000(元) 

第三题: 面向对象程序设计语言主要有哪些技术特点?

答:面向对象程序设计语言的技术特点主要有:封装、多态、继承。

其中,多态有分为重载和重写。

另外,面向对象的编程思想更加接近现实度的事物,有这样几点好处:

1.是编知程更加容易.因为面向对象更接近于现实.所以你可以从现实的东西出发.进行道适当的抽象.

2.在软件工程上.面向对象可以使工程更加回模块化.实现更低的耦合和更高的内聚.

3.在设计模式上.面向对象可以更答好的实现开-闭原则.也使代码更易阅读.

第四题: CMM 的基本思想是什么 ? 为什么要把能力成熟度划分成 5 个等级

答:

1、CMM的基本思想:鉴于问题往往由管理软件过程的方法不当所引起,因此软件技术的运用并不会自动提高软件的生产率和质量,提高软件生产率和软件质量的关键,是改进对软件过程的管理。

 

2、能力成熟度模型有助于软件开发机构建立一个有规律的、成熟的软件过程。对软件过程的改进不可能一蹴而就,只能是在完成一个又一个小的改进步骤基础上不断进行的渐进过程。因此,CMM把软件过程从无序到有序的进化过程分成5个阶段,并把这些阶段排序,形成5个逐层提高的等级。这5个成熟度等级定义了一个有序的尺度,用以测量软件机构的软件过程成熟度和评价其软件过程能力,这些等级还能帮助软件机构识别出其现有的软件过程的缺陷,指出应该做哪些改进,并且帮助他们把应做的改进工作排出优先次序。

第五题: 什么是基线?为什么要建立基线

答:

1、基线:已通过正式复审的规格说明或中间产品,可作为进一步开发的基础,且只有通过正式的变化控制过程才能改变它。

 

2、建立基线的三大原因是:重现性、可追踪性和报告。

其中,

①重现性是指及时返回并重新生成软件系统给定发布版的能力,或者是在项目中的早些时候重新生成开发环境的能力。

②可追踪性建立项目工件之间的前后继承关系。其目的在于确保设计满足要求、代码实施设计以及用正确代码编译可执行文件。

③报告来源于一个基线内容同另一个基线内容的比较。基线比较有助于调试并生成发布说明。

第六题:对象和属性之间有何区别 ?

答:对象是对客观世界实体的抽象,它是描述实体静态属性的数据和代表实体动态行为的操作结合在一起所构成的统一体。属性只不过是对象的一种特性,它是组成对象的一种成分。

第七题:为什么应该尽量使用面向对象语言来实现面向对象分析和设计的结果

答:面向对象语言,能够更完整、更准确地表达问题域语义,侧重在3个重要优点:

(1)一致的表示方法、

(2)可重用性、

(3)可维护性。

因此,一般说来,应该尽量选用面向对象语言来实现面向对象分析、设计的结果。

第八题: 解释以下名词:  

答:

1、COCOMO2模型:构造性成本模型,该模型把软件开发工作量表示成代码行数(KLOC)的非线性函数。

2、面向对象的多态性:子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。

3、面向对象的方法:包括面向对象分析、设计和程序设计。

4、面向对象的继承性:一个类直接继承其父类的全部描述(数据和操作)

5、面向对象的高内聚低耦合:内聚衡量一个模块内各个元素彼此结合的紧密程度,在设计时应该力求做到高内聚;降低耦合度,即降低方法与外界的耦合程度,不使用全局信息。

6、Gantt(甘特)图:应用广泛的制定进度计划的工具,能很形象地描绘任务分解情况,以及每个子任务(作业)的开始时间和结束时间。

7、信息隐藏(Data Hiding) :一个模块内包含的信息(过程和数据)对于不需要这些信息的模块是不能访问的

8、面向对象的属性:类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。

第九题:王大夫在小镇上开了一家牙科诊所 。 他有一个牙科助手、一个牙科保健员和一个接 待员 。 王大夫需要一个软件系统来管理预约 。 当病人打电话预约时 ,接待员将查阅预约登记表 ,如果病人申请的就诊时间与已定下的预约时间冲突 ,则接待员建议一个就诊时间以安排病人尽早得到诊治。 如果病人同意 建议的就诊时间 ,接待员将输入约定时间和病人的名字 。 系统将核实病人的名字并提供 记录的病人数据 ,数据包括病人的病历号等 。 在每次治疗或清洗后 ,助手或保健员将标记 相应的预约诊治已经完成 ,如果必要的话会安排病人下一次再来 。 系统能够按病人姓名和按日期进行查询 ,能够显示记录的病人数据和预约信息。 接 待员可以取消预约 ,可以打印出前两天预约尚未接诊的病人清单。 系统可以从病人记录 中获知病人的电话号码 。 接待员还可以打印出关于所有病人的每天和每周的工作安排 。

(1). 建立上述牙科诊所管理系统的对象模型;

(2). 建立牙科诊所管理系统的用例模型;

(3). 用数据流图建立所述牙科诊所管理系统的功能模型;

(4). 画出所述牙科诊所管理系统的状态图。

答:

1、建立牙科诊所管理系统的对象模型

(1) 从对牙科诊所问题的陈述中,对象的候选者(名词):王大夫、小镇、牙科诊所、牙科助手、牙科保健员、接待员、软件系统、预约、病人、预约登记表、就诊时间、预约时间、约定时间、系统、名字、记录的病人数据、病历号、姓名、日期、预约信息、病人清单、病人记录、电话号码、每天工作安排、每周工作安排。

  1. “名字”和“姓名”是同义词,应该作为病人和预约登记表的属性;
  2. “记录的病人数据”实际上是“病人记录”,可以统一使用"病人记录”作为对象名;
  3. “病人清单”是已预约但尚未就诊的病人名单,应含病人姓名、预约就诊时间等内容,它和“预约信息”内容基本相同,可保留“病人清单”作为问题域中的对象。

(2)另外,问题域的对象之间关联关系:

  1. 牙科诊所诊治多名病人;
  2. 一位病人有一份病人记录;
  3. 一位病人可能预约多次也可能一次也没有预约;
  4. 牙科诊所在一段时间内将打印多份病人清单;
  5. 牙科诊所开业以来已经建立了多份预约登记表;
  6. 预约登记表中记录了多位病人的预约;
  7. 根据预约登记表在不同时间可以制定出不同的工作安排。

2、建立牙科诊所管理系统的用例模型。

先找出系统的用户,然后再根据用户对系统的功能需求确定用例。

3、用数据流图建立所述牙科诊所管理系统的功能模型 。

4 画出所述牙科诊所管理系统的状态图

第十题:面向对象软件的哪些特点使得测试和维护变得比较容易 ? 哪些特点使得测试和维护变得比较困难

答:面向对象软件的模块独立特点使得测试和维护变得比较容易;代码重构特点使得测试和维护变得比较困难。

第十一题: 为什么说参数化类有助于提高可重用性

答:

在实际的应用程序中,有一些软件元素,从逻辑功能看,彼此是相同的,所不同的主要是处理的对象类型不同。

参数化类就是使用一个或者多个类型去参数化一个类的机制,有了这种机制,程序员可以先定义一个参数化的类模块,再使用时把数据类型作为参数传递进来,在不同的应用程序中重复使用。

第十二题: 为什么推迟关键路径上的任务会延迟整个项目 ?

答:

关键路径定义为一组任务(称为关键任务),这组任务决定了完成项目所需要的最短时间。

如果位于关键路径上的一个关键任务的完成时间被推迟了,那么关键路径上的下一个任务的开始时间和结束时间也要相应地延迟。这样依次传递,会波及关键路径上的最后一个任务,从而延迟整个项目。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜半少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值