来源:3773.com.cn 2012-12-21
2013计算机软件水平考试软件设计师考试大纲

软件设计师考试大纲

一、考试说明

1.考试目标
 通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序,并对软件进行优化和集成测试,开发出符合系统总体设计要求的高质量软件;具有工程师的实际工作能力和业务水平。
2.考试要求
 (1) 掌握计算机内的数据表示、算术和逻辑运算方法;
(2) 掌握相关的应用数学及离散数学基础知识;
(3) 掌握计算机体系结构以及各主要部件的性能和基本工作原理;
(4) 掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识;
(5) 熟练掌握常用数据结构和常用算法;
(6) 熟悉数据库、网络和多媒体的基础知识;
(7) 掌握C程序设计语言,以及C++、Java中的一种程序设计语言;
(8) 熟悉软件工程、软件过程改进和软件开发项目管理的基础知识;
(9) 掌握软件设计的方法和技术;
(10) 了解信息化、常用信息技术标准、安全性,以及有关法律、法规的基础知识;
(11) 正确阅读和理解计算机领域的英文资料。
3.考试科目
(1) 计算机与软件工程知识,考试时间为150分钟,笔试,选择题;
(2) 软件设计,考试时间为150分钟,笔试,问答题。
二、考试范围
考试科目1:计算机与软件工程知识
1. 计算机科学基础知识
1.1数制及其转换
 二进制、八进制、十进制和十六进制等常用数制及其相互转换
1.2 计算机内数据的表示
 数的表示(补码表示,整数和实数的表示,精度和溢出)
 非数值表示(字符和汉字表示,声音表示、图像表示)
1.3算术运算和逻辑运算
 计算机中的二进制数运算方法
 逻辑代数的基本运算
1.4其他数学基础知识
 常用数值计算
 排列组合,概率论应用,应用统计(数据的统计分析)
 编码基础
 命题逻辑、谓词逻辑、形式逻辑的基础知识
 运筹基本方法
2. 计算机系统知识
2.1计算机硬件基础知识
2.1.1计算机系统的组成、体系结构分类及特性
 CPU、存储器的组成、性能和基本工作原理
 常用I/O设备、通信设备的性能以及基本工作原理
 I/O接口的功能、类型和特性
 CISC/RISC,流水线操作,多处理机,并行处理
2.1.2存储系统
 虚拟存储器基本工作原理,多级存储体系
 RAID类型和特性
2.1.3可靠性与系统性能评测基础知识
 诊断与容错
 系统可靠性分析评价
 计算机系统性能评测方法
2.2计算机软件知识
2.2.1数据结构与算法知识
 数组
 链表
 队列、栈
 树
 图的定义、存储和基本操作
 杂凑(Hash表)
 常用的排序算法、查找算法、数值计算、字符串处理、数据压缩算法、递归算法、图的相关算法
 算法描述和分析
2.2.2 操作系统知识
 操作系统的内核
 处理机管理
 存储管理
 设备管理
 文件管理
 作业管理
 网络操作系统和嵌入式操作系统基础知识
 操作系统的配置
2.2.3程序设计语言和语言处理程序知识
 汇编、编译、解释系统的基础知识和基本工作原理
 程序设计语言的基本成分(数据、运算、控制和传输),程序调用的实现机制
 各类程序设计语言的主要特点和适用情况
2.2.4 数据库知识
 数据库模型(概念模式、外模式、内模式)
 数据模型,ER图,规范化
 数据操作
 数据库语言
 数据库管理系统的功能和特征
 数据库的控制功能
 数据仓库和分布式数据库基础知识
2.3 计算机网络知识
 网络体系结构
 传输介质,传输技术,传输方法,传输控制
 常用网络设备和各类通信设备的特点
 Client-Server结构,Browser-Server结构
 LAN(拓扑,存取控制,组网,网间互连)
 Internet 和Intranet 基础知识以及应用
 网络软件
 网络管理,网络性能分析
2.4 多媒体基础知识
 多媒体系统基础知识
 简单图形的绘制,图像文件的处理方法
 音频和视频信息的应用
 多媒体应用开发过程

3. 系统开发和运行知识
3.1软件工程知识
 软件生存周期与软件生存周期模型
 软件开发方法
 软件开发项目管理
 软件开发工具与软件开发环境
3.2 系统分析基础知识
 系统分析的主要步骤
 机构化分析方法
3.3 系统设计基础知识
 概要设计与详细设计的基本任务
 系统设计的基本原理
 系统模块结构设计
 结构化设计方法
 面向数据结构的设计方法
 系统详细设计
3.4 系统实施基础知识
 系统实施的基本内容
 程序设计方法
 程序设计的基本模块
 系统测试
 系统转换
3.5 系统运行和维护基础知识
 系统可维护性的概念
 系统维护的类型
 系统评价的概念和类型
3.6 软件质量管理基础知识
 软件质量特性(ISO/IEC 9126软件质量模型)
 软件质量保证
 软件复杂性的概念及度量方法(McCabe度量法)
 软件评审(设计质量评审、程序质量评审)
 软件容错技术
3.7 软件过程改进基础知识
 软件能力成熟度模型CMM
 统一过程(UP)与极限编程(XP)的基本概念
4. 面向对象基础知识
 面向对象的基本概念
 面向对象分析与设计知识
 分析模式与设计模式知识
 面向对象程序设计知识
 面向对象数据库、分布式对象基础知识
5. 信息安全知识
 信息系统安全基础知识
 信息系统安全管理
 保障完整性与可用性的措施
 加密与解密机制基础知识
 风险管理(风险分析、风险类型、抗风险措施和内部控制)
 计算机安全相关的法律、法规基础知识

6. 标准化、信息化和知识产权基础知识
6.1 标准化基础知识
 标准化意识,标准化组织机构,标准的内容、分类、代号与编号规定,标准制订过程
 国际标准、国家标准、行业标准、企业标准
 代码标准、文件格式标准、安全标准、互联网相关标准、软件开发规范和文档标准、基于构件的软件标准
6.2 信息化基础知识
 全球信息化趋势、国家信息化战略、企业信息化战略和策略
 互联网相关的法律、法规
 个人信息保护规则
 远程教育、电子商务、电子政务等基础知识
 企业信息资源管理基础知识
6.3 知识产权基础知识
 保护知识产权有关的法律、法规

7. 计算机专业英语
 具有工程师所要求的英语阅读水平
 理解本领域的英语术语
考试科目2:软件设计
1.外部设计
1.1 理解系统需求说明 
1.2 准备进行系统开发 
 选择开发方法、准备开发环境、制订开发计划 
1.3 设计系统功能 
 选择系统结构
 设计各子系统的功能和接口
 设计安全性策略、需求和实现方法
 制订详细的工作流和数据流 
1.4 设计数据模型 
 设计ER模型及其他数据模型 
1.5 编写外部设计文档 
 系统配置图、各子系统关系图
 系统流程图、系统功能说明书
 输入输出规格说明、数据规格说明、用户手册框架 
 设计系统测试要求 
1.6 外部设计的评审

2.内部设计
2.1 设计软件结构
 按构件分解,确定构件功能、规格以及构件之间的接口
 数据结构与算法设计
 采用中间件和工具 
2.2 设计输入输出
2.3 设计物理数据
2.4 构件的创建和重用
 创建构件、重用构件
 使用子程序库或类库 
2.5 编写内部设计文档
 构件划分图、构件间的接口、构件处理说明
 屏幕界面设计文档、报表设计文档、文件设计文档、数据库设计文档 
2.6 内部设计的评审
3.数据库应用分析与设计 
 设计关系模式
 数据库语言(SQL)
 数据库访问
4.程序设计 
4.1 模块划分
4.2 编写程序设计文档
4.3 程序设计评审 
5.系统实施 
5.1 配置计算机系统及环境
5.2 选择合适的程序设计语言
5.3 用C程序设计语言以及C++、Java中的任一种程序设计语言进行程序设计
5.4 系统测试
 指导程序员进行模块测试,并进行验收
 准备系统集成测试环境和测试工具
 准备测试数据
 写出测试报告
6.软件工程应用
6.1 软件开发周期模型
6.2 需求分析
6.3 软件设计
 软件设计的基本原则
 软件设计方法
 程序设计(结构化程序设计、面向对象程序设计)
6.4  软件测试的原则与方法
6.5  软件质量(软件质量特性、软件质量控制)
6.6  软件过程评估基本方法、软件能力成熟度评估基本方法
6.7  软件开发环境和开发工具
6.8  面向对象技术
 面向构件技术
 统一建模语言(UML)
 软件过程改进模型和方法
6.9  网络环境软件技术
三、题型举例
(一)选择题
1. 某系统的可靠性结构框图如下图所示。该系统由4个部件组成,其中2、3两部件并联冗余,再与1、4部件串联构成。假设部件1、2、3的可靠度分别为0.90、0.70、0.70。若要求该系统的可靠度不低于0.75,则进行系统设计时,分配给部件4的可靠度至少应为  (1) 。
(1)A.        B.   
C.      D.  
2. 结构化开发方法中,数据流图是 (2) 阶段产生的成果。
(2)A. 需求分析    B. 总体设计   C. 详细设计   D. 程序编码
3. 在进行面向对象设计时,采用设计模式能够(3)。
(3)A. 复用相似问题的相同解决方案  B. 改善代码的平台可移植性
C. 改善代码的可理解性    D. 增强软件的易安装性
4.   (4)   analysis emphasizes the drawing of pictorial system models to document and validate both existing and/or proposed systems. Ultimately, the system models become the     (5)   for designing and constructing an improved system.   (6)   is such a technique. The emphasis in this technique is process-centered. Systems analysts draw a series of process models called   (7)  .   (8)   is another such technique that integrates data and process concerns into constructs called objects.
(4)A. Prototyping B. Accelerated  C. Model-driven  D. Iterative
(5)A. image  B. picture   C. layout   D. blueprint
(6)A. Structured analysis     B. Information Engineering
C. Discovery Prototyping   D. Object-Oriented analysis
(7)A. PERT  B. DFD   C. ERD    D. UML
(8)A. Structured analysis     B. Information Engineering
C. Discovery Prototyping   D. Object-Oriented analysis
(二)问答题
试题一 软件设计必做样题
阅读下列说明以及图1-1和图1-2,回答问题1、问题2和问题3,将解答填入答题纸的对应栏内。
[说明]
某电话公司决定开发一个管理所有客户信息的交互式网络系统。系统的功能如下:
1.浏览客户信息:任何使用Internet的网络用户都可以浏览电话公司所有的客户信息(包括姓名、住址、电话号码等)。
2.登录:电话公司授予每个客户一个帐号。拥有授权帐号的客户,可以使用系统提供的页面设置个人密码,并使用该帐号和密码向系统注册。
3.修改个人信息:客户向系统注册后,可以发送电子邮件或者使用系统提供的页面,对个人信息进行修改。
4.删除客户信息:只有公司的管理人员才能删除不再接受公司服务的客户的信息。
系统采用面向对象方法进行开发,在开发过程中认定出的类如下表所示:
编号 类名 描述
1 InternetClient 网络用户
2 CustomerList 客户信息表,记录公司所有客户的信息
3 Customer 客户信息,记录单个客户的信息
4 CompanyCustomer 公司客户
5 InternalClient 公司的管理人员

