目录
引入
学完了面向对象的基础知识后,很明显你还是不知该如何下手,凡是都得有个章法
此刻有经验的人可能会想到瀑布模型、螺旋模型、迭代开发、敏捷、rup等一堆软件工程相关的软件开发流程,但对于大部分人来说这些流程仅仅只是项目管理上的流程
本节我们就带大家来了解下,作为一名程序员基于面向对象开发程序的开发流程:
需求模型--》领域模型--》设计模型--》实现模型
需求模型之5w1h8c(了解)
需求vs功能
需求:客户想要的效果,对客户有价值的事情
功能:系统为了实现客户的价值而提供的能力/功能
- 举例:
汽车:驾驶是需求,刹车、加速、转弯是功能
打印机:打印是需求,进纸、设定、与电脑连接等是功能
pos机:买单是需求,商品扫描、金额汇总、收银等是功能
需求的重要性
1/3的项目失败或陷入困境是因为需求原因导致的,老话说得好“garbage in,garbage out”,屎上了生产饼干的流水线,最后产出的是像饼干一样的屎
修复需求错误的问题成本极高
- 编码阶段修复发现一个错误耗费人类是1个单位
- 测试阶段修复需求错误的成本是5-10倍
- 维护阶段(产品上线后),修复需求错误成本是20倍
ps:在需求阶段修复错误,成本只需要0.1-0.2即可
结论:需求错了,几乎要把软件项目重做一遍
需求分析的目的
- 记录员,记录客户的需求
- 分析员,和客户一起分析,完善需求
- 引导员,能够引导客户的需求
需求分析的方法
- 需求分析518方法,简称我要发,具体就是5w1h8c
5w
- when:用户想在什么时间用,例如半夜备份的任务,很明显我们得知该需求需要自动化执行
- where:用户想在什么地方用,例如垃圾桶室内和室外的区别,同样的事物放到不同地方用肯定不一样
- who:用户想让谁来用,不仅是人,也可以是一个系统
- what:用户想要我们程序的输出结果是什么,如图片,文档,系统
- why:问一问用户为什么要这么做,(你不问,他基本不说),包括客户所有觉得不爽的事情
ps:why是核心
1h:how
- 用例方法
8c:8个constraint约束
性能performance
性能是系统提供相应服务的效率。主要包括响应时间、吞吐量
性能是很多系统架构设计的关键约束条件之一
例如,同样一个web网站,虽然都是提供信息给用户流量,设计一个日访问量1w的网站与日访问量10亿的网站,二者的设计截然不同
成本cost
成本指为了实现系统而需要付出的代价
成本也是很多系统架构设计的关键约束之一
例如客户只愿意花100w,而我们却设计了一个耗费1000w的系统
时间time
- 指客户要求什么时候交付
可靠性reliability
- 指系统长时间正确运行的能力,银行、证券、电信这些公司,对宕机时间要求很严格
安全security
- 指对信息安全的保护能力,涉及到钱、身份证、社会保险号等需求对这个要求很高
合规性compliance
- 指满足各种行业标准、法律法规、规范等,例如3c、sox、3gpp,itut
技术性technology
有的客户可能要求我们采用某种技术
例如客户现在都是windows服务器,要求我们基于windows平台开发
兼容性compatibility
- 指我们的产品与客户其他已有的产品或系统的兼容能力,要知道现在很少有产品是孤立运行的,特别是在大企业、大公司中,多个系统都是相互交互、互相配合的。新的系统必须能够和已有的系统配合,否则将无法运行
ps:5w+1h属于功能属性;8c属于质量属性
领域模型(了解)
需求分析阶段不区分面向对象还是面向过程
领域模型是完成从需求分析到面向对象设计的一座桥梁
定义
领域模型是对领域内的概念或现实世界中对象的可视化表示,又称为观念模型,领域对象模型,分析对象模型。
领域模型专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系
领域模型的两个作用
发掘重要的业务领域概念
建立业务领域概念之间的关系
领域建模的三个方法
从用例中找名词(找完后需要删除不是领域对象的名词,具体删除什么,与不同领域有关,没有统一标准,靠经验)
加属性(有些属性并没有在用例中明确给出,靠行业经验自己添加)
连关系(画uml图)
设计模型(了解)
领域类映射(不是全盘拷贝)
- 类筛选:并不是每个领域类都会出现在软件中
- 名称映射:对应
- 属性映射:对应,照搬
- 提炼方法:领域类中并没有方法,在用例中找动词
应用设计原则和设计模式
拆分辅助类(领域类可以在实现阶段拆分为几个类)
实现模型(了解)
- 选取一种支持面向对象的语言实现我们的设计
作业要求
角色:学校、学员、课程、讲师
要求:
- 创建北京、上海 2 所学校
- 创建linux、python、go3个课程 ,linux\py\go在北京开,python\go在上海开
- 课程包含,周期,价格,通过学校创建课程
- 通过学校创建班级,班级关联课程、讲师
- 创建学员时,选择学校,关联班级
- 创建讲师角色时要关联学校,
- 提供两个角色接口
- 学员视图,可以注册,交学费,选择班级,
- 讲师视图,讲师可管理自己的班级,上课时选择班级,查看班级学员列表 ,修改所管理的学员的成绩
- 管理视图,创建讲师,创建班级,创建课程
- 上面的操作产生的数据都通过pickle序列化保存到文件里
思路
选课系统用例
用例名称
选课
场景
who:学生,老师,管理员
where:老男孩
when:任意时间
用例描述(用户怎么做,或者说用户想怎么用):
- 管理员创建学校:北京和上海两个校区
- 管理员创建课程:python,go,linux
- 管理员创建班级:python周末18期,python脱产7期,linux架构35期
- 管理员创建学员:小晴,花野真衣,川岛芳子
- 管理员创建讲师:alex,egon,wupeiqi,yuanhao
- 讲师创建上课记录:python周末班18期day7
- 讲师为day7这节课所有学生批改作业,为每个学生打分
- 学员杨磊查看自己的详细信息:所在学校,报名课程,所在班级
- 学员杨磊在python18期day7提交了作业
- 学员杨磊查看了自己在day7作业的成绩列表,然后自杀了
- 学员小晴跟egon表白了,当天下午就去领了结婚证
用例价值
帮老男孩解决课程管理问题
约束
暂无
找名词
管理员,学校,课程,班级,学员讲师,上课记录,作业,分数,学员详细信息,成绩列表,结婚证
筛选:去掉与行业或者说领域无关的名词
管理员,学校,课程,班级,学员,讲师,上课记录,作业,分数,学员详细信息,成绩列表
加属性
名字 | 属性 | 备注 |
---|---|---|
管理员 | 无 | 具备所有权限,对于选课系统来说,并不需要管理员的属性,因此在领域模型中,管理员是没有属性的 |
学校 | 学校名,地址,课程列表,班级列表 | |
课程 | 课程名,周期,价钱,大纲 | |
班级 | 班级名,所属学校,课程 | |
学员 | 学员名 | |
讲师 | 讲师名 | |
上课记录 | 班级,课程节次,日期 |
连关系
您可能感兴趣的文章:
如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!
网友评论