免费智能真题库 > 历年试卷 > 系统架构设计师 > 2009年下半年 系统架构设计师 上午试卷 综合知识
  第60题      
  知识点:   设计模式目录的内容   图形   构件   面向对象技术
  关键词:   构件库   开发   面向对象   需求   对象   构件        章/节:   设计模式       

 
某软件公司基于面向对象技术开发了一套图形界面显示构件库VisualComponent。在使用该库构建某图形界面时,用户要求为界面定制一些特效显示效果,如带滚动条、能够显示艺术字体的透明窗体等。针对这种需求,公司采用(60)最为灵活。
 
 
  A.  桥接模式
 
  B.  命令模式
 
  C.  组合模式
 
  D.  装饰模式
 
 
 

 
  第32题    2014年下半年  
   31%
一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。采用(32)模式,用一个特定对象来封装一系..
  第33题    2015年下半年  
   46%
某软件公司欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形。在明确用户需求后,该公司的架构师决定采用Bridge模式实..
  第56题    2017年下半年  
   32%
按照设计模式的目的进行划分,现有的设计模式可以分为三类。其中创建型模式通过采用抽象类所定义的接口,封装了系统中对象如何创..
   知识点讲解    
   · 设计模式目录的内容    · 图形    · 构件    · 面向对象技术
 
       设计模式目录的内容
        Erich Gamma在他的博士论文中总结了一系列的设计模式,做出了开创性的工作。他用一种类似分类目录的形式将设计模式记载下来。我们称这些设计模式为设计模式目录。根据模式的目标(所做的事情),可以将它们分成创建性模式(creational)、结构性模式(structural)和行为性模式(behavioral)。创建性模式处理的是对象的创建过程,结构性模式处理的是对象/类的组合,行为性模式处理类和对象间的交互方式和任务分布。根据它们主要的应用对象,又可以分为主要应用于类的和主要应用于对象的。
        下表是Erich Gamma等总结的23种设计模式,这些设计模式通常称为GoF(Gang of Four,四人组)模式。因为这些模式是在“Design Patterns:Elements of Reusable Object-Oriented Software”中正式提出的,而该书的作者是Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides,这几位作者常被称为“四人组”。
        
        设计模式目录的分类
        
        其中带*模式是关于类的,其他模式是关于对象的。
 
       图形
        UML2.0使用了14种图,列举如下:
        (1)类图(class diagram):描述一组类、接口、协作和它们之间的关系。在面向对象系统的建模中,最常见的图就是类图。类图给出了系统的静态设计视图,活动类的类图给出了系统的静态进程视图。
        (2)对象图(object diagram):描述一组对象及它们之间的关系。对象图描述了在类图中所建立的事物实例的静态快照。和类图一样,这些图给出了系统的静态设计视图或静态进程视图,但它们是从真实案例或原型案例的角度建立的。
        (3)构件图(component diagram):描述一个封装的类和它的接口、端口,以及由内嵌的构件和连接件构成的内部结构。构件图用于表示系统的静态设计实现视图。对于由小的部件构建大的系统来说,构件图是很重要的。构件图是类图的变体。
        (4)组合结构图(composite structure diagram):描述结构化类(例如构件或类)的内部结构,包括结构化类与系统其余部分的交互点。它显示联合执行包含结构化类的行为的构件配置。组合结构图用于画出结构化类的内部内容。
        (5)用例图(use case diagram):描述一组用例、参与者(一种特殊的类)及它们之间的关系。用例图给出系统的静态用例视图。这些图在对系统的行为进行组织和建模时是非常重要的。
        (6)顺序图(sequence diagram,序列图):是一种交互图(interaction diagram),交互图展现了一种交互,它由一组对象或角色以及它们之间可能发送的消息构成。交互图专注于系统的动态视图。顺序图是强调消息的时间次序的交互图。
        (7)通信图(communication diagram):也是一种交互图,它强调收发消息的对象或角色的结构组织。顺序图和通信图表达了类似的基本概念,但每种图所强调的概念不同,顺序图强调的是时序,通信图则强调消息流经的数据结构。
        (8)定时图(timing diagram,计时图):也是一种交互图,它强调消息跨越不同对象或角色的实际时间,而不仅仅只是关心消息的相对顺序。
        (9)状态图(state diagram):描述一个状态机,它由状态、转移、事件和活动组成。状态图给出了对象的动态视图。它对于接口、类或协作的行为建模尤为重要,而且它强调事件导致的对象行为,这非常有助于对反应式系统建模。
        (10)活动图(activity diagram):将进程或其他计算的结构展示为计算内部一步步的控制流和数据流。活动图专注于系统的动态视图。它对系统的功能建模特别重要,并强调对象间的控制流程。
        (11)部署图(deployment diagram):描述对运行时的处理结点及在其中生存的构件的配置。部署图给出了架构的静态部署视图,通常一个结点包含一个或多个部署图。
        (12)制品图(artifact diagram):描述计算机中一个系统的物理结构。制品包括文件、数据库和类似的物理比特集合。制品图通常与部署图一起使用。制品也给出了它们实现的类和构件。
        (13)包图(package diagram):描述由模型本身分解而成的组织单元,以及它们的依赖关系。
        (14)交互概览图(interaction overview diagram):是活动图和顺序图的混合物。
 
       构件
        为了达到门户站点的基本要求,一个企业的网站应当由以下构件组成:
        (1)应用服务器(Application Server)。主要用于企业较大规模电子商务应用的开发、发布和管理,同时实现与企业原有系统的集成。
        (2)工作流和群件服务器。主要用于使工作人员和商业伙伴能通过Internet共享资源、协同工作。
        (3)内容管理子系统。简化企业网站的产品管理、提高效率,并将相应的、经过筛选的内容发送给最终用户。
        (4)目录服务器。企业使用它来管理防火墙内外的用户、资源和控制安全权限,同时为用户的通信和电子商务提供一个通道。
        (5)性能优化工具。改善网站服务质量,包括流量管理、动态数据缓存、网络动态负载(Load Balancing)、知识管理等。
        (6)邮件和消息服务器。使企业和服务提供者能为所有员工、合作伙伴和客户社区提供商业级的通信架构。
        (7)个性化信息服务。在实时分析用户数据的基础上提供一对一的交易平台。通过对用户行为的更好理解,企业更跟踪、分析和理解网站用户。
        (8)搜索引擎。用户提供更广泛的资源。
        (9)安全服务器。包括数据安全、应用安全和交易完全。其基本内容有用防火墙阻止对网络的非授权访问,在安全和个人的角色授权的基础上,只需一次登录就可以访问网站的所有应用,通过提供一种对在线交易的每一方的可信任的授权方式,帮助客户、合作伙伴和员工访问Internet应用。
        (10)网站服务器(Web Server)。将各种网站的信息发布给用户。
        以上是通常构建网站所需要的构件,企业可针对自己的特点以及网站规模大小,应用的类型等自行选择。
        在网站结构的实现上,通常在逻辑上将网站分为三层:表示层、应用逻辑层、数据层。这种结构使得网站具有较好的可扩充性,将表示层与业务功能的实现分离开来,能够更灵活地适应业务的发展。网站不需要对业务逻辑组件进行任何变动,就能够适用新出现的表示形式和客户端。例如,为了使用户更方便地在网站上购物,网站调整了页面格局和页面风格。由于网站结构层次分明,只需要改动网站表示层,业务逻辑层和数据连接层则不需要改变。
        (11)表示层和相关技术。表示层用于为最终用户提供一个友好的用户界面,接受用户提交的事件,并将处理的结果返还给用户。这一层作为应用的前端和“窗口”,决定了用户对网站优劣的评价和总体印象。
        网站从总体上说是独立于客户端的,客户端包括基于浏览器的HTML客户端、给予Java的客户端、传统的C/C++应用、Power Builder客户端以及VB客户端。
        在表示层除了使用最基本的HTML语言外,通常还利用JavaScript Internet脚本语言,以及Java Internet程序开发语言。JavaScript程序运行在客户端,能够完成用户事件获取、数据提交前的合法性校验、错误检查和实现动画效果等。而利用Java开发的JavaServlet程序运行于服务器端,负责实现与业务逻辑层的交互,从业务逻辑层获得数据,并将用户提交的信息传给业务逻辑层,而基于Java语言的JSP程序,则实现数据的动态显示,它将JavaServlet程序获得的数据形成相应的HTML页面传给客户端。
        为了适应电子商务的各种需求,新的表示层技术不断发展。如XML(可扩展标记语言)和RDF(资源描述框架)等都是当前最新的、对表示层产生重大影响的技术。XML通过一种结构化的文本方式来表述数据;RDF提供一种统一的、可互操作的方法通过Internet在程序间交换元数据。
        (12)商务逻辑与实现。商务逻辑层是电子商务系统的核心,也是系统建造过程中的重点和难点。商务逻辑层包括商务应用程序、支持平台(包括商务服务层、商务支持层和基础支持层)。
        支持层向上层(商务应用层)提供的服务主要包括:表达、商务支持、运行支持、开发与集成服务。构成支持平台的技术产品至少应当包括:Web服务器、商务支持软件、集成与开发工具、计算机主机、网络及其他系统软件(如操作系统、管理工具软件等)。
        通常,Web服务器、商务支持软件、部分集成开发环境被集成到一个被称为“应用服务器”的软件包里,所以商务逻辑层在物理上可以简化为以下三个部门:应用软件(实现商务逻辑);应用服务器(为应用软件提供软件支持平台)和其他支持软件;计算机主机及网络(为应用软件提供硬件支持平台)。
        构造商务逻辑层的任务是为选择合适的应用服务器和其他支持软件,开发实现商务逻辑的应用软件系统。
        (13)数据层及实现。构造数据层的关键是开发电子商务与外部系统、内部资源系统的接口,完成系统集成。
        数据层的数据源主要包括:相关信息系统(如ERP系统)的数据与企业的数据库,企业与协作企业(如供应商)间交换的数据,企业与银行间交换的数据,企业与认证中心之间的认证数据,企业与其他商务中介交换的电子数据。
        由于企业商务逻辑的处理过程是一个从市场、销售、采购到客户服务的整体,所以必须将商务逻辑处理过程中所涉及到的数据集成到一起,因此构造数据层的任务是:实现电子商务系统与企业内部和外部信息系统之间的网络互联,并确保安全的网络环境,基于应用服务器平台的商务应用系统与企业内部数据的共享。
 
       面向对象技术
        在介绍面向对象软件测试之前,有必要先对面向对象技术的基本概念做一下简单介绍。
               对象和类
               面向对象其实是现实世界模型的自然延伸。现实世界中任何实体都可以看作是对象。对象之间通过消息相互作用。另外,现实世界中任何实体都可归属于某类事物,任何对象都是某一类事物的实例。如果说传统的过程式编程语言是以过程为中心,以算法为驱动的话,那么面向对象的编程语言则是以对象为中心,以消息为驱动的。用公式表示,过程式编程语言为:程序=算法+数据;面向对象编程语言为:程序=对象+消息。
               在面向对象的程序设计中,类是其设计的核心,它实际是一种新的数据类型,也是实现抽象类型的工具,类是通过抽象数据类型的方法来实现的一种数据类型。类是对某一类对象的抽象;而对象是某一种类的实例,因此,类和对象是密切相关的。没有脱离对象的类,也没有不依赖于类的对象。
               封装、继承和多态性
               封装,把数据和操作结合成一体,使程序结构更加紧凑,同时避免了数据紊乱带来的调试与维护的困难;继承,增加了软件的可扩充性,并为代码重用提供了强有力的手段;多态性,使程序员在设计程序时可以对问题进行更好的抽象,易设计出重用性和维护性俱佳的程序。
               封装是将数据和操作数据的函数衔接在一起,构成的一个具有类类型的对象的描述。封装要求一个对象应具备明确的功能,并且有一个或几个接口以便和其他对象相互作用。同时,对象的内部实现(代码和数据)是受保护的,外界不能访问它们,只有对象中的代码才可以访问该对象的内部数据。对象的内部数据结构的不可访问性称为数据隐藏。封装简化了程序员对对象的使用,只需要知道输入什么和输出什么,而对类内部进行什么操作不必追究。
               例如,类Test(以C++为例):
               
               
               输出结果是16,对于main()里的操作,无法更改类Test中的Value值,这样保护了数据Value,实现了数据的隐藏。函数SetValue()和数据Value结合在一起操作,这就实现了封装。
               继承即可以从一个类派生另一个类。派生类(也称为子类)继承了其父类和祖先类的数据成员和成员函数。派生类可增加新的属性和新的操作,另外,派生类在继承的成员函数不合适时也可以放弃不用。
               例如,水果是基类,它具有好吃、营养等水果的基本特征;香蕉和苹果是水果的派生类,它们在继承水果类的一些特征的基础上,增加了各自的特征,如特殊的味道、形状等;红富士苹果和青苹果是苹果类的派生类,它们又增加了各自的新特征。如此继承设计,可以大大减少工作量。
               例如(C++程序),先设计水果类Friut。
               
               苹果类Apple需要与水果类Friut同样的成员函数void Eat和void Taste,另外增加了新的函数void Color和void Shape。在设计时,我们不需要重写void Eat和void Taste,只需要继承水果类即可,苹果类的实际代码如下。
               
               多态性就是多种表现形式,具体来说,可以用“一个对外接口,多个内在实现方法”表示。多态性的实现,一般通过在派生类中重定义基类的虚函数来实现。
               如下例(C++程序),如果A是基类,B和C是A的派生类,基类中多态函数Test的参数是A的指针。那么Test函数可以引用A、B、C的对象如下。
               
               
               正是面向对象软件所独有的这些多态、继承、封装等新特点,使OO程序设计比传统语言程序设计产生错误的可能性更大,使得传统软件测试中的重点不再显得那么突出,也使原来测试经验和实践证明的次要方面成为了主要问题。例如,在传统的面向过程程序中,对于函数y=Func(x);你只需要考虑一个函数“Func()”的行为特点,而在面向对象程序中,你不得不同时考虑基类函数“Base::Func()”的行为和继承类函数“Derived::Func()”的行为。
               面向对象程序的结构不再是传统的功能模块结构,作为一个整体,原有集成测试所要求的,逐步将开发的模块搭建在一起进行测试的方法已不可能。而且,面向对象软件抛弃了传统的开发模式,对每个开发阶段都有不同于以往的要求和结果,已经不可能用功能细化的观点来检测面向对象分析和设计的结果。因此,传统的测试模型对面向对象软件已经不再适用。针对面向对象软件的开发特点,一种新的面向对象测试模型应需而生。
   题号导航      2009年下半年 系统架构设计师 上午试卷 综合知识   本试卷我的完整做题情况  
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 /
 
第60题    在手机中做本题