【软件设计师】下午题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36205380/article/details/84066328

数据流图

考查内容

  • 补充数据流图的缺失部分
  • 补充数据流【考査父图与子图的平衡问题】
  • 补充外部实体
  • 补充数据存储【数据存储一般叫做xx表或xx文件】
  • 数据流图的改错
  • 数据流与错误的加工相连接
  • 数据流方向错误
  • 删除多余数据流
  • 数据流图相关的概念简答题

答题技巧

  • 详细分析试题说明
  • 主要是细心,细心,再细心,业务逻辑不能分析错误
  • 看清楚所有出现的业务名词以及存储的读写,不能有一个遗漏
  • 识别出那些不受系统控制,但又影响系统运行的外部环境,这就是系统数据输入的来源和输出的去处,即外部实体。一般是人(某职位),组织,其他软硬件系统
  • 利用数据平衡原则
  • 父图与子图的平衡。子图对父图中加工和数据流同时进行分解,也属于父图与子图的平衡。
  • 每个加工必须有输入数据流输出数据流。加工的输出数据流仅由它的输入数据流确定,这个规则绝不能违背。数据不守恒的错误有两种,一是漏掉某些输入数据流;二是某些输入数据流在加工环节内部没有被使用。
  • 每个存储必须要有写入读取。存储文件与加工之间数据流的方向应按规定标注,一个不产生任何输出流的文件是没有意义的。

简答题

  • 在绘制数据流图的加工时,可能出现的输入、输出错误:
    • 只有输入而无输出或者黑洞
    • 只有输出而无输入或者奇迹
    • 输入的数据流无法通过加工产生输出流或者灰洞
    • 输入的数据流与输出的数据流名称相同
  • 说明实体之间可否有数据流,并解释其原因
    实体之间不可以有数据流,因为数据流的起点和终点中必须有一个是加工
    -** 如果采用“第三方Email系统”,那么需要进行哪些修改?用150字以内文字加以说明**
    图1-1中:增加外部实体“第三方Email系统”,将所有发送给客户的消息数据流,终点均修改至“第三方Email系统”。
    图1-2中:增加外部实体“第三方Email系统”,增加加工“发送邮件”,将临时预订/预订/变更确认信息终点均修改至“发送邮件”加工,并增加从D2到“发送邮件”加工的数据流“电子邮件地址”,再从发送邮件加工引出数据流(临时预订/预订/变更确认信息)终点为第三方Email系统
  • 简要说明面向数据结构设计方法的基本思想及其适用场合
    面向数据结构的设计方法(如Jackson方法)就是用数据结构作为程序设计的基础,最终目标是得出对程序处理过程的描述,适合在详细设计时使用。即在完成了软件结构设计之后,可以使用面向数据结构的方法来设计每个模块的处理过程,常用于规模不大的数据处理系统。使用面向数据结构的设计方法,当然首先需要分析确定数据结构,并且用适当的工具清晰地描述数据结构。
  • 简要说明程序流程图的适用场合与作用
    程序流程图通常在进行详细设计时使用,用来描述程序的逻辑结构
  • 用 200 字以内文字,说明建模图 1-1 和图 1-2 时如何保持数据流图平衡
    父图中某个加工的输入输出数据流必须与其子图的输入输出数据流在数量上和名字上相同。父图的一个输入(或输出)数据流对应于子图中几个输入(或输出)数据流,而子图中组成的这些数据流的数据项全体正好是父图中的这一个数据流

数据库设计

考查内容

  • ER模型
  • 关系模式
  • 主外键
  • SQL语言

考试套路

  • 补全ER图
  • 补全关系模式指明主外键
  • 添加一个实体,或修改关系模式,或优化

数据库系统术语

1. 弱实体与强实体
一个实体的存在必须以另一实体的存在为前提。前者就称为“弱实体”,后者称为“强实体”。
2.关系模式的主键为全码
关系模式的所有属性组组成该关系模式的候选码,称为全码。即所有属性都是主属性

UML建模

考查内容

  • 用例图
  • 类图与对象图
  • 顺序图
  • 活动图
  • 状态图