图1-1

图1-2

【问题1】
在需求分析阶段,采用UML的用例图(use case diagram)描述系统功能需求,如图1-1所示。请指出图中的A、B、C和D分别是哪个用例?
【问题2】
在UML中,重复度(Multiplicity)定义了某个类的一个实例可以与另一个类的多少个实例相关联。通常把它写成一个表示取值范围的表达式或者一个具体的值。例如图3-2中的类InternetClient和CustomerList,InternetClient端的“0..*”表示:一个CustomerList的实例可以与0个或多个InternetClient的实例相关联;CustomerList端的“1”表示:一个InternetClient的实例只能与一个CustomerList的实例相关。
请指出图1-2中(1)到(4)处的重复度分别为多少?
【问题3】
类通常不会单独存在,因此当对系统建模时,不仅要识别出类,还必须对类之间的相互关系建模。在面向对象建模中,提供了四种关系:依赖(dependency)、概括(generalization)、关联(association)和聚集(aggregation)。请分别说明这四种关系的含义,并说明关联和聚集之间的主要区别。
试题二 C语言选做样题
阅读以下预备知识、函数说明和C代码,将应填入  (n)  处的字句写在答题纸的对应栏内。
【预备知识】
(1)对给定的字符集合及相应的权值,采用哈夫曼算法构造最优二叉树,并用结构数组存储最优二叉树。例如,给定字符集合{a,b,c,d}及其权值2、7、4、5,可构造如下所示的最优二叉树和相应的结构数组Ht(数组元素Ht[0]不用)。

最优二叉树
数组下标 ch weight parent lchild rchild
1 a 2 5 0 0
2 b 7 7 0 0
3 c 4 5 0 0
4 d 5 6 0 0
5  6 6 1 3
6  11 7 4 5
7  18 0 2 6
                                 结构数组Ht

结构数组Ht的类型定义如下:
#define MAXLEAFNUM  20
struct node{
char ch;        /*当前结点表示的字符,对于非叶子结点,此域不用*/
int weight;     /*当前结点的权值*/
      int parent;     /*当前结点的父结点的下标,为0时表示无父结点*/ 
int lchild,rchild; 
/*当前结点的左、右孩子结点的下标,为0时表示无对应的孩子结点*/
}Ht[2*MAXLEAFNUM];
(2)用‘0’或‘1’标识最优二叉树中分支的规则是:从一个结点进入其左(右)孩子结点,就用‘0’(‘1’)标识该分支(示例见上图)。
(3)若用上述规则标识最优二叉树的每条分支后,从根结点开始到叶子结点为止,按经过分支的次序,将相应标识依次排列,可得到由‘0’、‘1’组成的一个序列,称此序列为该叶子结点的前缀编码。例如上图所示的叶子结点a、b、c、d的前缀编码分别是110、0、111、10。
【函数说明】
函数void LeafCode(int root,int n)的功能是:采用非递归方法,遍历最优二叉树的全部叶子结点,为所有的叶子结点构造前缀编码。其中形参root为最优二叉树的根结点下标;形参n为叶子结点个数。
在构造过程中,将Ht[p].weight域用作被遍历结点的遍历状态标志。
【函数】
char **Hc;
void LeafCode(int root,int n) 
{ /*为最优二叉树中的n个叶子结点构造前缀编码,root是树的根结点下标*/
int i, p = root, cdlen = 0;  char code[20];
  Hc = (char **)malloc((n+1)*sizeof(char *)); /*申请字符指针数组*/
  for(i = 1; i <= p; ++i) 
Ht[i].weight = 0; /*遍历最优二叉树时用作被遍历结点的状态标志*/
while(p) { /*以非递归方法遍历最优二叉树,求树中每个叶子结点的编码*/
if(Ht[p].weight == 0) {        /*向左*/
        Ht[p].weight = 1;
        if (Ht[p].lchild != 0) { p = Ht[p].lchild; code[cdlen++] = ′0′;}
        else if (Ht[p].rchild == 0) { /*若是叶子结点,则保存其前缀编码*/
               Hc[p] = (char *)malloc((cdlen+1)*sizeof(char));
                  (1)   ;   strcpy(Hc[p],code);
}
      }
      else if(Ht[p].weight == 1) {    /*向右*/
          Ht[p].weight = 2;
          if (Ht[p].rchild != 0) { p = Ht[p].rchild; code[cdlen++] = ′1′;}
        }
        else {  /* Ht[p].weight==2,回退*/
        Ht[p].weight = 0;
p =    (2)   ;    (3)   ;   /*退回父结点*/
        }
} /*while结束*/
}

【函数说明】
函数void Decode(char *buff,int root)的功能是:将前缀编码序列翻译成叶子结点的字符序列,并输出。其中形参root为最优二叉树的根结点下标;形参buff指向前缀编码序列。
【函数】
void Decode(char *buff, int root)
{   int pre = root, p;
while (*buff != ′\0′) {     
p = root;
  while (p != 0) { /*存在下标为p的结点*/
         pre = p;    
         if (   (4)   )  p = Ht[p].lchild;   /*进入左子树*/
         else p = Ht[p].rchild;           /*进入右子树*/
         buff++;                   /*指向前缀编码序列的下一个字符*/
      }
   (5)   ;
printf("%c", Ht[pre].ch);
     }
}
试题三 C++语言选做样题
阅读以下说明和C++代码,将应填入  (n)  处的字句写在答题纸的对应栏内。
【说明】
 在一公文处理系统中,开发者定义了一个公文类OfficeDoc,其中定义了公文具有的属性和处理公文的相应方法。当公文的内容或状态发生变化时,关注此OfficeDoc类对象的相应的DocExplorer对象都要更新其自身的状态。一个OfficeDoc对象能够关联一组DocExplorer对象。当OfficeDoc对象的内容或状态发生变化时,所有与之相关联的DocExplorer对象都将得到通知,这种应用被称为观察者模式。以下代码写在一个C++源文件中,能够正确编译通过。
【C++代码】
#include <iostream>
const OBS_MAXNUM=20; //最多与OfficeDoc对象相关联的DocExplorer对象的个数

(1)     ;

class DocExplorer{  //关注OfficeDoc公文对象的类
public:
 DocExplorer (     (2)      *doc);   //构造函数
      (3)      void update(OfficeDoc *doc)=0; //更新自身状态的函数
 //其它相关属性和方法省略
};

class OfficeDoc{   //公文类
private:
 DocExplorer *myObs[OBS_MAXNUM];  
//关注此公文类的DocExplorer类对象指针数组
 int index;  //与OfficeDoc对象关联的DocExplorer对象的个数
public:
 OfficeDoc(){
  index=0;
 }
 void  attach(DocExplorer *o){ 
//将一DocExplorer对象与OfficeDoc对象相关联
  if (index >= OBS_MAXNUM || o == NULL) return;
  for(int loop = 0; loop < index; loop++)
   if(myObs[loop] == o) return; 
  myObs[index] = o; 
  index++;
 }
 void  detach(DocExplorer *o){ 
//解除某DocExplorer对象与OfficeDoc对象的关联
  if(o==NULL) return;
  for(int loop = 0; loop < index; loop ++){
   if(myObs[loop] == o){
    if(loop <= index-2) myObs[loop] = myObs[index-1];
    myObs[index-1]=NULL;
    index--;
    break;
   }
  }
 }
private:
 void notifyObs(){  //通知所有的DocExplorer对象更改自身状态
  for(int loop = 0; loop < index; loop++){
   myObs[loop]->     (4)     ;  //DocExplorer对象更新自身状态
  }
 }
//其它公文类的相关属性和方法
};

DocExplorer::DocExplorer(OfficeDoc *doc){ //DocExplorer类对象的构造函数
 doc->     (5)     ;  //将此DocExplorer对象与doc对象相关联
}
试题四 Java语言选做样题
阅读以下说明和Java代码,将应填入  (n)  处的字句写在答题纸的对应栏内。
【说明】
 在一公文处理系统中,开发者定义了一个公文类OfficeDoc,其中定义了公文具有的属性和处理公文的相应方法。当公文的内容或状态发生变化时,关注此OfficeDoc类对象的相应的DocExplorer对象都要更新其自身的状态。一个OfficeDoc对象能够关联一组DocExplorer对象。当OfficeDoc对象的内容或状态发生变化时,所有与之相关联的DocExplorer对象都将得到通知,这种应用被称为观察者模式。以下代码采用Java语言实现,能够正确编译通过。
【Java 代码】
// Subject.java文件
public interface Subject {
 public void attach(Observer DocExplorer);
 public void detach(Observer DocExplorer); 
 void notifyObservers();
}

// Observer.java文件
public interface Observer{
 void update(     (1)     );
}

