软件危机:软件开发和维护中遇到的一系列严重问题。
软件危机的典型表现:
软件危机产生的原因:
与软件本身特点有关
软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。
软件三要素:程序加数据,文档
软件工程三要素:方法,工具,过程,
模型示意图要会画
传统瀑布模型:需求分析->规格说明->设计->编码->测试->维护
特点
a.阶段间具有顺序性和依赖性
b.推迟实现:编码在步骤的后面
c.质量保证:每个阶段都要完成文档,每个阶段结束前都要对文档进行评审
实际瀑布模型:在后面阶段发现前面阶段的错误时,需要返回前面的阶段
优点:简单,容易使用,强迫开发人员采用规范的方法,提交的文档,验证
缺点:开发周期长
适用场合:需求明确,大家都做过很多遍,用户参与不多,比如编译器,系统。
为了解决过晚用户看到原型
在计算机快速建立一个可以运行的程序
阶段:快速原型-规格说明-设计-编码-综合测试-维护
与瀑布模型不同的是,最先做一个原型
优点:简单易用,少返工
工具:HTML,python,鲁比
适用场合:没做过这个项目,需求不明确,用户参与多
为了缩短瀑布模型开发周期,出现了渐增模型,分成了很多模块
每次只开发软件的一部分
过程:需求分析->规格说明->概要设计->对构件设计,编码,集成,测试
优点:避免一次性投入过大
适用:前期对用户把握不准,市场风险较大,期限要求比较严格,先开发一两个构件,发布一些简单的功能试水,例如:微信
为了体改软件的质量
在快速原型的基础上每步骤都加了风险分析
为了解决瀑布模型交付时间过长的问题
与增量模型不同,它是每次都开发完整,但质量不高,通过迭代逐步完善。
是一个典型的循环迭代的过程。
迭代
RUP是由Ration公司推出的一种完整的软件过程
RUP总结了6条最有效的开发经验:
迭代式开发,管理需求,使用基于构件的体系结构,可视化建模,验证软件质量,控制软件变更
RUP开发周期:
RUP软件开发生命周期:
迭代四项:
初始,精化,构建,移交
对传统软件过程反思,不应该过多的关注文档,应该回归软件本身
敏捷宣言:
1.个体和交互胜过过程和工具:个体是关注程序员的能力的提高,交互是合作
2.可以工作的软件胜过面面俱到的文档:没有人是通过看文档学会玩手机的,软件比文档更重要
3.客户合作胜过合同谈判:传统开发中不允许客户更改需求(需求冻结),但现在用户需求总在变化,要适用于时代的变化
4.响应变化胜过遵循计划
就比较瀑布,快速原型法
系统流程图是概括描述物理系统的传统工具,描述数据在系统间流动的过程。
符号:
例子
系统很大,有很多系统流程图,可以分层分模块地来描述。用高层次的系统流程图描绘总体概貌(总图),表明关键功能,然后把每个关键功能再扩展详细(子图)。
基本符号
笑死我了,先存图。
需求分析基本任务是准确的回答“系统要做什么”,不是怎么做。
准则
需求分析最后得到的是数据流图。
数据字典:名称 编号 类型
数据结构:用图表示数据字典
导出详细的逻辑模型,通常用数据流图、实体-联系图、状态转换图、数据字典和主要的处理算法描述这个逻辑模型
站在计算机的角度,输入数据,如何进行数据传递
功能建模的思想就是用抽象模型的概念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,直到找到满足功能要求的所有可实现的软件为止。功能模型用数据流图来描述。
顶层数据流图,包括与哪些外部实体打交道,输入什么信息,输出什么信息。
举例
招生系统
- 学校首先公布招生条件,考生根据自己的条件报名,之后系统进行资格审查,并给出资格审查信息;
- 对于资格审查合格的考生可以参加答卷,系统根据学校提供的试题及答案进行自动判卷,并给出分数及答题信息,供考生查询;
- 最后系统根据学校的录取分数线进行录取,并将录取信息发送给考生。
银行储蓄系统的业务流程:
- 储户填写的存款单或取款单由业务员键入系统;
- 如果是存款则系统记录存款人姓名、住址(或电话号码)、身份证号码、存款类型、存款日期、到期日期、利率、密码(可选)等信息,并印出存单给储户;
- 如果是取款而且开户时留有密码,则系统首先核对储户密码,若密码正确或存款时未留密码,则系统计算利息并印出利息清单给储户。
(1)外部实体,输入,输出数据流
外部实体:储户、业务员
输入:如果需要储户输入密码,储户才直接与系统进行交互。储户填写的存款或取款信息通过业务员键入系统,可以将存款及取款信息抽象为事务。
输出:存单,利息清单
(2)环境图
(3)一层环境图
一层中的处理存款、处理取款,再细化
使用实体-关系模型(ER图)进行数据建模。
这种技术是在较高的抽象层次(概念层)上对数据库结构进行建模的流行技术。
ER图中仅包含3种相互关联的元素:数据对象(实体)、描述数据对象的属性、数据对象彼此间相互连接的关系。
数据对象:用矩形表示,可以是外部实体、事物、角色、行为或事件、组织单位、地点或结构
属性:对象的特质
关系:
关联数量的表示
关系也可以有属性,用菱形表示
举例
银行储蓄系统的ER图
状态转换图(状态图):系统的状态及引起系统状态转换
初态:
终态:
中间态:
箭头线:状态转换,线上写事件,如果没写就是内源性自发的。
状态转换:事件:
举例:
4,5,6是重点
可以从数据流图入手
模块是用一个名字就能调用的程序。
模块化: 每个系统都是由模块组成的。每个模块完成不同的功能,组合起来就是一个项目。
用例图:9.4.3
跟接口打交道
1.物理系统
概要做完了
时序图上面的类一定要是设计好的类,不是自己想象的
例子:
https://www.cnblogs.com/123456xu/p/5478986.html
1.研究问题域
2.考虑系统边界
3.舍弃无用的类
4.简化
模拟现实系统的方法。
oo=objects+class+inheritance+message
面向对象方法学=对象+类+继承+消息
优点:
对象是对属性值和操作值的封装
特点:
2. 以数据为中心
3. 对象是主动的
4. 实现了数据封装
5. 本质具有并行性:不同对象独立处理自身的数据,对象间通过发消息完成通信
6. 模块独立性好:对象之间的耦合比较松,对其他对象依赖较少
类:
实例:某个特定的类所描述的一个具体的对象
类不能实例化,只有对象才能实例化
对象可以泛指也可以具体而实例只有一个具体
消息:(就是对外公开的成员函数)
一定有消息的调用者和实现者
方法:对象所能执行的操作,也就是类中所定义的服务
属性:类中定义的数据
封装:把数据和实现操作的代码集中起来放在对象内部
条件:
继承:(软件复用的方法)子类自动的共享基类中定义的数据和方法机制(ps:就是标准化偷懒hh)
多态
问:什么是多态?
答:不同对象接受同一个消息,但表现出来的行为不一样。
好处:减少信息冗余,显著提高了软件的可重用性和可扩充性
重载
不同的方法使用相同的函数名,但是方法的参数列表不同
分析
设计
实现
对象模型动态模型功能模型
描述实体的对象,客观世界和实体的关系
对象模型为动态模型和功能模型提供了实质性框架
UML作为面向对象技术的标准建模语言
使用类图建立对象模型
类图描述类与类之间的静态关系,是静态模型
1.定义类
命名准则:使用有确切含义的名词,或者名词短语
2.定义属性
语法:可见性 属性名:类型名 = 初值{性质串}
+number:int = “未定”
可见性:public+ private - protected# 没有默认的可见性
初值:如果要加初值,得static
性质串:就是只读,读写等等,抽象
3.定义服务
语法:可见性 操作名(参数表):返回值类型{性质串}
参数表是用逗号分隔,一个参数这样写:
参数名:类型名=默认值
考试:给你类图,写代码,给代码写类图
类A使用了类B
点画箭头线
使用场景
在ChecksumValidator类中的try—catch语句里使用了InvalidChecksumException类
1.意思:类A具有一个类B,一般作为成员变量(注意不是在成员函数中使用了这个类)
2.形态:黑实线箭头,线上的是约束
3.代码例子:
翻译:
1.directee被指导,Dos是学生指导者的缩写,学生被导员指导
2.
(1)普通关联
在语义上有语义上的关系,用黑色实线表示
用箭头表示方向
*多
1…*一个到多个
在表示关联
(2)关联的角色
递归关联:自己对自己的引用
一个人与另一个人结婚,一个人必将成为妻子或丈夫,另一个人是丈夫或妻子
限定关联:一对多或多对多,
一个目录里有多个文件,一个文件只能存在于多个目录中,如果是泛化的文件,可以存在多个文件种中
关联类:引入一个关联类把多对多变成一对多
队列这个类,就是关联类。
类A包含一个类B,一个类的成员变量
关联的特例
(1)共享聚集(聚合)
如果处于部分方的对象可同时参与多个处于整体方对象的构成,称为共享聚合。
空心菱形
一个课题组包含很多人,但每个人可以是另一个课题组的成员,则课题组和成员之间是共享聚合关系。
这个课程至少有6个模块,这个模块至少有一个课程
(2)组合聚集(组合)
部分类完全隶属于整体类,整体不存在了部分也失去价值。
例子
1.这个画板上有9个正方形,9个正方形组合在这个板上。
也就是继承,比如“一般–特殊”,汽车–卡车,马–白马
语法:空心三角形指向父类
举例
(1)普通泛化
与抽象类相反的是具体类
参与者(用例使用者)和用例(一个需求,概括了功能)通过关联连接。
项目组要针对某种型号的设备开发一套调试系统。用户的基本需求是:设备调试员使用调试系统,可以实时查看设备状态和发送调试命令。设备状态信息由专用的数据采集器实时采集。
购买物品,首先要登录;追踪包裹,首先要登录
系统有一个参与者:读者;包含三个用例:续借、借书、检查预定,读者可以使用续借和借书功能,在此之前要检查预定。
特殊情况下才会发生
购买商品,意外的形况下,需要进入日志
有一个参与者:读者;有两个用例:借书和拒绝借阅,读者可以使用借书功能,有特殊情况会拒绝借阅。