考试套路

  • 第一题:读懂题目,搞定逻辑和业务流程,填补类图,填多重度等(类模型看参数及关联推断类名和关系(特殊的:聚合,泛化),切记不能随便填类名)
  • 第二题:填流程图,用例图(突破口:特殊关系:泛化,组合),等
  • 第三题:优化,分析,模式优化,添加功能,模式等(概念题
  • 注意 书写规范,看清题意
  • 候选类的选择 使用了良性原则:
  • 不会在实际中造成危害的依赖关系,都是良性依赖
  • 候选类的删除 使用了接口隔离原则(ISP):
  • 不应该强迫类实现依赖于他们不同的方法(不需要的方法不实现)

用例图

【概念】
描述用户需求,从用户的角度描述系统的功能。展现了一组用例、参与者(actor)以及它们之间的关系。
【描述方式】
椭圆表示用例;人形符号表示参与者(参与者不一定是人,也可能是系统);
【目的】
帮组开发团队以一种可视化的方式理解系统的功能需求
【考点】
填用例名,参与者对应的角色名,两个用例之间的关系。
【答题技巧】
构建用例图时,常用的方式是先识别参与者,然后确定用例以及用例之间的关系。
  • 识别参与者时,考查和系统交互的人员和外部系统。
  • 考查用例及其和参与者之间的关系时,通过判断哪一个特定参与者发起或者触发了与系统的哪些交互,来识别用例并建立和参与者之间的关联。
  • 考查用例之间的关系时,《include>>(包含)定义了用例之间的包含关系,用于一个用例包含另一个用例的行为的建模;如果可以从一个用例的执行中,在需要时转向执行另一个用例,执行完返回之前的用例继续执行,用例间即存在《extend》(扩展)关系。
  • 用例之间的继承关系:其中父类型通常是一个抽象泛化用例,具有子类型共有的属性和行为,每个具体的子类型继承它,并实现适合自己的特定的操作。
【关系】
包含关系<<include>>是用例之间的关系。若用例A包含用例B,则箭头指向被包含的用例B。既要执行用例A,必须先执行用例B。
扩展关系<<extend>>是用例之间的关系。若用例A中需要扩展用例B,则箭头指向基础用例A。既要执行用例A,不一定需要执行用例B。
泛化关系是参与者之间的关系。描述了一个参与者可以完成另一个参与者同样的任务,并可补充额外的角色功能。

类图

【概念】
显示系统的静态结构,表示不同的实体是如何相关联的。展现了一组对象、接口、协作和它们之间的关系。
【描述方式】
三个矩形,从上往下排列,分别是名字,属性,操作
【目的】
表示一个逻辑类或实现类,逻辑类通常是用户的业务所涉及的事物;实现类是程序员处理的实体
【考点】
填类名,方法名,属性名、填多重度、填关系
【多重度】
[1]:表示一个集合中的一个对象对应另一个集合中的1个对象。
[0..*]:表示一个集合中的一个对象对应另一个集合中的0个或多个对象。
[1..*]:表示一个集合中的一个对象对应另一个集合中的1个或多个对象。
[*]:表示一个集合中的一个对象对应另一个集合中的多个对象。
【关系】
依赖关系:虚线箭头,箭头指向被使用者
关联关系
 聚合:实线空心菱形,头部指向整体,部分离开整体可以单独存在
 组合:实线实心菱形,头部指向整体,部分不能脱离整体存在
泛化关系(继承):实线空心三角箭头,箭头指向父类
实现关系:虚线空心箭头,箭头指向接口

对象图

【概念】
展现了一组对象以及它们之间的关系。对象图是类图的实例,几乎使用与类图完全相同的标示。

顺序图

【概念】
顺序图是场景的图形化表示,描述了以时间顺序组织的对象之间的交互活动。

构造顺序图时遵循如下指导原则:

  • 确定顺序图的范围,描述这个用例场景或一个步骤;
  • 绘制参与者和接口类,如果范围包括这些内容的话;
  • 沿左手边列出用例步骤;
  • 对控制器类及必须在顺序中协作的每个实体类,基于它拥有的属性或已经分配给它的行为绘制框;
  • 为持续类和系统类绘制框;
  • 绘制所需消息,并把每条消息指到将实现响应消息的责任的类上;
  • 添加活动条指示每个对象实例的生命期;
  • 为清晰起见,添加所需的返回消息;
  • 如果需要,为循环、可选步骤和替代步骤等添加框架。
【描述方式】
横跨图的顶部,每个框表示每个类的实例或对象;类实例名称和类名称使用冒号分开
【目的】
显示流程中不同对象之间的调用关系,还可以显示不同对象的不同调用。
【考点】
填对象名、填消息

状态图

【概念】
描述对象的所有状态以及事件发生而引起的状态之间的转移
【描述方式】
起始点:实心圆
状态之间的转换:使用开箭头的线段
状态:圆角矩形
判断点:空心圆
一个或多个终止点:内部包含实心圆的圆
【目的】
表示某个类所处的不同状态以及该类在这些状态中的转换过程

活动图

【概念】
描述满足用例要求所要进行的活动以及活动时间的约束关系
【描述方式】
起始点:实心圆
活动:圆角矩形
终止点:内部包含实心圆的圆
泳道:实际执行活动的对象
【目的】
表示两个或多个对象之间在处理某个活动时的过程控制流程

数据结构及算法

分治法

分解、解决、合并
递归技术
二分查找

回溯法

一种选优搜索法,当搜索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择。

贪心法

总是做出在当前来说是最好的选择,而并不从整体上加以考虑,局部最优,整体不一定最优。

动态规划

在求解问题中,对于每一步决策,列出各种可能的局部解,再依据某种判定条件,舍弃那些肯定不能得到最优解的局部解,在每一步都经过筛选,以每一步都是最优解来保证全局是最优解

面向对象程序设计

Java

【interface与implements】
interface    //定义接口的关键字
implements    //类实现接口的关键字
//如果出现了interface,后面必然要有implements。反之,亦然。
//声明接口
interface 接口名 {
    //抽象方法
    public void ClassName();
};
//类实现接口
class 类名 implements 接口名{
    //重写接口方法
    public void ClassName(){
        System.out.println("abc");
    }
};
【类与对象】
//引入包中的类
import//类声明
[类修饰符] class [类名] extends [基类]implements 接口〕    //类修饰符:public、private、abstract(抽象类,不能被new)、final(不能继承此类,成员方法不能被覆盖)
{
//从这里开始为类体部分
// 成员变量〔(类变量:用static修饰的变量)、(实例变量:没有用static修饰的变量)、(最终变量:用final修饰的变量)〕
[修饰符] 数据类型 变量名
// 成员方法〔类方法:用static修饰的方法、实例方法:没有用static修饰的方法〕
// 如果要在类方法中使用实例变量或者实例方法,就需要使用〔对象〕.〔数据〕的方式
//构造方法:构造方法名必须与其类名相同,而且大小写都要一致,构造方法没有返回值,不用void修饰
// 构造函数
[修饰符] 类名([参数行])
{
//构造函数主体(初始化操作)//类体部分结束
}
//类的继承
[修饰符] class 子类名 extends [父类名]{
……… //类体
}

//定义抽象类
abstract class 类名
{
成员变量;
方法();//定义一般成员方法
abstract 方法(); //定义抽象方法
}
//异常处理
try{
//可能出现的异常的程序代码
}catch( ExceptionName1 e ){
//处理例外事件1
}catch( ExceptionName2 e ){
//处理例外事件2
}
......
}finally{
......
}
【接口】
//声明接口
interface 接口名 {
    //抽象方法
    public void 方法名();
};
//类实现接口
class 类名 implements 接口名{
    //重写接口方法
    public void 方法名(){
        System.out.println("abc");
    }
};
//定义抽象类
abstract class AirCraft {
    //成员变量
    protected 接口名 接口名1;
    //实现方法
    public void 方法名(){
        接口名1.方法名();
        };
    };
//继承父类
class Helicopter extends AirCraft{
    public Helicopter (){
        //实例化父类的成员变量
        接口名1 = new 类名;
    }
};
【关键字】
类型 关键字 含义
声明
import 表明要访问指定的类或包
public 共用模式
private 私用模式
protected 保护模式
package
class
interface 接口
enum 枚举
implements 表明一个类实现了给定的接口
void 声明当前成员方法没有返回值
static 表明具有静态属性
abstract 表明类或者成员方法具有抽象属性
final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
extends 表明一个类型是另一个类型的子类型,这里常见的类型有类和接口
strictfp 声明FP_strict(单精度或双精度浮点数)
native 声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
transient 声明不用序列化的成员域
volatile 表明两个或者多个变量必须同步地发生变化
synchronized 表明一段代码需要同步执行
- const 保留关键字,没有具体含义
goto 保留关键字,没有具体含义
new 用来创建新实例对象
return 从成员方法中返回数据
break 提前跳出一个块
continue 回到一个块的开始处
super 表明当前对象的父类型的引用或者父类型的构造方法
this 指向当前实例对象的引用
instanceof 用来测试一个对象是否是指定类型的实例对象
assert 断言,用来进行程序调试
异常处理 catch 用在异常处理中,用来捕捉异常
try 尝试一个可能抛出异常的程序块
throw 抛出一个异常
throws 声明在当前定义的成员方法中所有需要抛出的异常
finally 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
基本数据类型 boolean 布尔类型
int 整数类型
long 长整数类型
short 短整数类型
float 单精度浮点数类型
double 双精度浮点数类型
byte 字节类型
char 字符类型
逻辑结构 if 条件语句的引导词
else 用在条件语句中,表明当条件不成立时的分支
switch 分支语句结构的引导词
case 用在switch语句之中,表示其中的一个分支
default 默认,例如,用在switch语句中,表明一个默认的分支
for 一种循环结构的引导词
while 用在循环结构中
do 用在do-while循环结构中

考试规律

年份 时间 类型 模式 关键字
2018 创建型 生成器 关键字
2017 结构型 桥接 关键字
2017 创建型 生成器 关键字
2016 结构型 装饰 关键字
2016 结构型 适配器 关键字
2015 行为型 策略 关键字
2015 行为型 访问者 关键字
2014 行为型 命令 关键字
2014 行为型 观察者 关键字
2013 结构型 桥接 关键字
2013 创建型 原型 关键字
2012 创建型 抽象工厂 关键字
2012 结构型 装饰 关键字
2011 行为型 状态 关键字
2011 结构型 组合 关键字
2010 结构型 组合 关键字
2010 行为型 策略设计 关键字

猜你喜欢

转载自blog.csdn.net/qq_36205380/article/details/84066328