软件开发笔试主观题10例

小编:艳芬 722阅读 2020.03.17

1. 举例说明类和对象的关系。
答:学生可作为一个类---学生类,每个学生就是这个学生类的一个实例,例如,学生张三就是学生类的一个实例。
2. 面向对象分析的关键步骤有哪些?应建立哪几个模型? 
答:关键步骤有识别问题域的对象并分析它们相互之间的关系,建立简洁、精确、可理解的正确模型;应建立的模型有功能模型,对象模型,动态模型。
3. 什么是实体类、边界类和控制类?为什么将分析类划分成这三种类型?  
答:(1)实体类保存要存入永久存储体的信息。实体类通常在事件流或交互图中,是对用户最有意义的类。

边界类位于系统与外界的交界处,包括所有的窗体、报表、系统硬件接口、与其他系统的接口。控制类负责协调其他类的工作。每个用例中至少应该有一个控制类,它控制用况中的事件顺序。
       (2)分为三种类型是因为它们各自的功能不同。界面类——描述系统与角色之间的接口。控制类——在分析模型内表示协调、顺序、事务处理以及控制其他对象的类。

实体类——为需要长久保存的信息进行建模的类。
4. UML中有哪几类个视图,它们的作用分别是什么? 
答:
(1)用例视图(Use-Case view),用例视图用于描述系统的功能集。它是从系统外部以用户角度,对系统做的抽象表示。用例视图所描述的系统功能依靠于外部用户或另一个系统触发激活,为用户或另一个系统提供服务,实现与用户或另一个系统之间的交互。用例视图中可以包含若干个用例,用例表示系统能够提供的功能,用例视图是其他视图的核心和基础。其他视图的构造依赖于用例视图中所描述的内容,因为系统的最终目标是实现用例视图中描述的功能,同时附带一些非功能性的特性,因此用例视图影响着所有其他的视图。
(2)逻辑视图(Logical view),如果说用例视图描述系统“做什么”,那么逻辑视图就是描述“怎么做”。系统的静态结构描述类、对象和它们之间的关系,反映的是系统静态特征或结构组成。
(3)组件视图(Component view),组件视图用来描述系统实现的结构和行为特征,反映系统各组成元素之间的关系。组件视图由组件图实现,主要供开发者和管理者使用。
(4)并发视图(Concurrency View),并发视图用来描述系统的动态和行为特征。并发视图将任务划分为进程或线程形式,通过任务划分引入并发机制,可以高效地使用资源、并行执行和处理异步事件。除了划分系统为并发执行的进程或线程外,并发视图还必须处理通信和同步问题。
(5)配置视图(Deployment View)配置视图体现了系统的实现环境,反映系统的物理架构。配置视图还包括一个映射,该映射显示在物理架构中组件是怎样分配的。
5. 顺序图在分析阶段的作用? 
答:顺序图描述了一组交互对象间的交互方式,它表示完成某项行为的对象和这些对象之间传递消息的时间顺序 
6. 活动图在分析阶段的作用? 
答:活动图反映系统中从一个活动到另一个活动的流程,强调对象间的控制流程。活动图特别适合描述工作流和并行处理过程。具体地说活动图可以描述一个操作过程中需要完成的活动;描述一个对象内部的工作;描述如何执行一组相关的动作,以及这些动作如何影响它们周围的对象;说明一个业务活动中角色、工作流、组织和对象是如何工作的。
7.比较结构化设计和面向对象设计区别? 
答:结构化设计:系统被划分成多个模块,这些模块被组织成一个树型结构。根就是主模块,叶子是最低级的功能模块。这棵树也表示调用结构:每个模块都调用自己的直接下级模块,并被自己的直接上级模块调用。顶层模块负责收集应用程序最重要的那些执行策略,底层模块实现处理细节。在这个体系结构中越靠上层位置,概念的抽象层次就越高。但是,由于上层模块需要调用下层模块,所以这些上层模块就依赖于下层模块的处理细节。也就是说,当实现细节发生变化时,抽象也会受到影响;如果想复用某一个抽象的话,就必须把它依赖的细节都一起拖过去。
面向对象设计:上层创建的抽象不依赖于任何细节,而细节则高度依赖于上层的抽象。这种依赖关系的变化正是结构化设计与面向对象设计的根本区别。
8.什么是框架,它与“设计”有什么关系? 
答:框架是一组可用于不同应用的类的集合。框架中的类通常是一些抽象类并且相互有联系,可以通过继承的方式使用这些类,当面向对象设计进行底层设计时,对每个类进行详细设计,设计类的属性和操作,优化类之间的关系,就可以设计成框架来对类的设计进行构架和优化。
9.系统的物理构架中应该包括哪些信息? 
答:用UML的配置图描述系统的物理构架,然后将需求分析阶段捕获的系统功能分配到这些物理节点上。包括的信息为节点的拓扑结构、硬件设备配置、通信路径、各个节点上运行的系统软件配置、应用软件配置。
10. 为建立良好的编程风格应遵循什么原则? 
答: 1)节简化①不使用不必要的变量和函数 ②避免变量重名,变量重名可导致很难被发现的错误。③尽量减小代码量。④尽量减少代码的执行时间,提高执行效率。⑤避免功能冗余的模块。⑥尽量不使用全局变量。
       2)模块化①确保物理和逻辑功能密切相关。 ②限定一个模块完成一个独立的功能,提高模块的内聚度。 ③检查代码的重复率,重复多的代码,要抽出来作为一个单独的模块。
       3)简单化①采用直接了当的算法,避免使用技巧性高和难懂的代码。②使用简单的数据结构,避免使用多维数组、指针和复杂的表。③注意对象命名的一致性。④以手工的方式简化算术和逻辑表达式。
       4)结构化①按标准化的次序说明数据;②按字母顺序说明对象名③使用读者明了的结构化程序部件;④采用直截了当的算法;⑤根据应用背景排列程序各个部分;⑥不随意为效率而牺牲程序的清晰度和可读性;⑦让机器多做烦琐的工作,如重复、库函数;⑧用公共函数调用代替重复出现的表达式;⑨避免循环、分支的嵌套层数过高;⑩单入口单出口。
       5)文档化(documentation)①有效、适当地使用注释。②协调使用程序块注释和程序行注释。③保持文档和程序的同步。6)格式化(layout)①始终采用统一缩进规则;②适当插入括号表明运算次序、排除二义性;③有效地使用空格符以区别程序的不同意群。
关联标签:

相关推荐