// OfficeDoc.java文件
import java.util.*;
public class OfficeDoc implements Subject{ //OfficeDoc类实现Subject接口
 private Vector ObserverVector = new java.util.Vector();
 // 存储与OfficeDoc相关联的DocExplorer对象

public void attach(Observer  observer){ 
//将某DocExplorer对象与OfficeDoc相关联
  ObserverVector.addElement(observer);
 }

public void detach(Observer observer){
  //解除某DocExplorer对象与OfficeDoc的关联关系
  ObserverVector.removeElement(observer);
 }
 public void notifyObservers(){
  //当OfficeDoc对象状态已发生变化时,通知所有的DocExplorer对象
  Enumeration enumeration =      (2)     ;
  while (enumeration.hasMoreElements()){
   ((Observer)enumeration.nextElement()).     (3)     ;
  }
 }

public Enumeration Observers(){
  return  ObserverVector.elements();
 }
 //其它公文类的属性和方法省略
}

// DocExplorer.java文件
public class DocExplorer implements      (4)     {
 public void update(     (5)     ){
  //更新DocExplorer自身的状态,代码省略
 }
}
 
软件设计师培训指南
一、考试说明
1.考试目标
 通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序,并对软件进行优化和集成测试,开发出符合系统总体设计要求的高质量软件;具有工程师的实际工作能力和业务水平。
2.考试要求
 (1) 掌握计算机内的数据表示、算术和逻辑运算;
(2) 掌握相关的应用数学及离散数学基础知识;
(3) 掌握计算机体系结构以及各主要部件的性能和基本工作原理;
(4) 掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识;
(5) 熟练掌握常用数据结构和常用算法;
(6) 熟悉数据库、网络和多媒体的基础知识;
(7) 掌握C程序设计语言,以及C++、Java中的一种程序设计语言;
(8) 熟悉软件工程、软件过程改进和软件开发项目管理的基础知识;
(9) 掌握软件设计的方法和技术;
(10) 了解信息化、常用信息技术标准、安全性,以及有关法律、法规的基础知识;
(11) 正确阅读和理解计算机领域的英文资料。
3.考试科目
(1) 计算机与软件工程知识,考试时间为150分钟,笔试,选择题;
(2) 软件设计,考试时间为150分钟,笔试,问答题。
二、考试内容
说明: 
“I”、“II”和“III”表示掌握或熟悉的程度:
“I”是指对所列知识要理解其内容及含义(理解)。
“II” 指在有关问题中能直接使用(一般应用)。
“III”是指对所列知识要理解其确切含义及与其它知识的联系,能够进行叙述和解释,并能在实际问题的分析、综合、推理和判断等过程中运用(综合应用)。
考试科目1:计算机与软件工程知识
1. 计算机科学基础知识  
1.1数制及其转换
 二进制、八进制、十进制和十六进制等常用数制及其相互转换 (Ⅱ)
1.2 计算机内数据的表示
 数的表示
 带符号定点数据(纯整数和纯小数)的原码、反码、补码和移码表示(Ⅱ)
 浮点数(实数)的表示(Ⅱ)
 溢出的概念(Ⅱ)
1.3算术运算和逻辑运算
 计算机中的二进制数运算方法
 补码表示下定点数的加、减、乘、除运算方法(I)
 逻辑代数的基本运算
 基本的逻辑运算:与、或、非、异或(Ⅱ)
1.4其他数学基础知识
 常用数值计算
 矩阵和行列式、近似求解、插值、数值积分、常微分方程等常用的数值运算方法及运算误差的概念(I)
 排列组合,概率论应用,应用统计(数据的统计分析)(I)
 编码基础(ASCⅡ码,汉字编码,奇偶校验,海明码,霍夫曼码、循环冗余码)
 奇偶校验码、海明码、霍夫曼码、循环冗余码的编码方法及指定实例时校验码的计算(I)
 命题逻辑、谓词逻辑、形式逻辑的基础知识  (I)
2. 计算机系统基础知识 
2.1计算机硬件基础知识 
2.1.1计算机系统的组成、体系结构分类及特性
 CPU、存储器的组成、性能和基本工作原理
 CPU的基本组成结构(I)
 存储器的组成及特点:内存、外存、缓存Cache)、闪存(Ⅱ)
 存储器的性能指标定义:存取周期、存储容量和可靠性(Ⅱ)
 常用I/O设备、通信设备的性能以及基本工作原理(I)
 I/O接口的功能、类型和特性
 CPU在与I/O设备进行数据交换时存在的主要问题:速度不匹配、时序不匹配、信息格式不匹配、信息类型不匹配(I)
 CPU与外设之间的数据交换必须通过接口来完成,I/O接口的主要功能(Ⅱ)
 接口的控制方式及特点:CPU通过接口对外设进行控制的方式程序查询方式、中断处理方式、DMA(直接存储器存取)传送方式(Ⅱ)
 CISC/RISC,流水线操作,多处理机,并行处理
 RISC(精简指令集计算机)和CISC(复杂指令集计算机)的定义和特点(I)
 流水线的定义及操作特点(Ⅱ)
 多处理机的概念(I)
 单指令流单数据流(SISD)、单指令流多数据流(SIMD)、多指令流单数据流(MISD)、多指令流多数据流(MIMD)的概念和特点(Ⅱ)
 并行处理的基本概念(I)
2.1.2存储系统
 虚拟存储器基本工作原理,多级存储体系
 虚拟存储器的定义和管理方式(I)
 多级存储体系的组成及特点(Ⅱ)
 RAID类型和特性
 RAID的定义和基本特点(I)
 RAID 0~RAID 7、RAID 10、RAID 53等规范的特征(I)
2.1.3可靠性与系统性能评测基础知识
 诊断与容错
 容错技术与容错控制(I)
 系统可靠性分析评价
 系统的可靠性定义(I)
 串联系统特点及可靠性度量(Ⅱ)
 并联系统特点及可靠性度量(Ⅱ)
 模冗余系统等可靠性数学模型的特点(I)
 计算机系统性能评测方法
 平均无故障时间(MTBF)的定义 (I)
 平均修复时间(MTRF)的定义(I)
 可用性的定义(I)
2.2计算机软件基础知识
2.2.1数据结构与算法知识 
 数组
 二维数组:按行存储和按列存储,数组元素存储位置的计算(Ⅱ)
 特殊矩阵和稀疏矩阵的特点及压缩存储(Ⅱ)
 静态数组(固定容量数组)(I)
 动态数组(根据应用需要申请或扩充数组的容量)(I)
 链表
 线性表的定义和基本运算(I)
 线性表的顺序存储和特点(I)
 单向链表、双向链表和环形链表的运算特点(Ⅱ)
 指针、结点、头指针和头结点的概念(Ⅱ)
 队列和栈
 队列的定义、运算和存储结构(Ⅱ)
 栈的定义、运算和存储结构(Ⅱ)
 树
 二叉树的定义(Ⅱ)
 满二叉树、完全二叉树的定义(Ⅱ)
 二叉树的性质(Ⅱ)
 二叉树的顺序存储和二叉链表存储(Ⅱ)
 二叉树的遍历:先序、中序、后序和层序(Ⅱ)
 最优二叉树的定义、特点和构造方法(Ⅱ)
 二叉排序树的定义和运算(Ⅱ)
 平衡二叉树、B-树、B+树的概念(I)
 树与二叉排序树的相互转换(Ⅱ)
 图
 图结构的定义(I)
 图的邻接矩阵存储和邻接表存储(I)
 图的广度优先遍历和深度优先遍历操作(Ⅱ)
 杂凑
 哈希(杂凑)表的构造、冲突的处理和元素的查找,平均查找长度的计算(Ⅱ)
 常用算法
 插入排序、冒泡排序、选择排序算法(Ⅲ)
 希尔排序、快速排序、堆排序、归并排序方法及特点(Ⅱ)
 顺序查找、二分查找方法及特点(Ⅲ)
 模式匹配算法(Ⅱ)
 图的遍历算法、求最小生成树算法、拓扑排序算法、求最短路径算法、求关键路径算法的算法思想(Ⅱ)
 递归算法的设计方法(Ⅱ)
 算法描述和分析
 算法的实现与数据结构的关系(Ⅱ)
 算法的效率分析(Ⅱ)
 算法的流程图、伪代码描述方式(Ⅱ)
 算法的时间复杂性和空间复杂性概念(I)
2.2.2 操作系统知识
 操作系统的内核
 操作系统内核的功能和基本组成(I)
 内核与用户程序的运行方式差别(I)
 内核运行、中断控制的基本知识(I)
 处理机管理
 进程、线程等基本概念,程序顺序执行和并发执行的基本特征(I)
 进程的基本组成,进程的基本状态及状态间的切换,三态模型与五态模型(II)
 进程间的通信:同步与互斥、临界资源、临界区、信号量、PV操作(II)
 管程的概念(I)
 进程调度方式及常用的进程调度算法(II)
 死锁的定义、产生死锁的原因、产生死锁的必要条件(II)
 存储管理
 虚拟地址、地址空间、存储空间、地址重定位的基本概念(I)
 分页存储管理(II)
 程序的局部性特点,虚拟存储器的实现方法(I)
 页面置换算法:最佳置换算法、先进先出置换算法、最近最久未使用置换算法、最近未用置换算法(II)
 设备管理
 设备分类方法(I)
 通道、DMA的概念及特点(I)
 Spooling(Simultaneous Peripheral Operations On Line)定义、组成和结构(I)
 磁盘调度算法:先来先服务(First-Come First-Served,FCFS)、最短寻道时间优先SSTF(Shortest Seek Time First)、扫描算法(SCAN)、单向扫描调度算法(CSCAN)磁盘调度算法的基本思想(II)
 文件管理
 文件、文件系统、文件类型、文件组织结构的基本概念(I)
 文件的物理结构:连续结构、链接结构、索引结构、多个物理块的索引表结构的基本概念(I)
 目录,一级目录、二级目录、多级目录的基本概念(I)
 文件的存取方法:顺序存取法、直接存取法、按键存取法的基本概念(I)
 文件存储空间的管理:位示图、空闲区表、空闲块链、成组链接法基本思想(I)
 作业管理
 作业的状态(提交、后备、执行、完成)、作业控制块和作业后备队列的基本概念(I)
 先来先服务、短作业优先、响应比高优先作业调度算法思想(II)
 优先级调度算法思想(II)
 网络操作系统和嵌入式操作系统基础知识
 网络操作系统的特征和分类(I)
 嵌入式操作系统的特点(I)
 操作系统的配置(I)
