软件工程面向对象部分作业题目及参考答案

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

 

:面向对象设计准则:1、模块化;2、抽象;3、信息隐藏;4、弱耦合;5、强内聚;6、可重用。

(1)模块化

? 对象就是模块

? 把数据结构和操作这些数据的方法紧密地结合在一起

(2)抽象

? 过程抽象

? 数据抽象:类

? 参数化抽象:C++的“模板”

(3)信息隐藏

? 通过对象的封装性实现

? 类分离了接口与实现,支持信息隐藏

(4)弱耦合

? 耦合:一个软件结构内不同模块之间互连的紧密程度

? 弱耦合:系统中某一部分的变化对其他部分的影响降到最低程度

? 对象之间的耦合:交互耦合&继承耦合

(5)强内聚

? 内聚衡量一个模块内各个元素彼此结合的紧密程度

? 在设计时应该力求做到高内聚

? 面向对象设计的3种内聚:服务内聚、类内聚、一般特殊内聚

(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:

FP=UFP*TCP

  =318*1.14

  ≈363

 

(2)

用代码行估算,开发本系统的工件量为:

E=33200/620≈54(人月) 

开发本系统的成本为:8000×54=432000(元)

 

(3)

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

E=363/6.5≈56(人月) 

开发本系统的成本为:

8000×56=448000(元)

 

 

 

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

(1)

  1. 支持类与对象概念的机制;
  2. 实现整体-部分(即聚集)结构的机制;
  3. 实现一般-特殊(即泛化)结构的机制;
  4. 实现属性和服务的机制;
  5. 类型检查;

(2)

面向对象的特点是:封装百.多态.继承.其中多态有分为重载和重写.面向对象的编程思想更加接近度现实的事物. 有这样几点好处:

  1. 是编程知更加容易.因为面向对象更接近于现实.所以你可以从现实的东西出发道.进行适当的抽象;
  2. 在软件工程内上.面向对象可以使工程更加模块化.实现更低的耦合和更高的内聚;
  3. 在设计模式上.面向对象可以更好容的实现开-闭原则.也使代码更易阅读。

 

 

 

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

CMM的基本思想是,由于问题是由我们管理软件过程的方法不当引起的,所以软件技术的运用并不会自动提高软件的生产率和质量。把能力成熟度划分成5个等级的原因是:对软件的改进不可能一撅而就。

 

 

第五题: 什么是基线什么要建立基线/span>

基线是已经通过了正式复审的规格说明或中间产品,它可以作为进一步开发的基础,并且只有通过正式的变化控制过程才能改变它。建立基线的三大原因是:重现性、可追踪性和报告。

重现性是指及时返回并重新生成软件系统给定发布版的能力,或者是在项目中的早些时候重新生成开发环境的能力。可追踪性建立项目工件之间的前后继承关系。其目的在于确保设计满足要求、代码实施设计以及用正确代码编译可执行文件。报告来源于一个基线内容同另一个基线内容的比较。基线比较有助于调试并生成发布说明。

建立基线后,需要标注所有组成构件和基线,以便能够对其进行识别和重新建立。

 

 

 

第六题:对象和属性之间有何区别/span>

(1)对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体有可以唯一地标识它的名字,而且向外界提供一组服务(即公有的操作)。对象中的数据表示对象的状态,一个对象的状态只能由该对象的操作来改变。对象的特点为:

  1. 以数据为中心。
  2. 对象是主动的。
  3. 实现了数据封装。
  4. 本质上具有并行性。
  5.  模块独立性好。

(2)属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。在C++语言中把属性称为数据成员。

(3)总结如果某个实体的独立存在比它的值更重要,则应把它作为一个对象而不是对象的属性。在具体应用领域中具有自身性质的实体,必然是对象。同一个实体在不同应用领域中,到底应该作为对象还是属性,需要具体分析才能确定。例如,在邮政目录中,“城市”是一个属性,而在人口普查中却应该把“城市”当作对象。

 

 

 

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

我们可以从以下几个部分进行论述:

(1)面向对象方法学的优点:

  1. 与人类习惯的思维方法一致;
  2. 稳定性好;
  3. 可重用性好;
  4. 较易开发大型软件产品;
  5. 可维护性好。

(2)面向对象语言的优点:

  1. 一致的表示方法;
  2. 可重用性;
  3. 可维护性。

(3)面向对象设计的结果既可以用面向对象语言、也可以用非面向对象语言实现:

  1. 使用面向对象语言时,由于语言本身充分支持面向对象概念的实现,因此,编译程序可以自动把面向对象概念映射到目标程序中。
  2. 使用非面向对象语言编写面向对象程序,则必须由程序员自己把面向对象概念映射到目标程序中。

 

第八题: 

解释以下名词:  

1、COCOMO2模型。

2、面向对象的多态性。

3、面向对象的方法。

4、面向对象的继承性

5、面向对象的高内聚低耦合。

6、Gantt(甘特)图。

7、信息隐藏。(Data Hiding) 。

8、面向对象的属性。

(1)COCOMO2模型:

COCOMO是构造性成本模型(constructive cost model)的英文缩写。

COCOMO2给出了3个层次的软件开发工作量估算模型:

1、应用系统组成模型。

这个模型主要用于估算构建原型的工作量,模型名字暗示在构建原型时大量使用已有的构件。

2、早期设计模型。

这个模型适用于体系结构设计阶段。

3、后体系结构模型。

这个模型适用于完成体系结构设计之后的软件开发阶段。

(2)面向对象的多态性:

在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。即,在类等级的不同层次中可以共享(公用)一个行为(方法)的名字,然而不同层次中的每个类却各自按自己的需要来实现这个行为。

(3)面向对象的方法:

方法就是对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法。在C++语言中把方法称为成员函数。

(4)面向对象的继承性:

在面向对象的软件技术中,继承是子类自动地共享基类中定义的数据和方法的机制。

面向对象软件技术把类组成一个层次结构的系统(类等级):一个类的上层可以有父类,下层可以有子类。这种层次结构系统的一个重要性质是继承性,一个类直接继承其父类的全部描述(数据和操作)。

(5)面向对象的高内聚低耦合:

低耦合:

? 耦合:一个软件结构内不同模块之间互连的紧密程度

? 弱耦合:系统中某一部分的变化对其他部分的影响降到最低程度

? 对象之间的耦合:交互耦合&继承耦合

高内聚:

? 内聚衡量一个模块内各个元素彼此结合的紧密程度

? 在设计时应该力求做到高内聚

? 面向对象设计的3种内聚:

   服务内聚、类内聚、一般特殊内聚

(6)Gantt(甘特)图:

Gantt(甘特)图是历史悠久、应用广泛的制定进度计划的工具。Gantt图能很形象地描绘任务分解情况,以及每个子任务(作业)的开始时间和结束时间,因此是进度计划和进度管理的有力工具。它具有直观简明和容易掌握、容易绘制的优点。

(7)信息隐藏(Data Hiding):

信息隐藏技术主要是指将特定的信息嵌入数字化宿主信息(如文本,数字化的声音、图像、视频信号等)中,信息隐藏的目的不在于限制正常的信息存取和访问,而在于保证隐藏的信息不引起监控者的注意和重视,从而减少被攻击的可能性,在此基础上再使用密码术来加强隐藏信息的安全性,因此信息隐藏比信息加密更为安全。

(8)面向对象的属性:

属性就是类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己特有的属性值。在C++语言中把属性称为数据成员。

 

 

 

第九题:

        王大夫在小镇上开了一家牙科诊所他有一个牙科助手、一个牙科保健员和一个接待员王大夫需要一个软件系统来管理预约

        当病人打电话预约时接待员将查阅预约登记表 ,如果病人申请的就诊时间与已定下的预约时间冲突则接待员建议一个就诊时间以安排病人尽早得到诊治。如果病人同意建议的就诊时间接待员将输入约定时间和病人的名字系统将核实病人的名字并提供记录的病人数据数据包括病人的病历号等在每次治疗或清洗后助手或保健员将标记相应的预约诊治已经完成如果必要的话会安排病人下一次再来

        系统能够按病人姓名和按日期进行查询能够显示记录的病人数据和预约信息接待员可以取消预约可以打印出前两天预约尚未接诊的病人清单。系统可以从病人记录中获知病人的电话号码接待员还可以打印出关于所有病人的每天和每周的工作安排 。

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

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

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

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

(1)

软件工程面向对象部分作业题目及参考答案

 

(2)

软件工程面向对象部分作业题目及参考答案

 

(3)

 

软件工程面向对象部分作业题目及参考答案

(4)

 

软件工程面向对象部分作业题目及参考答案

 

 

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

封装性使得对象成为独立性很强的模块,理解一个对象所需要了解的元素,大部分都在该对象内部,因此,测试和维护比较容易。对象彼此之间仅能通过发送消息相互作用,不能从外界之间修改对象的私有数据,进-步使得测试和维护变得更容易。信息隐藏确保了对对象本身的修改不会在该对象以外产生影响,从而大大减少了回归错误的数量,因此,这个特点也使得测试和维护变得比较容易。

与封装性和信息隐藏相反,继承性和多态性加大了测试(含调试)和维护的难度:
? 由于派生类继承了它的全部基类的属性和方法,为了理解和修改派生类,必须研究整个继承结构;
? 如果继承结构的上层结点(即基类)发生了某种变化,则这种变化将传递给下层结点(即派生类) ;
? 由于多态性和动态联编的存在,如果程序中有调用多态操作的语句,调试人员或维护人员将不得不研究运行时可能发生的各种绑定,并且对代码运行情况进行跟踪,才能判断出大量方法中的哪一一个方法会在代码的这一点被调用。

 

 

 

 

 

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

在实际的应用程序中,往往有这样一些软件元素(即函数、类等软件成分),从它们的逻辑功能看,彼此是相同的,所不同的主要是处理的对象类型不同。

所谓参数化类,就是使用一个或多个类型去参数化一个类的机制,有了这种机制,程序员就可以先定义一个参数化的类模块(即在类定义中包含以参数形式出现的一个或多个类型),然后再使用时把数据类型作为参数传递进来,从而把这个类模块在不同的应用程序中重复使用,或在同一程序的不同部分重复使用。

 

 

 

 

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

关键路径定义为一组任务(称为关键任务)?,这组任务决定了完成项目所需要的最短时间。如果位于关键路径上的一个关键任务的完成时间被推迟了,则关键路径上的下一个任务的开始时间和结束时间也要相应地延迟。这样依次传递,会波及关键路径上的最后一个任务,从而延迟整个项目。

来源:咸鱼睡不醒_

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年3月16日
下一篇 2020年3月16日

相关推荐