1. ( )面向对象设计是在分析模型的基础上,运用面向对象技术生成软件实现环境下的设计模型。(A) A. 真 B. 假
2. ( )系统设计的主要任务是细化分析模型,最终形成系统的设计模型。(B) A. 真 B. 假
3. ( )关系数据库可以完全支持面向对象的概念,面向对象设计中的类可以直接对应到关系数据库中的表。(B) A. 真 B. 假
4. ( )用户界面设计对于一个系统的成功是至关重要的,一个设计得很差的用户界面可能导致用户拒绝使用该系统。A. 真 B. 假
5. 内聚表示一个模块((B,D)
A. 可以被更加细化 B. 仅关注在一件事情上C. 能够适时地完成其功能D. 联接其他模块和外部世界6. 良好设计的特征是(A. 模块之间呈现高耦合B. 实现分析模型中的所有需求C. 包括所有组件的测试用例D. 提供软件的完整描述E. 选项B和D F. 选项B、C和D
7. ( )是选择合适的解决方案策略,并将系统划分成若干子系统,从而建立整个系统的体系结构;( )行准确详细的说明。(A. 系统设计 B. 对象设计 C. 数据库设计 D. 用户界面设计
8. 下面的( )界面设计原则不允许用户保持对计算机交互的控制。A. 允许交互中断 B. 允许交互操作取消C. 对临时用户隐藏技术内部信息D. 只提供一种规定的方法完成任务[练习题]
1. 面向对象设计与面向对象分析的区别是什么?设计包括哪些活动?答案要点:
面向对象分析是重点考虑系统(A) )的程度,耦合表示一个模块( )。(E)
A,B)
“做什么” D) )的程度。 细化原有的分析对象,确定一些新的对象、对每一个子系统接口和类进( 的问题,即运用面向对象方法对问题域进行分析和
理解,建立系统的分析模型;面向对象设计重点考虑系统“怎样做”的问题,即在分析模型的基础上形成实现环境下的设计模型。
面向对象设计主要涉及系统设计、对象设计(或详细设计)、数据库设计和用户界面设计等活动。
在类设计中,为什么建议使用set方法和get方法进行属性设置和读取? 答案要点:
目的在于降低类之间的耦合度。
下图显示了某个学校课程管理系统的部分类图,其中一个学生(student)可以知道所有注册的教师(instructor),一个教师也可以知道所有注册课程的学生。 Studentname : StringstudentID : IntegerregisteredInstructors : Instructor[]getRegisteredInstructor() : Instructor[]Instructorname : StringinstructorID : IntegerregisteredStudents : Student[]getRegisteredStudents() : Student[]0..* 0..*现在提出一个新的需求:“一个教师也可以是某些课程的学生”,那么下面设计A~E中哪一个是最好的?为什么?(请务必说明理由)
设计A: Candicatename : StringcandidateID : Integerstudent : Booleaninstructor : BooleanregisteredCandidate : Candidate[]getRegisteredCandidates() : Candidate[]0..* 设计B:
CandicatecandidateID : Integername : StringStudentregisteredInstructors : Instructor[]getRegisteredInstructor() : Instructor[]InstructorregisteredStudents : Student[]getRegisteredStudents() : Student[]0..*0..* 设计C:
InstructorStudentRoleregisteredCandidate : Candidate[]getRegisteredCandidates()CandicatecandidateID : Integername : String0..*0..* 0..*设计D:
InstructorStudentCandicatecandidateID : Integername : StringRoleregisteredCandidate : Candidate[]getRegisteredCandidates()0..*0..*
设计E: InstructorStudentCandicatecandidateID : Integername : StringRoleregisteredCandidate : Candidate[]getRegisteredCandidates()0..*0..* 参考答案:
设计A:这个设计使用了一个自返关联,但其中的registeredCandidate()方法有问题。如果一个人既是学生又是老师,那么要想同时获得他作为学生对应的所有老师,以及他作为老师对应的所有学生,getRegisteredCandidates()方法得到的Candidate数组中并不能区分上述的两种结果。
设计B:这个设计使用了一个泛化关系,但它并没有解决题中给出的新的要求。事实上,这个设计只是在题中已有设计之上的改进,实质还是一样的,并不能描述一个教师也可以是某些课程的学生的情况。 设计C:这个设计定义了一个Role类,学生和教师是Role类的两个子类。如果一个Candidate对象是教师,可以调用Instructor类的getRegisteredCandidates()方法获得所对应的所有学生;如果这个对象是学生,可以调用Student类的getRegisteredCandidates()方法获得所对应的所有教师;如果这个对象既是教师又是学生,那么分别调用Instructor类的getRegisteredCandidates()方法和Student类的getRegisteredCandidates()方法即可。 设计D:整个设计有着与B中类似的问题,即一个Candidate对象要么是一个学生,要么是一个老师,不能同时都是,无法满足新的需求。 设计E:这个设计与D基本一致,只是把Candidate类与Role类之间的关联关系改成了聚集
关联,同样无法满足新的需求。 综上所述,设计 C是最好的。
下图是 MortgageApplication 对象的状态图,假设有一个要求,即增加一个“Cancelled”,图中除“Closed”状态外的任何状态都可以转换到该状态。请画出修改后的状态图(请不同的修改方法中哪种方法最好) 参考答案: 方法1: 方法2:
方法2引入了组合状态和子状态,从而可以在组合状态Running中加入更多的子状态,以保证组合状态的可扩展性。所以说,方法5. 请举例说明用户界面设计的基本原则。参考答案:
(1) 用户控制:用户应当感觉系统的运行在自己的控制之下。在图形界面或基于界面中,用户指导程序的每一步执行;户同样保持对控制的敏感度。
举例:当程序进行某些需要占用较长时间的处理时,一个沙漏、一个等待的指示器或其他类似的东西。(2) 界面一致性:一致性要求用户界面遵循标准和常规的方式,可预见的环境之中,这主要体现在命名、编码、缩写、布局以及菜单、按钮和键盘功能在内的控制使用等。
举例:一个运行在Windows平台上的三维几何造型系统应当采用观和感觉”,与Office类型软件保持一致的界面风格和操作方式。(3) 界面容错性:一个好的界面应该以一种宽容的态度允许用户进行实验和出错,在出现错误时能够方便地从错误中恢复。举例:Microsoft Word系统允许撤消用户对文档的许多最近操作,从而处理用户的误操作问题。
(4) 界面美观性:界面美观性是视觉上的吸引力,主要体现在具有平衡和对称性、合适的色彩、各元素具有合理的对齐方式和间隔、作的元素等。
举例:清华大学软件学院综合信息服务系统的用户方便地查找信息等方面进行了良好的设计。(5) 界面可适应性:界面可适应性是指用户界面应该根据用户的个性要求及其对界面的熟知程度而改变,即满足定制化和个性化的要求。用户界面可以根据熟知程度改变外观和行为;置用户界面元素。
举例:系统允许用户选择语言类型(中文、英文、意大利文等)言类型显示不同语种的用户界面。
2相对于方法
相关元素适当分组、Web 所谓定制化是在程序中声明用户的熟知程度,所谓个性化是使用户按照自己的习惯和爱好设更好一些。 让用户处在一个熟悉的和Windows图形窗口的“外
使用户可以方便地找到要操,并系统根据用户定制的语Web的用诸如使用户1即使在程序进行某些处理或用户等待输出结果时,需要为用户提供及时的反馈信息,界面在平衡和对称、色彩、元素分组、第9章 软件实现(习题与参考答案) [选择题]
1. ( )在程序设计中使用括号以改善表达式的清晰性。(A) A. 真 B. 假
2. ( )在程序设计中应尽可能对程序代码进行优化。(B) A. 真 B. 假
3. ( )不要修补不好的程序,要重新写。(A) A. 真 B. 假
4. ( )程序中的注释是可有可无的。A. 真 B. 假
5. ( )对递归定义的数据结构不要使用递归过程。A. 真 B. 假
6. 为了使程序能在不同的计算机上运行,程序应当具有较好的(A. 可移植性B. 可重用性C. 可维护性D. 可适用性7. 对于开发面向数据库应用的软件,应当选择的程序设计语言是(A. C
B. PASCAL C. SQL D. JAVA
8. 下面对提高程序编码效率没有影响的是(A. 选择良好的设计方法B. 选择良好的算法C. 选择良好的数据结构D. 变量名的使用9. 为了保证软件的质量,使其具有较好的可维护性,关键在于(A. 选择合适的程序设计语言B. 选择好的程序设计风格C. 具有好的数据结构D. 选择好的运行环境10. 下面的(A. 在开始编码之前建立单元测试B. 建立一种有助于理解的直观布局C. 保持变量名简短以便代码紧凑D. 确保注释与代码完全一致[练习题]
1. 列出三种常见的专用程序设计语言,并说明它们的应用领域。B) (B) )。(D) (C) A)(C)B) ( )。(
)。
)。(
)不是良好编码的原则。
参考答案:
(1) JAVA语言:适用于跨平台的企业应用软件 (2) LISP语言:适用于人工智能软件 (3) SQL语言:适用于数据库应用软件
2. 选择一个你认为最能满足软件工程要求的程序设计语言,并说明理由。 参考答案: 略。
3. 选择一种面向对象程序设计语言,总结其主要特性和特殊机制。 参考答案: 略。
4. 你认为是否应该强制采用软件编码规范?请举出由。
参考答案: 赞成理由:
(1) 增强代码的可读性(2) 增强代码的可移植性(3) 减少不必要的程序错误反对理由: (1) 缺少个性 (2) 降低程序效率5. 请分析比较下面两个第一个for循环: for (i = 0; i < N; i++) {
if (condition) DoSomething(); else
DoOtherthing(); }
第二个for循环: if (condition) {
for (i = 0; i < N; i++) DoSomething(); } else {
for (i = 0; i < N; i++) DoOtherthing(); }
参考答案:
第一个for循环的代码简练且结构清晰,但效率较低;第二个for循环的执行效率较高,但结构不够紧凑。6. 下面三个程序运行时分别会产生什么结果?为什么? for循环的优缺点。 2-4个赞成的理由和
1-3个反对的理