2.2.3 程序设计语言和语言处理程序知识 
 汇编、编译、解释系统的基础知识和基本工作原理
 语言翻译的基本概念(I)
 汇编的基本方法(I)
 编译的基本过程及编译各阶段的基本任务(I)
 解释的基本过程(I)
 有限自动机的定义及构造(Ⅱ)
 正规表达式的定义、构造及特点 (Ⅱ)
 上下文无关文法的定义(I)
 句子的推导(Ⅱ)
 程序设计语言的基本成分:数据、运算、控制和传输,程序调用的实现机制
 程序设计语言的数据、运算、控制及输入输出处理机制(I)
 函数的参数传递机制:传值、传地址(Ⅱ)
 各类程序设计语言的主要特点和适用情况
 过程式程序语言、面向对象程序设计语言、函数式程序设计语言、逻辑程序设计语言的基本特点(I)
 脚本语言的特点(I)
2.2.4 数据库知识  
 数据库模型(概念模式、外模式、内模式)
 概念模式(模式)、外模式(用户模式或子模式)、内模式(物理模式)的基本概念(Ⅱ)
 三级模式和两级映像(模式/内模式映像、外模式/模式映像)的基本概念(Ⅱ)
 数据的独立性(数据的逻辑独立性、数据的物理独立性)的基本概念(Ⅱ)
 数据模型,ER图,规范化
 数据模型:层次模型、网状模型、关系模型、面向对象模型的基本概念(Ⅰ)关系模型的应用方法(Ⅱ)
 数据模型的三要素(数据结构、数据操作、数据的约束条件)的含义(Ⅰ)
 E-R模型方面的基本概念(Ⅱ);E-R图(E-R模型)向关系模型的转换的基本方法(Ⅱ)
 实体中主键、候选键、外键方面的基本概念(Ⅱ)
 联系类型(一对多(1:1)、一对多(1:n)、多对多(m:n))的基础知识(Ⅱ)
 属性(简单属性、复合属性、单值属性、多值属性、NULL属性、派生属性)的含义(Ⅰ)
 关系模式规范化的程度:第一、第二、第三范式(Ⅰ)
 数据操作
 关系数据库、关系数据库模式的基本概念(Ⅱ)
 关系模型的完整性规则:实体完整性、参照完整性、用户定义完整性的基本概念(Ⅰ)
 5种基本的关系运算(并、差、笛卡尔积、投影、选择)的基本概念(Ⅰ);扩展的关系运算中选择、投影、连接运算方法(Ⅱ);扩展的关系运算中的除法、外联接方面的基本概念(Ⅰ)
 数据库语言
 数据定义语言(DDL):CREATE TABLE (创建表)使用方法(Ⅱ)
 数据操纵语言(DML):SELECT(查询)、INSERT(插入)、DELETE(删除)和UPDATE(修改) 使用方法(Ⅱ)
 完整性(integrity)定义:PRIMARY KEY、FOREIGN KEY REFERENCES使用方法(Ⅱ)
 权限管理(authorization) :GRANT和REVORK使用方法(Ⅱ)
 数据库管理系统的功能和特征
 数据库管理系统的特征、功能与组成、文件系统的特征,文件系统与数据库管理系统的差异的基本概念(Ⅰ)
 数据库的控制功能
 事务的基本概念、事务的特性、故障的类型的基础知识(Ⅰ)
 数据不一致性(丢失修改、不可重复读、读脏数据)的基础知识(Ⅰ)
 并发控制中活锁/死锁、可串行性、两段锁协议的基本概念(Ⅰ)
 安全控制(权限机制、视图机制、加密机制)的基本概念(Ⅰ)
 事务、事务的特性、事务的状态、事务状态的转换的基本概念(Ⅰ)
 故障的类型、故障的恢复技术、恢复策略的基础知识(Ⅰ)
 并发控制后会产生丢失修改、不可重复读、读脏数据三类数据不一致性(Ⅰ),造成数据不一致性的原因(Ⅱ)
 并发控制中事务的调度(串行调度、并行调度)、活锁/死锁、可串行性、两段锁协议的基础知识(Ⅰ)
 安全控制(权限机制、视图机制、加密机制)的基本概念(Ⅰ)
 数据仓库和分布式数据库基础知识
 数据仓库(Data Warehouse,DW):基本特性、数据模式、体系结构的基本概念(Ⅰ)
 数据仓库模型:企业仓库、数据集市和虚拟仓库的基本概念(Ⅰ)
 分布式数据库的定义、体系结构、设计目标、分布数据独立的基本概念(Ⅰ)
2.3 计算机网络知识 
 网络体系结构
 网络拓扑(Ⅱ)
 OSI/RM,TCP/IP(Ⅱ)
 常用的网络协议(Ⅱ)
 传输介质,传输技术,传输方法,传输控制(Ⅰ)
 常用网络设备和各类通信设备的功能和特点(Ⅰ)
 Client-Server结构、Browser-Server结构的特点(Ⅰ)
 局域网
 拓扑结构     (Ⅱ)
 存取控制     (Ⅰ)
 网间互连     (Ⅰ)
 Internet 和Intranet 基础知识以及应用(Ⅱ)
 网络软件(Ⅰ)
 网络管理及网络性能分析(Ⅰ)
2.4 多媒体基础知识 
 多媒体系统基础知识
 媒体分类:感觉媒体、表示媒体、表现媒体、存储媒体和传输媒体的基本概念(Ⅰ)
 多媒体、超媒体、流媒体的基本概念(Ⅰ)
 色彩的三基色、彩色空间、三要素基本概念(Ⅰ)
 图形和图像,图像分辨率与显示分辨率、像素深度、真/伪彩色,图像的压缩标准的基本概念(Ⅱ)
 简单图形的绘制,图像文件的处理方法
 图像的压缩编码:有损压缩和无损压缩方面的基本概念(Ⅰ)
 JPEG、MPEG和H.261等编码及压缩标准方面的基本概念(Ⅰ)
 图像文件的处理方法的基础知识(Ⅰ)
 音频和视频信息的应用
 常见的声音文件格式(Ⅰ)
 数字声音信号、波形声音的基本概念(Ⅰ)
 声音信号的数字化,包括采样、量化、编码;了解数字语音的数据压缩方法:波形编码、参数编码、混合编码的基础知识(Ⅱ)
3.系统开发和运行知识
3.1 软件工程基础知识
 软件生存周期与软件生存周期模型
 瀑布模型、演化模型、螺旋模型、喷泉模型(Ⅱ)
 软件开发方法
 结构化方法、面向对象方法的基本概念(Ⅱ)
 软件开发项目管理
 成本估算、风险分析、进度管理(Gantt图、PERT图)、人员管理(Ⅰ)
 软件工具与软件开发环境
 分析工具、设计工具、编程工具、测试工具、维护工具、CASE(Ⅰ)
3.2 系统分析基础知识
 系统分析的主要步骤(Ⅰ)
 结构化分析方法
 数据流图的基本构成、数据字典、加工逻辑的描述(结构化语言、决策表、决策树)(Ⅱ)
3.3 系统设计基础知识
 概要设计与详细设计的基本任务  (Ⅰ)
 系统设计的基本原理
 抽象、模块化、信息隐蔽、模块独立(耦合、内聚)的基本概念(Ⅰ)
 系统模块结构设计
 模块的概念、模块结构图的构成与内涵(Ⅰ)
 结构化设计方法(变换分析、事务分析的概念及基本步骤)(Ⅰ)
 面向数据结构的设计方法(Jackson方法的设计步骤)(Ⅰ)
 系统详细设计
 代码设计的基本原则(Ⅰ)
 输入/输出设计的基本原则(Ⅰ)
 处理过程的设计(程序流程图、盒图、决策树、决策表)(Ⅰ)
 用户界面设计的基本原则)(Ⅰ)
3.4 系统实施基础知识
 系统实施的基本内容(Ⅰ)
 程序设计方法
 结构化程序设计方法、面向对象程序设计方法的基本概念(Ⅱ)
 程序设计的基本模块(Ⅰ)
 系统测试
 系统测试的基本原则(Ⅰ)
 用黑盒法设计测试用例(等价类划分、边界值划分、错误推测、因果图)(Ⅱ)
 用白盒法设计测试用例(逻辑覆盖、循环覆盖、基本路径测试)(Ⅱ)
 理解单元测试、集成测试、确认测试与系统测试的基本内容(Ⅱ)
 系统转换
3.5 系统运行和维护基础知识
 系统可维护性的概念(Ⅰ)
 系统维护的类型
 正确性维护、适应性维护、完善性维护、预防性维护的基本概念(Ⅱ)
 系统评价的概念与类型(Ⅰ)
3.6 软件质量管理基础知识
 软件质量特性(ISO/IEC 9126软件质量模型) (Ⅰ)
 软件质量保证(Ⅰ)
 软件复杂性的概念及度量方法(McCabe度量法)(Ⅰ)
 软件评审(设计质量评审、程序质量评审)(Ⅰ)
 软件容错技术
 容错软件的定义、容错的一般方法(结构冗余、信息冗余、时间冗余、冗余附加技术)(Ⅰ)
3.7 软件过程改进基础知识
 软件能力成熟度模型CMM(Ⅱ)
 统一过程(UP)与极限编程(XP)的基本概念(Ⅱ)
4.面向对象基础知识
4.1 面向对象的基本概念
 对象、消息、类、继承(单继承、多继承)、多态(动态绑定机制)(Ⅱ)
4.2 面向对象分析与设计知识
 面向对象分析的基本活动
 认定对象、组织对象、描述对象间的相互作用、定义对象的操作、定义对象的内部信息(Ⅱ)
 面向对象分析与设计方法
 Peter Coad和Edward Yourdon的OOA和OOD方法(Ⅰ)
 Booch的OOD方法(Ⅰ)
 OMT的分析与设计方法(Ⅰ) 
 UML的基本概念及各种图形,能够熟练地使用UML的各种模型绘制面向对象分析与设计模型(Ⅱ)
 面向对象测试的基本概念(Ⅰ)
