第一题: 面向对象设计应该遵循哪些准则? 简述每条准则的内容,并说明遵循这条准则的必要性。
答:面向对象设计准则: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,请估算开发本系统的工作量和成本。
解:
由表可以计算技术复杂性因子:
TCF =0.65+0.01×DI
=1.14