本文内容均整理自西安交通大学软件学院饶元老师的ppt中,仅供学习使用,请勿转载或他用
十个选择:基本概念(20分)
综合题(80分):给一个场景,需要把一个案例从头到尾设计出来就ok了
假设有一个信息管理系统,不管什么端,
下面是从ppt上整理的一些基础知识,虽然我整理的时候记得挺多的,把觉得重点知识都整理出来了,但是考试证明整理的都没有用,主要还是去真正的设计一个系统,所以对于下面的概念可以选择性阅读,不要求背过,但是一定要理解,后面与UML相关的东西一定需要牢牢掌握,尤其是上面写到的那些UML图,必须必须必须得会!!!是在不会的话可以去图书馆借一些UML的书,然后对照着里面的例子去设计
我最后的总评成绩由于平时作业的加分获得了大学中的第一个满分,对于这门科目的考试我的感觉就是考试时间非常的紧,看上面的考试重点就知道我们需要从头去设计一个系统,包括功能模型,动态模型,静态模型,而设计一个系统肯定不是一天两天就能设计好的,因此需要在考试两个半小时设计一个系统的难度可想而知了,这就要求如果想获得一个比较好的成绩就必须要能够熟练的设计一个系统,包括数据库,数据库的优化,用例图,活动图,时序图,类图以及类图的优化,这些东西必须必须必须掌握!!!不然考完试就等着郁闷吧
这门课程相对来说背诵的知识还是比较少的,大部分都是需要自己动手实践的,这从平时作业也可以看的出来,饶老师非常鼓励我们自己去动手完成一些东西,也非常强调coding的重要性,所以哪怕下面的东西都不会,也需要把上面的那些东西掌握了!!!
系统是相互联系,相互作用的诸元素的综合体
软件系统:指在一定的软件开发与应用环境下,为了达到某一目的而相互联系、相互作用的若干个软件要素所组成的有机整体
软件系统的要素
1+1大于2
群体的需求是一种涌现现象,即整体大于部分之和,这种高层次具有的属性、特征、行为和功能还原到低层级就不复存在
模型驱动->灵活且可扩展
结构化分析又称为数据流法,其基本策略是跟踪数据流,即研究问题域中的数据如何流动,以及在各个环节上进行何种你那个处理,从而发现数据流和加工。得到的分析模型是数据流图(DFD),主要的模型元素是数据流,加工,外部实体及存储,外加处理说明和数据字典
结构化设与功能分解法基本相同,基于模块的概念建立设计模型,分为概要设计和详细设计
信息建模法(information modeling)
信息建模法已经很接近面向对象方法,因此有的文献也把它称为一种面向对象方法,但是有以下差别:
运用对象、类、继承、封装、聚合、关联、消息、多态等概念来构造系统
软件分析本质:识别并解决问题
软件需求特征属性
需求又分为业务需求,用户需求,功能需求以及系统需求,此外还包括一些非功能需求
需求的开发是一个不断反复的过程,主要是企业向开发商提交初步的需求,开发商针对已提出的需求编写需求规约并交付企业,企业经过评审后提出意见,开发商对于需求规约进行一次次的修改,往复提交,直到双方达成一致
需求跟踪是指跟踪一个需求使用期限的全过程,需求跟踪包括编制每个需求同系统元素之间的联系文档,这些元素包括其他类型的需求,体系结构,其他设计部件,源代码模块,测试,帮助文件等。需求跟踪为我们提供了由需求到产品实现整个过程范围的明确查阅的能力。在跟踪的过程中最重要的一个属性便是需求的状态,这个用来标识需求当前情况的一个属性,可以帮助我们更好了解需求变更的过程以及当前情况
对现有的文档,表单和数据库进行抽样
研究和现场访问
对工作环境的观察
调查问卷
采访
原型设计(ProtoTyping)
原型设计是交互设计师与PD、PM、网站开发工程师沟通的最好工具。而该块的设计在原则上必须是交互设计师的产物,交互设计以用户为中心的理念会贯穿整个产品。利用交互设计师专业的眼光与经验直接导致该产品的可用性。
应该是按照已经有了的模板进行设计?
联合需求规划(Joint requirements planning,JRP)
需求获取的重要工具----上下文图(DFD)
角色->需求->功能->系统边界
需求分析是指在需求开发过程中,对所获取的需求信息进行分析,及时排出错误和弥补不足,确保需求文档正确地反映用户的真实意图
撰写《产品需求规格说明书》
需求分析方法有两类
业务流程图、泳道图:反映业务信息处理的具体过程
数据流图
WBS
E-R图,数据模型包括三种互相关联的信息:数据对象,描述对象的属性,描述对象间相互连接的关系。在需求分析阶段进行数据库逻辑设计过程中,使用E-R图,可以定义一个实体模型
用例驱动的分析
用户动作与系统响应反映了Use-Case的实现策略的核心机制
候选流程反映了系统的健壮性,是区分系统设计好坏的一个前提,需要体现在活动图中
需求的好坏直接决定了设计的好坏
建立“需求–设计–编程–测试”之间的一致性,确保所有的工作成果符合用户需求
需求跟踪有三种方式:
好设计的十项原则
可行性研究是指系统建设项目确立之前对系统建设的必要性和可能性以及可能的候选方案从整个系统周期的角度进行分析和评价,为企业信息化决策提供科学的依据,并据此由系统开发人员形成书面的可行性研究报告
是根据确定的问题,通过分析新系统需要的信息技术、可能发生的投资和费用、产生的效益,确定将开发的软件系统成功的可能性
降低风险,用最小的代价在最小的时间内确定问题是否能够解决
明确的要求、目标、假定、限制
数据:是客观事物的符号表示。在计算机科学中指的是所有能输入到计算机中被计算机程序处理的符号的总称
数据元素:是数据的基本单位,在程序中通常作为一个整体来进行考虑和处理
一个数据元素可以由若干个数据项组成。
数据对象:是性质相同的数据元素的集合,是数据的一个子集
数据结构:是指相互之间具有一定联系的数据元素的集合。
数据类型:指的是一个值的集合和定义在该值集上的一组操作的总称
抽象数据类型(ADT):是指一个数学模型以及定义在该模型上的一组操作
在软件系统中需要处理的数据是系那是世界中存在的事物及其联系的反映
人们通常将于数据处理有关的领域分为三个世界
现实世界是存在于人们头脑之外的客观世界,现实世界中的事务可分成对象和性质两大类
信息世界也叫做观念世界,是现实世界在人们头脑中的反映
数据世界则是信息世界中信息的数据化,显示世界中的事务及其联系在数据世界中用数据模型描述
数据库设计分成6个阶段
需求分析和概念设计独立于任何数据库管理系统
定义:数据库中的所有字段都是单一属性,不可再分的,这一个单一属性是由基本的数据类型所构成的
关系中所有的属性都是单纯域,即不出现“表中套表”
定义:数据库的表中不存在非关键字段对任一候选关键字段的部分函数依赖
部分函数依赖是指存在着组合关键字段中的某一个关键字段决定其他非关键字段的情况
定义:实体的非主属性的值不依赖于任何其他非主键属性
注:所有非主属性对任何候选管关键字都不存在传递依赖
简单高效,无冗余或少冗余,灵活且可扩展
primary约束与unique约束
它是系统提供的最外层安全保护措施。其方法是由系统提供一定的方式让用户标识自己的名字或身份。每次用户要求进入系统时,由系统进行核对,通过鉴定后才提供机器使用。为了进一步核实用户,系统常常要求用户输入口令(Password)。
数据加密是防止DB中数据在存储和传输中失密的有效手段。
加密方法主要有两种:
但是将这两种方法结合起来就能提供足够好的安全程度。
进行存取权限控制时可以为不同的用户定义不同的视图(View),把数据对象限制在一定的范围内,即通过视图机制把要保密的数据对无权存取的用户隐藏起来,从而自动地对数据提供一定程度的安全保护。一般设计阶段中有用户视图设计。
审计功能把用户对DB的所有操作自动记录下来放入审计日志(Audit Log)中。DBA可以利用审计跟踪的信息,重现导致DB现有状况的一系列事件,找出非法存取数据的人、时间和内容等
活动者(角色,Actor):系统外部的参与者,可以是人、外部硬件、其他系统,甚至时间
类图以反映类的结构(属性、操作)以及类之间的关系为主要目的,描述了软件系统的结构,是一种静态建模方法
从上到下分为三部分,分别是类名、属性和操作。类名是必须有的
类之间主要存在的关系:依赖、关联、聚合、组合、实现和泛化。
描述系统的动态行为。包含活动状态(ActionState),活动状态是指业务用例的一个执行步骤或一个操作,不是普通对象的状态。
顺序图用来表示用例中的行为顺序。当执行一个用例行为时,顺序图中的每条消息对应了一个类操作或状态机中引起转换的事件。
顺序图展示对象之间的交互,这些交互是指在场景或用例的事件流中发生的。顺序图属于动态建模。
设计的总体目标
一个类,最好只做一件事,只有一个引起它变化的原因
单一职责,强调的是职责的分离,在某种程度上对职责的理解,构成了不同类之间耦合关系的设计关键,因此单一职责原则或多或少成为设计过程中一个必须考虑的基础性原则
如果一个类中包含多个职责不同的方法,则把这个类拆分成多个类,保证每个类中只包含有一个职责的方法
设计时采用多个与特定客户类有关的接口比采用一个通用的接口好
一个类对另外一个类的依赖应建立在最小的接口上
将一个复杂的接口拆分成很多小接口
某种意义上,依赖倒转原则是达到“开–闭原则”的途径
依赖关系应尽可能依赖接口(或抽象类),而不是某个具体的类
子类可以扩展父类的功能,但不能改变父类原有的功能
在软件中将一个基类替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象
里氏替换原则是继承复用的基石:只有当衍生类可以替换掉基类,软件单元的功能不受影响时,基类才能真正被复用
子类中对于一个方法的访问优先级应该不小于父类中的访问优先级
迪米特法则也称为最少知识原则,一个对象应对其他对象有最少的了解
由右侧改进为左侧
要尽量使用合成/聚合,尽量不要使用继承。
合成/聚合复用原则就是在一个新的对象里面使用一些已有的老对象,使之成为新对象的一部分;新的对象通过向这些老对象的委派,达到复用已有功能的目的。
main(){
联想 联想1 = new 联想()
惠普 惠普2 = new 惠普()
if(lian) lian.print()
else if (hui) hui.print
}
interface dayinji{
print()
}
class lianxiang implements dayinji{
print(){
lainxinagprint
}
}
class huipu implements dayinji{
print(){
lainxinagprint
}
}
main(){
联想 联想1 = new 联想();
惠普 惠普2 = new 惠普();
print(Lianxiang);
}
print(dayiji dd){
dd.print();
}
parent aa = new children();
aa.eat()
class parent{
eat(){
sout(parent)
return a+b;
}
}
class children extends parent{
eat(){
sout(children);
return a-b;
}
}