4.3 分析模式与设计模式知识
 设计模式的基本概念及其要素(Ⅰ)
 创建型设计模式(Ⅱ)
 结构型设计模式(Ⅱ)
 行为型设计模式(Ⅱ)
4.4 面向对象程序设计知识
 程序设计语言中的面向对象机制
 类与对象、对象自身引用、无实例的类(Ⅱ)
 继承与类层次结构(Ⅱ)
 消息传递与方法(Ⅱ)
 重置与重载(Ⅱ)
 类库的概念(Ⅱ)
4.5 面向对象数据库、分布式对象基础知识(Ⅰ)
5. 信息安全知识 
 信息系统安全
 计算机系统安全、网络安全、信息安全的基础知识(Ⅰ)
 信息系统安全管理
 防治计算机病毒、防范计算机犯罪、存取控制、防闯入、防灾(Ⅰ)
 保障完整性与可用性的措施(Ⅰ)
 加密与解密机制基础知识(Ⅱ)
 风险管理(风险分析、风险类型、抗风险措施和内部控制)(Ⅰ)
 计算机安全相关的法律、法规基础知识(Ⅰ)
6. 标准化、信息化和知识产权基础知识 
6.1 标准化基础知识
 标准化基础知识
 标准化目的、意义、组织机构及内容方面的基本概念(Ⅰ)
 标准化分类、代号与编号规定方面的基本概念(Ⅰ)
 标准制订过程方面的基础知识(Ⅰ)
 标准分类
 国际标准、国家标准、行业标准、企业标准的表示方法(Ⅱ)
 代码标准、文件格式标准、安全标准、软件开发规范和文档标准、互联网相关标准、软件开发规范和文档标准、基于构件的软件标准
 代码标准、文件格式标准、安全标准方面的基本概念(Ⅰ)
 软件开发规范和文档标准、互联网相关标准方面的基本概念、基于构件的软件标准(Ⅱ)
 安全标准、互联网相关标准方面的基本概念(Ⅰ)
6.2 信息化基础知识
 全球信息化趋势、国家信息化战略、企业信息化战略和策略(Ⅰ)
 互联网关的法律、法规知识(Ⅰ)
 个人信息保护规则(I)
 远程教育、电子商务、电子政务等基础知识(Ⅰ)
 企业信息资源管理基础知识(Ⅰ)
6.3 知识产权基础知识
 保护知识产权有关的法律、法规
 软件有关的法律、法规方面的基础知识(Ⅰ)
 著作权法、软件保护条例及软件著作登记的基础知识(Ⅰ)
 软件著作权主体与客体、权利内容、权利归属、侵权责任,分析侵权行为(Ⅱ)
 专利法、商标法、商业秘密权对软件的保护(Ⅰ)
7. 计算机专业英语
 具有工程师所要求的英语阅读水平(Ⅱ)
 理解本领域常用英语术语(Ⅱ)
考试科目2:软件设计
1.外部设计
1.1 理解系统需求说明(ⅡⅡ)
1.2 准备进行系统开发
 选择开发方法、准备开发环境、制订开发计划(I)
1.3 设计系统功能
 选择系统结构(II)
 设计各子系统的功能和接口(II)
 设计安全性策略、需求和实现方法(II)
 制订详细的工作流和数据流(II)
1.4 设计数据模型 
 设计ER模型及其他数据模型
 掌握E-R模型、UML模型的表示方法和使用方法,关系模型的定义、相关知识以及符号化表示方法。(Ⅱ)
 通过从数据库逻辑设计中如何构造一个好的数据库模式出发,掌握关系规范化的实际背景、理论及模式规范化的方法(Ⅱ)
 掌握如何用关系数据库设计理论作指导,进行数据库逻辑设计,重点掌握E-R模型向关系模型转换的方法(Ⅲ)  
1.5 编写外部设计文档
 系统配置图、各子系统关系图(I)
 系统流程图、系统功能说明书(I)
 输入输出规格说明、数据规格说明、用户手册框架(I)
 设计系统测试要求(I)
1.6 外部设计的评审(I)
2.内部设计
2.1 设计软件结构
 按构件分解,确定构件功能、规格以及构件之间的接口(Ⅱ)
 数据结构与算法设计
 数据结构设计:线性表、查找表、树、图的顺序存储结构和链表存储结构的设计和实现(Ⅲ)
 算法设计:迭代、穷举搜索、递推、递归、回溯、贪心、动态规划、分治等算法设计(Ⅲ)  
 采用中间件和工具(I)
2.2 设计输入输出
 屏幕界面设计、输入输出格式设计(II)
 分析数据特性,确认逻辑数据组织方式、存储介质,设计记录格式和处理方式(II)
 将逻辑数据结构换成物理数据结构,计算容量,进行优化和检查信息(II)
2.3 设计物理数据(Ⅱ)
2.4 构件的创建和重用
 创建构件、重用构件(I)
 使用子程序库或类库 
 AWT、Swing用户界面与事件处理机制(I)
 Java语言中流与文件的应用(Ⅲ)
 Java语言中的多线程的开发与应用(Ⅲ)
 Java语言中集合类库的应用(Ⅲ)
 Java语言中网络、数据库的开发与应用(Ⅲ)
 C++标准类库中容器库的应用(Ⅲ)
 C++标准类库中算法库的应用(Ⅲ)
 C++标准类库中的迭代器的应用(Ⅲ)
 C++标准类库中的字符串的应用(Ⅲ)
 C++标准类库中的流与文件的应用(Ⅲ)
 C语言标准函数库(Ⅲ)
2.5 编写内部设计文档
 构件划分图、构件间的接口、构件处理说明(I)
 屏幕界面设计文档、报表设计文档、文件设计文档、数据库设计文档(I) 
2.6 内部设计的评审(I)
3.数据库应用分析与设计 
 设计关系模式
 掌握给定一个实际的应用问题如何设计E-R模型,如何将E-R模型转换成关系模式,确定联系类型、主键、候选键、外键,判断关系模式规范化的程度(Ⅲ)
 数据库语言(SQL)
 掌握给定一个实际的应用问题如何用SQL进行数据定义(创建表、视图)、完整性定义及权限定义(Ⅲ)
 数据库访问
 掌握常用数据库的访问方法(Ⅱ)
4.程序设计 
4.1 模块划分(原则、方法、标准)(Ⅱ)
4.2 编写程序设计文档
 模块规格说明书(功能和接口说明,程序处理逻辑、输入输出数据格式的描述)(II)
 测试要求说明书(测试类型和目标、测试用例、测试方法)(II)
4.3 程序设计评审(Ⅱ) 
5.系统实施 
5.1 配置计算机系统及环境(Ⅱ)
5.2 选择合适的程序设计语言(Ⅱ)
5.3 用C程序设计语言以及C++、Java中的任一种程序设计语言进行程序设计
 用C语言实现常用的数据结构与算法及应用程序(Ⅲ)
 用C++语言实现常见的设计模式及应用程序(Ⅲ)
 用Java语言实现常见的设计模式及应用程序(Ⅲ)
5.4 系统测试
 指导程序员进行模块测试,并进行验收(I)
 准备系统集成测试环境和测试工具(I)
 准备测试数据(I)
 写出测试报告(I)
6. 软件工程应用
6.1 软件开发周期模型(瀑布模型、螺旋模型、喷泉模型)(Ⅱ)
6.2 需求分析
 定义软件需求(系统化的目标、配置、功能、性能和约束,功能需求与非功能需求)(Ⅱ)
 描述软件需求
 使用面向数据流的模型和面向对象模型描述软件的功能需求和非功能需求(Ⅲ)
 描述软件需求的功能层次模型、控制流模型、面向数据结构的模型(I)
 定义软件需求的方法
 使用结构化分析方法定义软件需求,能够根据具体问题,绘制相应的DFD模型,并定义数据字典,采用决策表或决策树的方式描述加工逻辑(Ⅲ)
 使用面向对象分析方法定义软件需求,能够根据具体问题,创建符合UML标准的类图、用例图,并准确识别类中的关键属性和方法,以及类之间的关联(Ⅲ)
 以UML状态图、活动图以及序列图所表达的软件需求(Ⅱ)
6.3软件设计
 软件设计的基本原则
 分析与集成、逐步求精、抽象、信息隐蔽、模块化(I)
 软件设计的方法(结构化设计方法、Jackson方法、Warnier方法、面向对象设计方法)
 结构化设计方法,并能够根据具体问题,在结构化分析的基础上,给出设计结果(Ⅱ)
 面向对象的设计方法,并能够根据具体问题,给出相应的符合UML标准的设计模型(Ⅲ)
 Jackson方法的基本理念及基本步骤(I)
6.4软件测试的原则与方法(Ⅱ)
6.5软件质量(Ⅱ)
6.6软件过程(Ⅱ)
6.7软件开发环境和开发工具(分析工具、设计工具、编程工具、测试工具、维护工具、CASE)(Ⅱ)
6.8面向对象技术
 面向构件技术(I)
 统一建模语言(UML)
 UML的基本概念与作用(Ⅲ)
 用例图的表示与应用(Ⅲ)
 类图与对象图的表示与应用(Ⅲ)
 序列图的表示与应用(Ⅲ)
 活动图的表示与应用(Ⅲ)
 通信图的表示与应用(Ⅲ)
 组件图的表示与应用(Ⅲ)
 部署图的表示与应用(Ⅲ)
 状态图的表示与应用(Ⅲ)
6.9网络环境软件技术(I)
三、题型举例
考试科目1:计算机与软件工程知识(样题)
1. 在计算机中,最适合进行数字加减运算的数字编码是 (1) ,最适合表示浮点数阶码的数字编码是 (2) 。
   (1)A. 原码         B. 反码       C. 补码        D. 移码
 (2)A. 原码         B. 反码       C. 补码        D. 移码

2. 操作数所处的位置,可以决定指令的寻址方式。操作数包含在指令中,寻址方式为 (3) ;操作数在寄存器中,寻址方式为 (4) ;操作数的地址在寄存器中,寻址方式为 (5) 。 
   (3)A. 立即寻址                     B. 直接寻址
        C. 寄存器寻址                   D. 寄存器间接寻址 
   (4)A. 立即寻址                     B. 相对寻址
        C. 寄存器寻址                   D. 寄存器间接寻址 
   (5)A. 相对寻址                     B. 直接寻址
        C. 寄存器寻址                   D. 寄存器间接寻址

