免费智能真题库 > 历年试卷 > 软件设计师 > 2011年下半年 软件设计师 上午试卷 综合知识
  第42题      
  知识点:   面向对象的基本概念   封装   面向对象软件开发
  关键词:   封装   面向对象   软件开发   对象   开发        章/节:   面向对象基础知识       

 
面向对象软件开发中,封装是一种(42)技术,其目的是使对象的使用者和生产者分离。
 
 
  A.  接口管理
 
  B.  信息隐藏
 
  C.  多态
 
  D.  聚合
 
 
 

 
  第43题    2021年上半年  
   25%
假设Bird和Cat是Animal的子类,Parrot是Bird的子类,bird是Bird的一个对象,cat是Cat的一个对象,parrot是Parrot的一个对象。以下..
  第40题    2009年下半年  
   19%
(38)是把对象的属性和服务结合成一个独立的系统单元,并尽可能隐藏对象的内部细节;(39)是指子类可以自动拥有父类的全部属性和服..
  第42题    2014年上半年  
   14%
如下所示的UML序列图中,(42)表示返回消息,Account类必须实现的方法有 (43) 。
   知识点讲解    
   · 面向对象的基本概念    · 封装    · 面向对象软件开发
 
       面向对象的基本概念
               Peter Coad和Edward Yourdon提出用下面的等式识别面向对象方法,即
               面向对象=对象+分类+继承+通过消息的通信
               可以说,采用这4个概念开发的软件系统是面向对象的。
               对象
               在面向对象的系统中,对象是基本的运行时的实体,它既包括数据(属性),也包括作用于数据的操作(行为),所以一个对象把属性和行为封装为一个整体。封装是一种信息隐蔽技术,它的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。从程序设计者来看,对象是一个程序模块;从用户来看,对象为他们提供了所希望的行为。在对象内的操作通常叫做方法。一个对象通常可由对象名、属性和操作三部分组成。
               消息
               对象之间进行通信的一种构造叫做消息。但一个消息发送给某个对象时,包含要求接收对象去执行某些活动的信息,接收到消息的对象经过解释,然后予以响应,这种通信机制叫做消息传递。发送消息的对象不需要知道接收消息的对象如何对请求予以响应。
               类
               一个类定义了一组大体上相似的对象,一个类所包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象是类的具体化、是类的实例。通常把一个类和这个类的所有对象称为"类及对象"或对象类。
               继承
               继承是父类和子类之间共享数据和方法的机制。这是类之间的一种关系,在定义和实现一个类的时候,可以在一个已经存在的类的基础上进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
               一个父类可以有多个子类,这些子类都是父类的特例,父类描述了这些子类的公共属性和操作。一个子类可以继承它的父类(或祖先类)中的属性和操作,这些属性和操作在子类中不必定义,子类中还可以定义自己的属性和操作。
               如果一个子类只从一个父类得到继承,叫做"单重继承";如果一个子类有两个或更多个父类,则称为"多重继承"。
               多态
               不同的对象收到同一消息可以产生完全不同的结果,这一现象叫做多态。在使用多态的时候,用户可以发送一个通用的消息,而实现的细节则由接收对象自行决定,这样,把具有通用功能的消息存放在高层次,而把不同的实现这一功能的行为放在较低层次,在这些低层次上生成的对象能够给通用消息以不同的响应。
               多态有几种布控的形式,Cardelli和Wegner把它分为四类,即
               
               其中,参数多态和包含多态称为通用的多态,过载多态和强制多态称为特定的多态。包含多态在许多语言中都存在,最常见的例子就是子类型化,即一个类型是另一个类型的子类型。过载多态是同一个变量被用来表示不同功能而通过上下文以决定一个名字所代表的功能。
               动态绑定
               绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。在一般程序设计语言中,绑定是在编译时进行的,叫做静态绑定。动态绑定则是在运行时进行的,因此,一个给定的过程调用和代码的结合是到调用发生时才进行的。
               动态绑定是和类的继承以及多态相联系的。在继承关系中,子类是父类的一个特例,所以父类对象可以出现的地方,子类对象也可以出现。因此在运行过程中,当一个对象发送消息请求服务时,要根据接收对象的具体情况将请求的操作与实现的方法进行连接,即动态绑定。
 
       封装
        面向对象系统中的封装单位是对象,对象之间只能通过接口进行信息交流,外部不能对对象中的数据随意地进行访问,这就造成了对象内部数据结构的不可访问性,也使得数据被隐藏在对象中。封装的优点体现在以下三个方面。
        (1)好的封装能减少耦合。
        (2)类内部的实现可以自由改变。
        (3)一个类有更清楚的接口。
 
       面向对象软件开发
        面向对象的方法从问题模型开始,然后进行识别对象、不断细化的过程。它从本质上就是迭代和渐增的。开发过程是一次次的迭代反复过程,随着迭代的进行,系统功能不断完善。典型的面向对象开发方法有RUP(Rational Unified Process)和XP(eXtreme Programming),两者各有侧重,适用于不同的场景。
        1.RUP
        RUP是Rational公司开发和维护的过程产品。RUP以适合于大范围项目和机构的方式捕捉了许多现代软件开发过程的最佳实践。RUP的三个关键特征为迭代(Iterative)、以架构为中心(Architecture-Centric)和用例驱动(Use-Case Driven)。
        RUP的6个基本最佳实践如下:
        .迭代式开发。RUP支持专注于处理生命周期中每个阶段中最高风险的迭代开发方法,极大地减少了项目的风险性。
        .需求管理。RUP描述了如何提取、组织和文档化需要的功能和限制。
        .使用基于构件的体系结构。RUP提供了使用新的及现有构件定义体系结构的系统化方法。
        .可视化软件建模。RUP开发过程显示了对软件如何可视化建模,捕获体系结构及构件的构架和行为。
        .验证软件质量。RUP帮助计划、设计、实现、执行和评估软件质量,并且不是事后型的。
        .控制软件变更。RUP开发过程描述了如何控制、跟踪和监控修改以确保成功的迭代开发。
        RUP的二维开发模型
        RUP可以用二维坐标来描述。横轴表示时间组织,是过程展开的生命周期特征,体现开发过程的动态结构,用来描述它的术语主要包括周期(Cycle)、阶段(Phase)、迭代(Iteration)和里程碑(Milestone);纵轴按内容组织为自然的逻辑活动,体现开发过程的静态结构,用来描述它的术语主要包括活动(Activity)、产物(Artifact)、工作者(Worker)和工作流(Workflow),如下图所示。
        RUP开发过程的各个阶段和里程碑
        RUP中的软件生命周期在时间上被分解为4个顺序的阶段,分别是初始阶段(Inception)、细化阶段(Elaboration)、构造阶段(Construction)和交付阶段(Transition)。每个阶段结束于一个主要的里程碑(Major Milestones);每个阶段本质上是两个里程碑之间的时间跨度。在每个阶段的结尾执行一次评估以确定这个阶段的目标是否已经满足。
        
        RUP的二维开发模型
        (1)初始阶段。
        初始阶段有时也称为先启阶段,该阶段的主要目标是为系统建立商业模型并确定项目的边界。任务包括识别和规避项目的主要风险,建立用例模型框架,并制订里程碑日期的阶段计划。
        初始阶段结束时是第一个重要的里程碑:生命周期目标(Lifecycle Objective)里程碑。该里程碑评估项目的基本可行性。
        (2)细化阶段。
        细化阶段的目标是分析问题领域,建立健全的体系结构基础,编制项目计划,淘汰项目中最高风险的元素。为了达到该目标,必须在理解整个系统的基础上,对体系结构做出决策,包括其范围、主要功能和诸如性能等非功能需求。同时为项目建立支持环境,包括创建开发案例,创建模板、准则并准备工具。
        细化阶段结束时是第二个重要的里程碑:生命周期结构(Lifecycle Architecture)里程碑。该里程碑为系统的架构建立了管理基准,并使项目小组能够在构建阶段中进行衡量。
        (3)构造阶段。
        在构造阶段,所有剩余的构件和应用程序功能被开发并集成为产品,所有的功能被详细测试。从某种意义上说,构造阶段是一个制造过程,其重点放在管理资源及控制运作以优化成本、进度和质量。
        构造阶段结束时是第三个重要的里程碑:初始操作(Initial Operational)里程碑。该里程碑确定产品是否已经可以部署到Beta测试环境。
        (4)交付阶段。
        交付阶段的重点是确保软件对最终用户是可用的。交付阶段可以跨越几次迭代,包括为发布做准备的产品测试,基于用户反馈的少量调整。在生命周期的这一点上,用户反馈应主要集中在产品调整、设置、安装和可用性问题上,所有主要的结构问题应该已经在项目生命周期的早期阶段解决了。
        在交付阶段的终点是第四个里程碑:产品发布(Product Release)里程碑。此时,要确定目标是否实现,是否应该开始另一个开发周期。在一些情况下,这个里程碑可能与下一个周期的初始阶段的结束重合。
        RUP的核心工作流
        RUP中有9个核心工作流,分为6个核心过程工作流(Core Process Workflows)和3个核心支持工作流(Core Supporting Workflows)。尽管6个核心过程工作流可能使人想起传统瀑布模型中的几个阶段,但应注意迭代过程中的阶段是完全不同的,这些工作流在整个生命周期中一次又一次被使用。9个核心工作流在项目中轮流被使用,在每一次迭代中以不同的重点和强度重复。
        (1)商业建模(Business Modeling)。
        商业建模工作流描述了如何为新的目标组织开发一个构想,并基于这个构想在商业用例模型和商业对象模型中定义组织的过程,角色和责任。
        (2)需求(Requirements)。
        需求工作流的目标是描述系统应该做什么,并使开发人员和用户就这一描述达成共识。为了达到该目标,要对需要的功能和约束进行提取、组织、文档化,最重要的是理解系统所解决问题的定义和范围。
        (3)分析和设计(Analysis&Design)。
        分析和设计工作流将需求转化成未来系统的设计,为系统开发一个健壮的结构并调整设计使其与实现环境相匹配,优化其性能。分析设计的结果是一个设计模型和一个可选的分析模型。设计模型是源代码的抽象,由设计类和一些描述组成。设计类被组织成具有良好接口的设计包(Package)和设计子系统(Subsystem),而描述则体现了类的对象如何协同工作实现用例的功能。
        (4)实现(Implementation)。
        实现工作流的目的包括以层次化的子系统形式定义代码的组织结构;以组件的形式(源文件、二进制文件、可执行文件)实现类和对象;将开发出的组件作为单元进行测试以及集成由单个开发者(或小组)所产生的结果,使其成为可执行的系统。
        (5)测试(Test)。
        测试工作流要验证对象间的交互作用,验证软件中所有组件的正确集成,检验所有的需求已被正确地实现,识别并确认缺陷在软件部署之前被提出并处理。RUP提出了迭代的方法,意味着在整个项目中进行测试,从而尽可能早地发现缺陷,从根本上降低了修改缺陷的成本。测试类似于三维模型,分别从可靠性、功能性和系统性能来进行。
        (6)部署(Deployment)。
        部署工作流的目的是成功地生成版本并将软件分发给最终用户。部署工作流描述了那些与确保软件产品对最终用户具有可用性相关的活动,包括软件打包、生成软件本身以外的产品、安装软件、为用户提供帮助。在有些情况下,还可能包括计划和进行beta测试版、移植现有的软件和数据以及正式验收。
        (7)配置和变更管理(Configuration&Change Management)。
        配置和变更管理工作流描绘了如何在多个成员组成的项目中控制大量的产物。配置和变更管理工作流提供了准则来管理演化系统中的多个变体,跟踪软件创建过程中的版本。工作流描述了如何管理并行开发、分布式开发、如何自动化创建工程。同时也阐述了对产品修改原因、时间、人员保持审计记录。
        (8)项目管理(Project Management)。
        软件项目管理平衡各种可能产生冲突的目标,管理风险,克服各种约束并成功交付使用户满意的产品。其目标包括为项目的管理提供框架,为计划、人员配备、执行和监控项目提供实用的准则,为管理风险提供框架等。
        (9)环境(Environment)。
        环境工作流的目的是向软件开发组织提供软件开发环境,包括过程和工具。环境工作流集中于配置项目过程中所需要的活动,同样也支持开发项目规范的活动,提供了逐步的指导手册,并介绍了如何在组织中实现过程。
        2.XP
        极限编程(eXtreme Propgramming,XP)由Kent Beck在1996年开创,是一种演进式的原型化方法,以最大化发挥人的能量为核心目标,具有沟通高效、设计简单、反馈迅速等特点,是一种轻量级、敏捷的过程方法。
        XP是一种高度动态的过程,它通过非常短的迭代周期来应对需求的变化。XP一般适用于需求不确定、变化快、项目历时不超过半年、人数不超过10个、在同一地点工作的中小型团队。
        XP的生命周期包括4个基本活动:编码(coding)、测试(testing)、聆听(listening)、设计(designing)。
        XP的4个价值目标:
        .沟通:让开发人员集体负责所有代码并结队工作,鼓励与客户及团队内部保持沟通。
        .简化:鼓励只开发当前的功能,避免过多的文档,专注于最小化解决方案,做好为新特性改变设计,在系统隐喻和代码规范下不断重构的准备。
        .反馈:通过单元测试和功能测试获得快速反馈。
        .勇气:提倡积极面对现实和处理问题的勇气,拥抱变化。
        XP的12个最佳实践:
        .有计划的开发。通过结合使用标有优先级的“故事”卡和技术估算,确定下一版本的功能。
        .小型发布。以小的增量版本经常向客户发布软件。
        .系统隐喻。隐喻是一个高层次的系统构想,需要不断地细化架构来指导全部开发。
        .简单设计。通过保持代码简单从而保证设计简单。不断地在代码中寻找复杂点并且立刻进行移除。
        .测试驱动。“先测试,后编码”。用户编写测试内容以对“故事”进行测试。程序员编写测试内容来发现代码中的任何问题。在编写代码前先编写测试内容。
        .重构。这是一项简化技术,用来移除代码中的重复内容和复杂之处。
        .结对编程。团队中的两个成员使用同一台计算机开发所有的代码。一个人编写代码或者驱动,另一个人同时审查代码的正确性和可理解性。
        .集体代码所有权。任何人都拥有所有的代码。提高代码透明度,增强团队合作精神。
        .持续集成。每天按任务多次创建和集成系统,随着需求变化,进行不断的回归测试。
        .每周40小时工作制。程序员在疲劳时无法保证最高效率。连续两周加班是绝对不允许的,否则会影响工作效率。
        .现场客户。至少有一名真实的客户全天候工作于开发环境中,帮助定义系统、编写测试内容并回答问题。
        .编码规范。程序员采用统一的编码规范。
   题号导航      2011年下半年 软件设计师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第42题    在手机中做本题