软考,一些知识还是比较贴近工程开发的,花个一年两年的时间,细细整理这些基础知识,还是挺值得的,复习加深入,挺不错的方式,能够发现自己忽略的一些计算机基础知识。
软考考的是软件设计,与具体的程序语言还有程序设计有很大的区别的。
数据流图:
1、基本符号:DFD,四种缺一不可。
2、设计原则:
1、要自外向内,自顶向下逐步细化。
2、保持父图与子图的平衡。最重要的原则
3、数据守恒。数据流必须要经过加工符号,直接到存储到存储是错误的。实体与实体间,存储与存储间,加工输入与输出的数据流各字不能相同。
4、加工细节隐蔽原则。
5、简化加工间的关系。高内聚,低耦合。基本原则
6、均匀分解
7、名字反映实际的含义
8、忽略枝节
9、表现的 数据流而不是控制流。
数据字典:目的是对数据流程图中的各个元素做出详细的说明。数据字典和数据流图共同构成系统的逻辑模型。
+代表与
=被定义为
「...,...」或「...|...」或
{...}重复x={a},x由0个或多个a组成。
(...)可选的。
面向对象设计:
UML结构:
一、类的基本表示方式
在UML类图中,每一个矩形代表一个类。我们举一个简单的例子:
这是一个代表车辆的类。
一般的类图分为三个部分。部分类图有五个部分。
第一部分为类名,如果类名用正体书写则说明这是可以实例化的普通类。如果类名用斜体书写,则说明这是抽象类。如果类名有下划线修饰则说明这是静态类。
第二部分为类内的属性,格式为修饰符 属性名 :属性类型。修饰符为“+”说明该属性为public型,“#”说明该属性为protected型,“-”说明该属性为private型。
第三部分为类内的方法,格式为修饰符 方法名 (参数名1:参数类型1,……):方法返回值类型。修饰符为“+”说明该方法为public型,“#”说明该方法为protected型,“-”说明该方法为private型。如果方法名有下划线修饰则说明这是静态方法。
如果类图中需要描述类的性质,则放在第四部分描述。如果类内有内部类,则放在第五部分描述。
如果类图描述的是一个接口,在接口名的上方需要加上《interface》的修饰符。同时该类图仅有两个部分,接口名和接口的方法。
对于任何一张类图,只要对照上面的说明就可以解读出含义。
构造块:建模元素,关系,图
公共机制:达到公共目标的UML一些方法
规则:支配构造块放到一起的规则。
用例图:描述外部执行者所描述的系统功能。用于系统需求分析阶段。
类图与对象图:
类与类之间由弱到强关系是: 没关系 > 依赖 > 关联 > 聚合 > 组合。
区分不清的是依赖与关联?
依赖:可以简单的理解,就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、、临时性的、非常弱的。如:可以想像一下,一个C#的程序依赖于.net架构的情形。
关联:他体现的是两个类、或者类与接口之间语义级别的一种强依赖关系,比如我和我的朋友;这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的;表现在代码层面,为被关联类B以类属性的形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量;
如2016年上半年
第40题:UML中关联是一个结构关系,描述了一组链。两个类之间(40)关联。
A. 不能有多个
B. 可以有多个由不同角色标识的
C. 可以有任意多个
D. 的多个关联必须聚合成一个
答:还得补充下这部分知识,基础题
在UML类图中,用实线连接有关联关系的类,并可在关联线上标注角色名或关系名。
在UML中,关联关系包含如下四种形式
双向关联
默认情况下,关联是双向的。例如数据库管理员(DBA)管理数据库(DB),同时每个数据库都被某位管理员管理。因此,DBA和DB之间具有双向关联关系,如下图所示。
从上图可看出,双向关联的类的实例,互相持有对方的实例,并且可在关联线上注明二者的关系,必须同时注明两种关系(如上图中的manage和managed by)。
单向关联
单向关联用带箭头的实线表示,同时一方持有另一方的实例,并且由于是单向关联,如果在关联线上注明关系,则只可注明单向的关系,如下图所示。
自关联
自关联是指属性类型为该类本身。例如在链表中,每个节点持有下一个节点的实例,如下图所示。
多重性关联
多重性(Multiplicity)关联关系,表示两个对象在数量上的对应关系。在UML类图中,对象间的多重性可在关联线上用一个数字或数字范围表示。常见的多重性表示方式如下表所示。上面的数字 其实是代表一个范围;含义为:另一个类与本类的多少个对象会有关联。
表示方式 | 多重性说明 |
---|---|
1..1 | 另一个类的一个对象只与该类的一个对象有关系 |
0..* | 另一个类的一个对象只与该类的零个或多个对象有关系 |
1..* | 另一个类的一个对象与该类的一个或多个对象有关系 |
0..1 | 另一个类的一个对象与该类的对象没关系或者只与该类的一个对象有关系 |
m..n | 另一个类的一个对象与该类最少m,最多n个对象有关系 |
例如一个网页可能没有可点击按钮,也可能有多个按钮,但是该页面中的一个按钮只属于该页面,其关联多重性如下图所示。
聚合关系
聚合(Aggregation)关系表示整体与部分的关系。在聚合关系中,部分对象是整体对象的一部分,但是部分对象可以脱离整体对象独立存在,也即整体对象并不控制部分对象的生命周期。从代码实现上来讲,部分对象不由整体对象创建,一般通过整体类的带参构造方法或者Setter方法或其它业务方法传入到整体对象,并且有整体对象以外的对象持有部分对象的引用。
在UML类图中,聚合关系由带箭头的实线表示,并且实线的起点处以空心菱形表示,如下图所示。
组合关系
组合(Composition)关系也表示类之间整体和部分的关系,但是在组合关系中整体对象控制成员对象的生命周期,一旦整体对象不存在了,成员对象也即随之消亡。
从代码实现上看,一般在整体类的构造方法中直接实例化成员类,并且除整体类对象外,其它类的对象无法获取该对象的引用。
在UML类图中,组合关系的表示方式与聚合关系类似,区别在于实线以实心菱形表示。
泛化关系/继承关系
泛化(Generalization)关系,用于描述父类与子类之间的关系,父类又称作超类或者其类,子类又称为派生类。注意,父类和子类都可为抽象类或者具体类。
在Java中,我们使用面向对象的三大特性之一——继承来实现泛化关系,具体来说会用到extends
关键字。
在UML类图中,泛化关系用带空心三角形(指向父类)的实线表示。并且子类中不需要标明其从父类继承下来的属性和方法,只须注明其新增的属性和方法即可。
实现关系
很多面向对象编程语言(如Java)中都引入了接口的概念。接口与接口之间可以有类与类之间类似的继承和依赖关系。同时接口与类之间还存在一种实现(Realization)关系,在这种关系中,类实现了接口中声明的方法。
在UML类图中,类与接口间的实现关系用带空心三角形的虚线表示。同时类中也需要列出接口中所声明的所有方法(这一点与类间的继承关系表示不同)。
聚合关系与组合关系都表示整体与部分的关系,有何区别?
聚合关系中,部分对象的生命周期独立于整体对象的生命周期,或者整体对象消亡后部分对象仍然可以独立存在,同时在代码中一般通过整体类的带参构造方法或Setter方法将部分类对象传入整体类的对象,UML中表示聚合关系的实线以空心菱形开始。
组合关系中,部分类对象的生命周期由整体对象控制,一旦整体对象消亡,部分类的对象随即消亡。代码中一般在整体类的构造方法内创建部分类的对象,UML中表示组合关系的实线以实心菱形开始。
同时在组合关系中,部分类的对象只属于某一个确定的整体类对象;而在聚合关系中,部分类对象可以属于一个或多个整体类对象。
如同《Java设计模式(六)代理模式 vs. 装饰模式》一文中所述代理模式中,代理类的对象与被代理类的对象即为组合关系。装饰模式中,装饰类的对象与被装饰类的对象即为聚合关系。
聚合关系、组合关系与关联关系有何区别和联系?
聚合关系、组合关系和关联关系实质上是对象间的关系(继承和实现是类与类和类与接口间的关系)。从语意上讲,关联关系中两种对象间一般是平等的,而聚合和组合则代表整体和部分间的关系。而聚合与组合的区别主要体现在实现上和生命周期的管理上。
依赖关系与关联关系的区别是?
依赖关系是较弱的关系,一般表现为在局部变量中使用被依赖类的对象、以被依赖类的对象作为方法参数以及使用被依赖类的静态方法。而关联关系是相对较强的关系,一般表现为一个类包含一个类型为另外一个类的属性。
关于依赖、关联,组合、聚合,泛化,实现,箭头指向的问题??
箭头指向,若存在1:N的关系,可以简单的理解 为箭头总指向1端。
如
类图建模技术(这部分也是一个考点) 2017年下半年43题
UML类图统称不用于()建模
A、系统词汇
B、简单协作
C、逻辑数据库模式
D、对象快照
一、对简单协作建模
类不是单独存在的,而是要与其他类协同工作。协作是动态交互在静态视图上的映射,协作的静态结构通过类图来描述。
二、对逻辑数据库模式建模
通用的逻辑数据库建模工具是“实体-关系(E-R)”图,传统的E-R图只针对数据,而UML的类图还允许对行为建模。在物理数据库中,类图一般要把逻辑操作转化成触发器或存储过程。
三、正向工程和逆向工程
1、正向工程(Forward Engineering)
正向工程是通过实现语言的映射把模型转换为代码的过程。由于UML中描述的模型在语义上比当前的任何面向对象语言要丰富,所以正向工程会导致一定信息的损失,这也是需要模型的原因。
2、逆向工程(Reverse Engineering)
逆向工程是通过从特定实现语言的映射,把代码转换为模型的过程。逆向工程会导致大量的冗余信息同时逆向工程又是不完整的。
答:此题ABC分别对应的就是此类图建模技术,所以只有D属于
扩展:
对象图建模技术
一、对对象结构建模
对系统的设计视图建模时,可以使用一组类图完整地描述抽象的语义以及它们之间的关系。但是使用对象图不能完整地描述系统的对象结构。对于一个个体类,可能存在多个实例,对于相互之间存在关系的一组类,对象间可有的配置可能是相当多的。所以,在使用对象图时,只能在一定意义上显示感兴趣的具体或原型对象集。这就是对对象结构建模,即一个对象图显示了某一时刻相互联系的一组对象。
二、正向工程和逆向工程
1、正向工程
对对象图工程进行正向工程在理论上是可行的,但是在实际上却是受限制的。
2、逆向工程
对对象图进行逆向工程是非常困难的。当对系统进行调试时,总要依靠开发人员或工具来进行。
交互图:顺序图:强调的是对象间的消息发生的时间先后顺序。
协作图:体现交互对象间的工作的协作关系。本质上与顺序图一样。
状态图:描述多个状态行为。不同类间对象的行为;是类图一个补充。
活动图:是状态图变化而来。活动间递推的关系。活动图可以支持并发的进程,只是描述了必要的活动,而流程图描述了顺序过程。
构件图:构件及各种关系。
部署图:也叫实施图。描述计算机上的拓朴结构及软件部件。帮助理解分布式系统。
数据库设计
先设计出各种不同的视图,再根据视图设计逻辑结构,再根据具体的DBMS硬件,OS的不同设计具体的实现。
ER模型转成关系模式
1:1,可以独立设计一个关系,加上各实体的主键,也可以合到任意实体的一端。
1:M,可以独立设计一个关系,只能合到M端
N:M只能独立设计一个关系。
算法设计:是一个长期的过程,绝不是三四个小时就能掌握的。
迭代法:适合于求方程的解,从某个点出发,找到下一个离解更近的点,直到找到可接受的精度范围。
穷举法:所有可能的情景,并找出符合要求的解。规模不大的情况
递推法:抽象为一个递推的过程。
递归法:描述算法有力工具。包括递推和回归。
分治法:分成规模较小的相同子问题。
动态规划:分解成若干个子问题,子问题往往是不同的。适合求最优解问题。
回溯法:分为试探部分(扩大规模)和回溯部分(1、当前规模不是合法解时回溯2、求完一个解,要求下一个解时,也要回溯)。
贪心法:局部最优的选择。找可行的解,不一定是最优解。
分支限界法,类似于回溯法。找出满足条件的一个解,而回溯法是找所有解。
概率算法:数值概率算法,得到一个近似的解
舍伍德算法:消除最坏情况与时间的关联性。解总是正确的。
拉斯维加斯:一旦找到一个解,那这个解一定是正确的。随机性决策不一定找到正确的解。
蒙特卡罗算法:求得解不一定是正确的,时间越多,正确的解的概率越高。
webService:程序之间相互通信的技术,描述一系列操作接口使用xml描述接口。
web是面向用户的,而webService是面向计算机的。
使用流程:
1、web服务提供者提交web服描述 到注册中心,发现服务
2、web服务请求者,到注册中心 查找服务
3、注册中心,返回 web服务描述。
4、与服务提供者统一语义。使用标准的协议
5、服务请求者与提供者进行 交互。
webService协议:
以xml为基础的协议栈。
soap协议:简单访问协议,对象通信协议。=HTTP+XML+RPZ
WSDL:webservice描述语言。一个接口描述标准说明书
UDDI:规定统一的查找,发现功能最强大的。