3. 某系统的可靠性结构框图如下图所示。该系统由4个部件组成,其中2、3两部件并联冗余,再与1、4部件串联构成。假设部件1、2、3的可靠度分别为0.90、0.70、0.70。若要求该系统的可靠度不低于0.75,则进行系统设计时,分配给部件4的可靠度至少应为  (6) 。
(6)A.        B.   
C.      D.

4. 在开发一个系统时,如果用户对系统的目标不是很清楚,难以定义需求,这时最好使用 (7) 。
(7)A. 原型法       B. 瀑布模型   
C. V-模型       D. 螺旋模型

5. (8) 不需要登记或标注版权标记就能得到保护。
(8)A. 专利权       B. 商标权         C. 著作权     D. 财产权

6. 已经发布实施的现有标准(包括已确认或修改补充的标准),经过实施一定时期后,对其内容再次审查,以确保其有效性、先进性和适用性,其周期一般不超过  (9)  年。
(9)A. 1            B. 3          C. 5          D. 7

7. 在下图所示的树型文件系统中,方框表示目录,圆圈表示文件,“/” 表示路径中的分隔符,“/”在路径之首时表示根目录。图中, (10) 。

(10)A. 子目录W2中文件f2和子目录D2中文件f2是完全相同的
B. 子目录W2中文件f2和子目录D2中文件f2是不相同的
C. 子目录W2中文件f2和子目录D2中文件f2可能相同也可能不相同
D. 树型文件系统中不允许出现相同名字的文件
8. 假设当前目录是D1,进程A以如下两种方式打开文件f1。
方式①   fd1=open(″ (11) /f1″,o_RDONLY);  
方式②   fd1=open(″/D1/W1/f1″,o_RDONLY);  
其中,方式①的工作效率比方式②的工作效率高,因为采用方式①的文件系统 (12) 。
(11)A.  /D1/W1   B. D1/W1  C. W1   D. f1
(12)A. 可以直接访问根目录下的文件f1
B. 可以从当前路径开始查找需要访问的文件f1
C. 只需要访问一次磁盘,就可以读取文件f1,而方式②需要二次
D. 只需要访问一次磁盘,就可以读取文件f1,而方式②需要三次

9. 在活动图中,结点表示项目中各个工作阶段的里程碑,连接各个结点的边表示活动,边上的数字表示活动持续的时间。在下面的活动图中,从A到J的关键路径是 (13) ,关键路径的长度是 (14) ,从E开始的活动启动的最早时间是 (15) 。
 
(13)A. ABEGJ  B. ADFHJ  C. ACFGJ  D. ADFIJ
(14)A. 22   B. 49   C. 19   D. 35
(15)A. 10   B. 12   C. 13   D. 15

10. 一个故障已经被发现,而且也被排除了,为了检查修改是否引起了其它故障,这时应该进行 (16) 。
(16)A. 程序走查 B. 退化测试  C. 软件评审  D. 接收测试

11. 下面关于编程语言的各种说法中, (17) 是正确的。
(17)A. 由于C语言程序是由函数构成的,因此它是一种函数型语言
B. Smalltalk、C++、Java、C#都是面向对象语言
C. 函数型语言适用于编写处理高速计算的程序,常用于超级计算机的模拟计算
D. 逻辑型语言是在Client/Server系统中用于实现负载分散的程序语言

12. 在面向对象的语言中, (18) 。
(18)A. 类的实例化是指对类的实例分配存储空间
B. 每个类都必须创建一个实例
C. 每个类只能创建一个实例
D. 类的实例化是指对类进行初始化

13. 在统一建模语言(UML)中,(19)用于描述系统与外部系统及用户之间的交互。
(19)A. 类图   B. 用例图  C. 对象图  D. 协作图

14.统一过程(UP)是一种用例驱动的迭代式增量开发过程,每次迭代过程中主要的工作流包括捕获需求、分析、设计、实现和测试等。这种软件过程的用例图(Use Case Diagram)是通过 (20) 得到的。
(20)A. 捕获需求 B. 分析   C. 设计  D. 实现

15.  (21) 表示了系统与参与者之间的接口。在每一个用例中,该对象从参与者处收集信息,并将之转换为一种被实体对象和控制对象使用的形式。
(21)A. 边界对象  B. 可视化对象 C. 抽象对象  D. 实体对象

16. 在UML语言中,下图中的a、b、c三种图形符号按照顺序分别表示 (22) 。

a               b                  c
(22)A. 边界对象、实体对象、控制对象 B. 实体对象 、边界对象、控制对象
    C. 控制对象、实体对象、边界对象 D. 边界对象 、控制对象、实体对象

17. 在下面的用例图(UseCase Diagram)中,X1、X2和X3表示 (23) ,已知UC3是抽象用例,那么X1可通过 (24) 用例与系统进行交互。并且,用例 (25) 是UC4的可选部分,用例 (26) 是UC4的必须部分。

(23)A. 人   B. 系统    C. 参与者  D. 外部软件
(24)A. UC4、UC1 B. UC5、UC1  C. UC5、UC2  D. UC1、UC2
(25)A. UC1  B. UC2   C. UC3   D. UC5
(26)A. UC1  B. UC2    C. UC3   D. UC5

18. (27)设计模式定义了对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动刷新。
(27)A. Adapter(适配器)   B. Iterator(迭代器)  
C. Prototype(原型)   D. Observer(观察者)

19. UML中有多种类型的图,其中, (28) 对系统的使用方式进行分类, (29) 显示了类及其相互关系, (30) 显示人或对象的活动,其方式类似于流程图,通信图显示在某种情况下对象之间发送的消息, (31) 与通信图类似,但强调的是顺序而不是连接。
(28)A. 用例图     B. 顺序图   C. 类图   D. 活动图
(29)A. 用例图     B. 顺序图   C. 类图    D. 活动图
(30)A. 用例图     B. 顺序图   C. 类图    D. 活动图
(31)A. 用例图     B. 顺序图   C. 类图    D. 活动图

20.   (32)   analysis emphasizes the drawing of pictorial system models to document and validate both existing and/or proposed systems. Ultimately, the system models become the     (33)   for designing and constructing an improved system.   (34)   is such a technique. The emphasis in this technique is process-centered. Systems analysts draw a series of process models called   (35)  .   (36)   is another such technique that integrates data and process concerns into constructs called objects.
(32)A. Prototyping B. Accelerated  C. Model-driven  D. Iterative
(33)A. image  B. picture   C. layout    D. blueprint
(34)A. Structured analysis     B. Information Engineering
C. Discovery Prototyping   D. Object-Oriented analysis
(35)A. PERT  B. DFD   C. ERD    D. UML
(36)A. Structured analysis     B. Information Engineering
C. Discovery Prototyping   D. Object-Oriented analysis
考试科目2:软件设计(样题)
试题一(15分)
阅读以下说明和数据流图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
学生住宿服务系统帮助学生在就学的城市内找到所需的住房,系统对出租的房屋信息、房主信息、需要租房的学生信息以及学生和房主的会面信息进行管理和维护。
房主信息包括姓名、地址、电话号码以及系统分配的唯一身份标识(ID)和密码;房屋信息包括房屋地址、类型(单间/套间)、适合住宿的人数、房租、房主的ID以及现在是否可以出租(例如由于装修原因,需等到装修后才可出租或者房屋已被租出)。每当房屋信息发生变化时,房主须通知系统,系统将更新房屋文件以便学生能够获得准确的可租用房屋信息。房主向系统中加入可租用的房屋信息时,需交纳一定的费用,由系统自动给出费用信息。房主可随时更新房屋的各种属性。
学生可通过系统查询现有的可租用的房屋,但必须先在系统中注册。学生信息包括姓名、现住址、电话号码、出生日期、性别以及系统分配的唯一身份标识(ID)和密码。若学生希望租用某房屋,则需要发出租房请求,请求中包含房屋的详细信息,系统将安排学生与房主会面的时间和地点,并将会面信息通知学生和房主,会面信息包括会面时间、地点以及会面双方的基本信息,系统将记录会面信息。
学生住宿服务系统的顶层图如图1-1所示;学生住宿服务系统的第0层DFD图如图1-2所示,其中,架构3的细化图如图1-3所示。
【问题1】(6分)
(1) 数据流图1-1缺少了一条数据流(在图1-2中也未给出该数据流),请给出此数据流的起点和终点,并采用说明中的词汇给出此数据流名。
(2) 数据流图1-2中缺少了与“查询房屋”加工相关的数据流,请指出此数据流的起点和终点。
【问题2】(4分)
 “安排会面”加工除需要写入会面文件外,还需要访问哪些文件?
【问题3】(5分)
 请补齐下列数据字典条目:
 登录信息 = 学生ID + 密码
 注册信息 =                  
 
图1-1 学生住宿服务顶层图
 
图1-2 学生住宿服务第0层图DFD图
 图1-3 架构3的细化图
试题二(共15分) 
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某医院的门诊管理系统实现了为患者提供挂号、处方药品收费的功能。具体的需求及设计如下:
(1)医院医师具有编号, 姓名, 科室, 职称, 出诊类型和出诊费用,其中出诊类型分为专家门诊和普通门诊,与医师职称无关;各个医师可以具有不同的出诊费用,与职称和出诊类型无关。
(2)患者首先在门诊挂号处挂号,选择科室和医师,根据选择的医师缴纳挂号费(医师出诊费)。收银员为患者生成挂号单,如表2-1所示,其中,就诊类型为医师的出诊类型。
表2-1  XX医院门诊挂号单
收银员:13011      时间:2007年2月1日08:58
就诊号 姓名 科室 医师 就诊类型 挂号费
20070205015 叶萌 内科 杨玉明 专家门诊 5元
(3)患者在医师处就诊后,凭借挂号单和医师手写处方到门诊药房交费买药。收银员根据就诊号和医师处方中开列的药品信息,查询药品库(如表2-2所示)并生成门诊处方单(如表2-3所示)。
表2-2  药品库
药品编码 药品名称 类型 库存 货架编号 单位 规格 单价
12007 牛蒡子 中药 51590 B1401 G 炒 0.0340
11090 百部 中药 36950 B1523 G 片 0.0313
表2-3  XX医院门诊处方单
            时间:2007年2月1日10:31
就诊号 20070205015 病人姓名 叶萌 医师姓名 杨玉明
金额总计 0.65 项目总计 2 收银员 21081
药品编码 药品名称 数量 单位 单价 金额(元)
12007 牛蒡子 10 G 0.0340 0.34
11090 百部 10 G 0.0313 0.31
(4)由于药品价格会发生变化,因此,门诊管理系统必须记录处方单上药品的单价。
根据需求阶段收集的信息,设计的实体联系图和关系模式(不完整)如下所示:
(1)实体联系图

图2-1 实体联系图
2.关系模式
  挂号单(就诊号, 病患姓名, 医师编号, 时间,  (5) )
  收银员(编号, 姓名, 级别)
  医师(编号, 姓名, 科室, 职称, 出诊类型, 出诊费用)
  门诊处方 ( (6) , 收银员, 时间 )
  处方明细(就诊号,  (7) )
药品库 (药品编码, 药品名称,  (8) )
【问题1】(4 分)
根据问题描述,填写2-1实体联系图中(1) ~ (4)处联系的类型。 
【问题2】(4分)
图2-1中还缺少几个联系?请指出每个联系两端的实体名,格式如下:
实体1:实体2
例如,收银员与门诊处方之间存在联系,表示为:
收银员:门诊处方    或    门诊处方:收银员
【问题3】(7分)
根据实体联系图2-1,填写挂号单、门诊处方、处方明细和药品库关系模式中的空(5)~(8)处,并指出挂号单、门诊处方和处方明细关系模式的主键。
试题三(共15分)
阅读以下说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
S公司开办了在线电子商务网站,主要为各注册的商家提供在线商品销售功能。为更好地吸引用户,S公司计划为注册的商家提供商品(Commodity)促销(Promotion)功能。商品的分类(Category)不同,促销的方式和内容会有所不同。
注册商家可发布促销信息。商家首先要在自己所销售的商品的分类中,选择促销涉及的某一具体分类,然后选出该分类的一个或多个商品(一种商品仅仅属于一种分类),接着制定出一个比较优惠的折扣政策和促销活动的优惠时间,最后由系统生成促销信息并将该促销信息公布在网站上。
商家发布促销信息后,网站的注册用户便可通过网站购买促销商品。用户可选择参与某一个促销(Promotion)活动,并选择具体的促销商品(Commodity),输入购买数量等购买信息。系统生成相应的一份促销订单(POrder)。只要用户在优惠活动的时间范围内,通过网站提供的在线支付系统,确认在线支付该促销订单(即完成支付),就可以优惠的价格完成商品的购买活动,否则该促销订单失效。
系统采用面向对象方法开发,系统中的类以及类之间的关系用UML类图表示,图3-1是该系统类图中的一部分;系统的动态行为采用UML序列图表示,图3-2是发布促销的序列图。

图3-1 在线促销系统部分类图

图3-2 发布促销序列图
【问题1】(6分)
识别关联的多重度是面向对象建模过程中的一个重要步骤。根据说明中给出的描述,完成图3-1中的(1)~(6)。
【问题2】(4分)
请从表3-1中选择方法,完成图3-2中的(7)~(10)。
表3-1 可选消息列表
功能描述 方法名
向促销订单中添加所选的商品 buyCommodities
向促销中添加要促销的商品 addCommodities
查找某个促销的所有促销订单信息列表 getPromotionOrders
生成商品信息 createCommodity
查找某个分类中某商家的所有商品信息列表 getCommodities
生成促销信息 createPromotion
生成促销订单信息 createPOrder
查找某个分类的所有促销信息列表 getCategoryPromotion
查找某商家所销售的所有分类列表 getCategories
查找某个促销所涉及的所有商品信息列表 getPromotionCommodities
【问题3】(5分)
关联(Association)和聚集(Aggregation)是UML中两种非常重要的关系。请说明关联和聚集的关系,并说明其不同点。
试题四(共15分)
阅读以下说明和图,填补流程图中的空缺,将解答填入答题纸的对应栏内。
【说明】
某汽车制造工厂有两条装配线。汽车装配过程如图4-1所示,即汽车底盘进入装配线,零件在多个工位装配,结束时汽车自动完成下线工作。
 
图4-1 汽车装配线
(1) e0和e1表示底盘分别进入装配线0和装配线1所需要的时间。
(2) 每条装配线有n个工位,第一条装配线的工位为S0,0, S0,1, …, S0,n-1, 第二条装配线的工位为S1,0, S1,1, …, S1,n-1。其中S0,k和S1,k(0≤k≤n-1)完成相同的任务,但所需时间可能不同。
(3) ai,j表示在工位Si,j处的装配时间,其中i表示装配线(i=0或i=1),j表示工位号(0≤j≤n-1)。
(4) ti,j表示从Si,j处装配完成后转移到另一条装配线下一个工位的时间。
(5) x0和x1表示装配结束后,汽车分别从装配线0和装配线1下线所需要的时间。
(6) 在同一条装配线上,底盘从一个工位转移到其下一个工位的时间可以忽略不计。
图4-2所示的流程图描述了求最短装配时间的算法,该算法的输入为:
n:  表示装配线上的工位数;
e[i]:  表示e1和e2,i取值为0或1;
a[i][j]:表示ai,j,i的取值为0或1,j的取值范围为0~n-1;
t[i][j]:表示ti,j, i的取值为0或1,j的取值范围为0~n-1;
x[i]: 表示x0和x1,i取值为0或1。
算法的输出为:
fi:最短的装配时间;
li:获得最短装配时间的下线装配线号(0或者1)。
算法中使用的f[i][j]表示从开始点到Si,j处的最短装配时间。
 
图4-2 求最短装配时间算法

C语言样题【从试题五、六、七中任选一题】
试题五(共15分)
阅读以下说明和C代码,将应填入  (n)  处的字句写在答题纸的对应栏内。
【说明】
在一个简化的绘图程序中,支持的图形种类有点(point)和圆(circle),在设计过程中采用面向对象思想,认为所有的点和圆都是一种图形(shape),并定义了类型shape_t、point_t和circle_t分别表示基本图形、点和圆,并且点和圆具有基本图形的所有特征。
【C代码】 
typedef enum { point,circle } shape_type;   /* 程序中的两种图形:点和圆 */
typedef struct {            /* 基本的图形类型 */
 shape_type  type;  /* 图形种类标识:点或者圆 */
 void (*destroy)();  /* 销毁图形操作的函数指针 */
 void (*draw)();   /* 绘制图形操作的函数指针 */
} shape_t;  
typedef struct { shape_t common;  int x;  int y; } point_t;  /* 定义点类型,x、y为点坐标 */
void destroyPoint(point_t* this) { free(this); printf("Point destoryed!\n"); }  /* 销毁点对象 */
void drawPoint(point_t* this) { printf("P(%d,%d)", this->x, this->y); }  /* 绘制点对象 */
shape_t* createPoint(va_list* ap) {  /* 创建点对象,并设置其属性 */
 point_t*  p_point;
 if( (p_point = (point_t*)malloc(sizeof(point_t))) == NULL ) return NULL;
 p_point->common.type = point;    p_point->common.destroy = destroyPoint;
 p_point->common.draw = drawPoint;
 p_point->x = va_arg(*ap, int);       /* 设置点的横坐标 */
 p_point->y = va_arg(*ap, int);       /* 设置点的纵坐标 */
 return (shape_t*)p_point;           /* 返回点对象指针 */

typedef struct { /* 定义圆类型 */
 shape_t  common;  
point_t  *center;  /* 圆心点 */  
int   radius;     /* 圆半径 */
} circle_t;
void destroyCircle(circle_t* this){  
free(  (1) );   free(this);  printf("Circle destoryed!\n"); 
}
void drawCircle(circle_t* this) {
 printf("C("); 
   (2)  .draw( this->center );       /* 绘制圆心 */
 printf(",%d)", this->radius);
}
shape_t* createCircle(va_list* ap) {   /* 创建一个圆,并设置其属性 */
 circle_t*  p_circle; 
 if( (p_circle = (circle_t*)malloc(sizeof(circle_t))) == NULL ) return NULL;
 p_circle->common.type = circle;    p_circle->common.destroy = destroyCircle;
 p_circle->common.draw = drawCircle;
   (3)   = createPoint(ap);       /* 设置圆心 */
 p_circle->radius = va_arg(*ap, int);   /* 设置圆半径 */
 return  p_circle;

shape_t* createShape(shape_type st, ...) {  /* 创建某一种具体的图形 */
 va_list   ap;                     /* 可变参数列表 */
 shape_t*  p_shape = NULL;
   (4)  (ap, st); 
 if( st == point ) p_shape = createPoint( &ap);   /* 创建点对象 */
 if( st == circle ) p_shape = createCircle(&ap);   /* 创建圆对象 */
 va_end(ap); 
 return p_shape;

int main( ) {
 int i;              /* 循环控制变量,用于循环计数 */
 shape_t* shapes[2];  /* 图形指针数组,存储图形的地址 */
 shapes[0] = createShape( point, 2, 3);       /* 横坐标为2,纵坐标为3 */
 shapes[1] = createShape( circle, 20, 40, 10);  /* 圆心坐标(20,40),半径为10 */
 for(i=0; i<2; i++) { shapes[i]->draw(shapes[i]);  printf("\n");  } /* 绘制数组中图形 */
 for( i = 1; i >= 0; i-- )  shapes[i]->destroy(shapes[i]);      /* 销毁数组中图形 */
 return 0;
}
【运行结果】
P(2,3)
  (5)  
Circle destoryed!
Point destoryed!
C++语言样题【从试题五、六、七中任选一题】
试题六(共15分)
阅读下列说明和C++代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
【说明】
某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征如表6-1所示:
表6-1
鸭子种类 发声特征 飞行特征 外观特征
灰鸭(MallardDuck) 发出“嘎嘎”声(Quack) 用翅膀飞行(FlyWithWings) 灰色羽毛
红头鸭(RedHeadDuck) 发出“嘎嘎”声(Quack) 用翅膀飞行(FlyWithWings) 灰色羽毛、头部红色
棉花鸭(CottonDuck) 不发声(QuackNoWay) 不能飞行(FlyNoWay) 白色
橡皮鸭(RubberDuck) 发出橡皮与空气摩擦的声(Squeak) 不能飞行(FlyNoWay) 黑白橡皮颜色
为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(Strategy)设计的类图如图6-1所示:
 
图6-1

其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;类FlyBehavior与QuackBehavior为抽象类,分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。请填补以下代码中的空缺。
【C++代码】
#include<iostream>
using namespace  (1);
class FlyBehavior {
public : (2)  fly() = 0;
};  
class QuackBehavior {
public: (3)  quack() = 0;
};
class FlyWithWings:public FlyBehavior{
public: void fly(){ cout << "使用翅膀飞行 !" << endl; }
};
class FlyNoWay:public FlyBehavior{
public: void fly(){ cout << "不能飞行 !" << endl; }
};
class Quack:public QuackBehavior{
public: void quack(){ cout << "发出\'嘎嘎\'声 !" << endl;  }
};
class Squeak:public QuackBehavior{
public: void quack(){ cout << "发出空气与橡皮摩擦声 !" << endl; }
};
class QuackNoWay:public QuackBehavior{
public: void quack (){ cout << "不能发声 !" << endl; }
};
class Duck {
protected:
 FlyBehavior * (4) ;
 QuackBehavior * (5) ;
public:
 void fly(){   (6) ;  }
 void quack() {   (7) ; };
 virtual void display()=0;
};
class RubberDuck: public Duck {
public:
 RubberDuck(){ 
  flyBehavior = new  (8) ;
  quackBehavior = new  (9) ;
 }
 ~RubberDuck(){
  if(!flyBehavior) delete flyBehavior;
  if(!quackBehavior) delete quackBehavior;
 }
 void display(){ /*此处省略显示橡皮鸭的代码 */ }
};
//其它代码省略
Java语言样题【从试题五、六、七中任选一题】
试题七(共15分)
阅读下列说明和Java代码,将应填入  (n)  处的字句写在答题纸的对应栏内。 
[说明]
某游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征如表7-1所示:
表7-1
鸭子种类 发声特征 飞行特征 外观特征
灰鸭(MallardDuck) 发出“嘎嘎”声(Quack) 用翅膀飞行(FlyWithWings) 灰色羽毛
红头鸭(RedHeadDuck) 发出“嘎嘎”声(Quack) 用翅膀飞行(FlyWithWings) 灰色羽毛、头部红色
棉花鸭(CottonDuck) 不发声(QuackNoWay) 不能飞行(FlyNoWay) 白色
橡皮鸭(RubberDuck) 发出橡皮与空气摩擦的声(Squeak) 不能飞行(FlyNoWay) 黑白橡皮颜色
为支持将来能够模拟更多种类鸭子的特征,采用策略设计模式(Strategy)设计的类图如图7-1所示:
 
图7-1

其中,Duck为抽象类,描述了抽象的鸭子,而类RubberDuck、MallardDuck、CottonDuck和RedHeadDuck分别描述具体的鸭子种类,方法fly()、quack()和display()分别表示不同种类的鸭子都具有飞行特征、发声特征和外观特征;接口FlyBehavior与QuackBehavior分别用于表示抽象的飞行行为与发声行为;类FlyNoWay与FlyWithWings分别描述不能飞行的行为和用翅膀飞行的行为;类Quack、Squeak与QuackNoWay分别描述发出“嘎嘎”声的行为、发出橡皮与空气摩擦声的行为与不发声的行为。请填补以下代码中的空缺。
【Java代码】
(1) FlyBehavior {
 public void fly();
};  
(2) QuackBehavior {
 public void quack();
};
class FlyWithWings implements FlyBehavior{
 public void fly(){ System.out.println("使用翅膀飞行 !"); }
};
class FlyNoWay implements FlyBehavior{
 public void fly(){ System.out.println("不能飞行 !" ); }
};
class Quack implements QuackBehavior{
 public void quack(){ System.out.println("发出\'嘎嘎\'声 !" );  }
};
class Squeak implements QuackBehavior{
 public void quack(){ System.out.println("发出空气与橡皮摩擦声 !"); }
};
class QuackNoWay implements QuackBehavior{
 public void quack (){ System.out.println("不能发声 !" ); }
};
abstract class Duck {
 protected FlyBehavior (3);
 protected QuackBehavior (4);
 public void fly(){  (5);  }
 public void quack() {  (6) ; };
 public  (7)  void display();
};
class RubberDuck extends Duck {
 public RubberDuck(){ 
  flyBehavior = new  (8) ;
  quackBehavior = new  (9) ;
 }
 public void display(){ /* 此处省略显示橡皮鸭的代码 */ }
};
//其它代码省略

[软考2013计算机软件水平考试软件设计师考试大纲相关推荐

  1. 【软考】 2019年上半年软件设计师考试上午真题(专业解析+参考答案)

    [单选题] 计算机执行指令的过程中,需要由( )产生每条指令的操作信号并将信号送往相应的部件进行处理,以完成指定的操作. A.CPU的控制器 B.CPU的运算器 C.DMA控制器 D.Cache控制器 ...

  2. 【软考】 2019年上半年软件设计师考试上午真题

    [单选题] 计算机执行指令的过程中,需要由( )产生每条指令的操作信号并将信号送往相应的部件进行处理,以完成指定的操作. A.CPU的控制器 B.CPU的运算器 C.DMA控制器 D.Cache控制器 ...

  3. 软考-2021年上半年中级软件设计师备考经验分享(已过!)

    这篇文章算是我整个软考的回顾吧,先在此声明,这篇文章不仅适合于准备下半年考试的同学也同样适合于对自己的大学生涯有些迷茫的,不知道现在该做些什么的同学阅读. 对此我会从下面几个方面来讲述我的一些心得体会 ...

  4. [软考知识点总结③] 【中级软件设计师】计算机组成原理——校验码、海明校验码、奇偶校验码、循环校验码

    奇偶校验码(Parity Codes) 奇偶校验码最简单,但只能检测出奇数位出错. 如果发生偶数位错误就无法检测. 但经研究是奇数位发生错误的概率大很多. 而且奇偶校验码无法检测出哪位出错.所以属于无 ...

  5. 【系统架构设计师】软考高级职称,一次通过,倾尽所有,2013年下半年系统架构设计师考试论文真题(论软件可靠性设计技术的应用)

    [系统架构设计师]软考高级职称,一次通过,倾尽所有,看完这篇就够了,学习方法和技巧这里全都有. 2013年下半年系统架构设计师考试论文真题(论软件可靠性设计技术的应用) 论软件可靠性设计技术的应用 随 ...

  6. 软考软件设计师考试经验与体会

    计算机学习要经历一个从理论-实践-理论的熟悉不断深化的过程,我总结了几点软件设计师考试的体会. 软件设计师考试大纲中计算机与软件工程知识 (1)首先基础知识中涉及到计算机硬件的内容和多媒体知识以及语言 ...

  7. 关于软考(全国计算机技术与软件专业技术资格水平考试)经验分享

    关于软考(全国计算机技术与软件专业技术资格水平考试) 一.软考官方网址 http://www.ruankao.org/ 用百度搜索的话,会出现好多广告,十分烦人.这里就直接把官方网址贴上来,方便大家直 ...

  8. 计算机软件专业英语考试题,计算机水平考试-软件设计师分类模拟题计算机专业英语(二)...

    计算机水平考试-软件设计师分类模拟题计算机专业英语(二) (4页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 MIDI enables pe ...

  9. 中级软件设计师考试(软考中级)计算机专业英语

    文章目录 一.计算机专业英语考试题目简介 二.计算机专业英语词汇汇总 一.计算机专业英语考试题目简介 在中级软件设计师考试中(上午),计算机专业英语主要以完形填空的形式,即一篇英文文章,有5道选择题, ...

最新文章

  1. 关于C语言中的一些注意问题的小记之一----+号使用
  2. 别再搞错!OAuth 2.0只是授权协议,OIDC才是认证授权协议
  3. 计算机硬件四大部分组成部分,2014考研计算机大纲 组成原理部分四大变化解析...
  4. 小工匠聊架构-超高并发秒杀系统设计 02_数据的动静分离
  5. 果蔬连连看java源代码_《基于Qt的连连看游戏的设计》-毕业论文.doc
  6. linux认识第一面
  7. Caffe for Python 官方教程(翻译)
  8. Vue.js 关于router传参那点事儿
  9. 10 个用于网络管理员进行高级扫描的端口扫描工具
  10. 科普下Tippy.js - 开源且高度可做空间php的气泡翻译器
  11. 源码:winamp播放器 C++
  12. 快来领取哔哩哔哩412张超清壁纸!
  13. PHP更换网页背景,更换网页的背景图
  14. 网络剧网络电影也有“龙标”了,“上线备案号”时代结束
  15. html微信长按保存图片vue,vue微信ios长按图片导致大面积被选择bug及其修复方案...
  16. Dissect RB-Tree
  17. 网易前端JavaScript编码规范
  18. ios13.3 降级13.2.3绕id
  19. 好用免费的在线PDF转换工具推荐
  20. Hibernate持久化对象生命周期之实战探索

热门文章

  1. 【精选】一文搞懂css三大特性
  2. 《禁闭岛》与脑前额叶,从白痴到天才看人类的认知
  3. 计算机运行原理之电报机与继电器
  4. #完全背包#CH 5202 自然数拆分Lunatic版
  5. 从根儿上理解虚拟内存
  6. zabbix4.0配置钉钉机器人告警详细教程
  7. 开发者必看!Windows Server 2012全攻略
  8. 熔断器 java_SpringCloud之熔断器使用(Hystrix)
  9. 飞而威尔让他突然突然
  10. 规范TS项目Any类型的使用