当前位置: 移动技术网 > IT编程>软件设计>面向对象 > 面向对象实战

面向对象实战

2019年06月09日  | 移动技术网IT编程  | 我要评论
[TOC] 引入 学完了面向对象的基础知识后,很明显你还是不知该如何下手,凡是都得有个章法 此刻有经验的人可能会想到瀑布模型、螺旋模型、迭代开发、敏捷、RUP等一堆软件工程相关的软件开发流程,但对于大部分人来说这些流程仅仅只是项目管理上的流程 本节我们就带大家来了解下,作为一名程序员基于面向对象开发 ...

引入

学完了面向对象的基础知识后,很明显你还是不知该如何下手,凡是都得有个章法

此刻有经验的人可能会想到瀑布模型、螺旋模型、迭代开发、敏捷、rup等一堆软件工程相关的软件开发流程,但对于大部分人来说这些流程仅仅只是项目管理上的流程

本节我们就带大家来了解下,作为一名程序员基于面向对象开发程序的开发流程:

需求模型--》领域模型--》设计模型--》实现模型

需求模型之5w1h8c(了解)

99-面向对象实战-需求分析.jpg

需求vs功能

需求:客户想要的效果,对客户有价值的事情

功能:系统为了实现客户的价值而提供的能力/功能

  • 举例:
    • 汽车:驾驶是需求,刹车、加速、转弯是功能

    • 打印机:打印是需求,进纸、设定、与电脑连接等是功能

    • pos机:买单是需求,商品扫描、金额汇总、收银等是功能

需求的重要性

1/3的项目失败或陷入困境是因为需求原因导致的,老话说得好“garbage in,garbage out”,屎上了生产饼干的流水线,最后产出的是像饼干一样的屎

  • 修复需求错误的问题成本极高

    1. 编码阶段修复发现一个错误耗费人类是1个单位
    2. 测试阶段修复需求错误的成本是5-10倍
    3. 维护阶段(产品上线后),修复需求错误成本是20倍

ps:在需求阶段修复错误,成本只需要0.1-0.2即可

结论:需求错了,几乎要把软件项目重做一遍

需求分析的目的

  1. 记录员,记录客户的需求
  2. 分析员,和客户一起分析,完善需求
  3. 引导员,能够引导客户的需求

需求分析的方法

  • 需求分析518方法,简称我要发,具体就是5w1h8c

5w

  • when:用户想在什么时间用,例如半夜备份的任务,很明显我们得知该需求需要自动化执行
  • where:用户想在什么地方用,例如垃圾桶室内和室外的区别,同样的事物放到不同地方用肯定不一样
  • who:用户想让谁来用,不仅是人,也可以是一个系统
  • what:用户想要我们程序的输出结果是什么,如图片,文档,系统
  • why:问一问用户为什么要这么做,(你不问,他基本不说),包括客户所有觉得不爽的事情

ps:why是核心

99-面向对象实战-5w.png

1h:how

  • 用例方法

8c:8个constraint约束

  1. 性能performance

    • 性能是系统提供相应服务的效率。主要包括响应时间、吞吐量

    • 性能是很多系统架构设计的关键约束条件之一

    • 例如,同样一个web网站,虽然都是提供信息给用户流量,设计一个日访问量1w的网站与日访问量10亿的网站,二者的设计截然不同

  2. 成本cost

    • 成本指为了实现系统而需要付出的代价

    • 成本也是很多系统架构设计的关键约束之一

    • 例如客户只愿意花100w,而我们却设计了一个耗费1000w的系统

  3. 时间time

    • 指客户要求什么时候交付
  4. 可靠性reliability

    • 指系统长时间正确运行的能力,银行、证券、电信这些公司,对宕机时间要求很严格
  5. 安全security

    • 指对信息安全的保护能力,涉及到钱、身份证、社会保险号等需求对这个要求很高
  6. 合规性compliance

    • 指满足各种行业标准、法律法规、规范等,例如3c、sox、3gpp,itut
  7. 技术性technology

    • 有的客户可能要求我们采用某种技术

    • 例如客户现在都是windows服务器,要求我们基于windows平台开发

  8. 兼容性compatibility

    • 指我们的产品与客户其他已有的产品或系统的兼容能力,要知道现在很少有产品是孤立运行的,特别是在大企业、大公司中,多个系统都是相互交互、互相配合的。新的系统必须能够和已有的系统配合,否则将无法运行

ps:5w+1h属于功能属性;8c属于质量属性

领域模型(了解)

99-面向对象实战-领域.jpg

  • 需求分析阶段不区分面向对象还是面向过程

  • 领域模型是完成从需求分析到面向对象设计的一座桥梁

定义

  • 领域模型是对领域内的概念或现实世界中对象的可视化表示,又称为观念模型,领域对象模型,分析对象模型。

  • 领域模型专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系

领域模型的两个作用

  1. 发掘重要的业务领域概念

  2. 建立业务领域概念之间的关系

领域建模的三个方法

  1. 从用例中找名词(找完后需要删除不是领域对象的名词,具体删除什么,与不同领域有关,没有统一标准,靠经验)

  2. 加属性(有些属性并没有在用例中明确给出,靠行业经验自己添加)

  3. 连关系(画uml图)

设计模型(了解)

  1. 领域类映射(不是全盘拷贝)

    • 类筛选:并不是每个领域类都会出现在软件中
    • 名称映射:对应
    • 属性映射:对应,照搬
    • 提炼方法:领域类中并没有方法,在用例中找动词
  2. 应用设计原则和设计模式

  3. 拆分辅助类(领域类可以在实现阶段拆分为几个类)

实现模型(了解)

  • 选取一种支持面向对象的语言实现我们的设计

作业要求

99-面向对象实战-作业.jpg

角色:学校、学员、课程、讲师

要求:

  1. 创建北京、上海 2 所学校
  2. 创建linux、python、go3个课程 ,linux\py\go在北京开,python\go在上海开
  3. 课程包含,周期,价格,通过学校创建课程
  4. 通过学校创建班级,班级关联课程、讲师
  5. 创建学员时,选择学校,关联班级
  6. 创建讲师角色时要关联学校,
  7. 提供两个角色接口
    1. 学员视图,可以注册,交学费,选择班级,
    2. 讲师视图,讲师可管理自己的班级,上课时选择班级,查看班级学员列表 ,修改所管理的学员的成绩
    3. 管理视图,创建讲师,创建班级,创建课程
  8. 上面的操作产生的数据都通过pickle序列化保存到文件里

思路

选课系统用例

用例名称

选课

场景

who:学生,老师,管理员

where:老男孩

when:任意时间

用例描述(用户怎么做,或者说用户想怎么用):

  1. 管理员创建学校:北京和上海两个校区
  2. 管理员创建课程:python,go,linux
  3. 管理员创建班级:python周末18期,python脱产7期,linux架构35期
  4. 管理员创建学员:小晴,花野真衣,川岛芳子
  5. 管理员创建讲师:alex,egon,wupeiqi,yuanhao
  6. 讲师创建上课记录:python周末班18期day7
  7. 讲师为day7这节课所有学生批改作业,为每个学生打分
  8. 学员杨磊查看自己的详细信息:所在学校,报名课程,所在班级
  9. 学员杨磊在python18期day7提交了作业
  10. 学员杨磊查看了自己在day7作业的成绩列表,然后自杀了
  11. 学员小晴跟egon表白了,当天下午就去领了结婚证

用例价值

帮老男孩解决课程管理问题

约束

暂无

找名词

管理员,学校,课程,班级,学员讲师,上课记录,作业,分数,学员详细信息,成绩列表,结婚证

筛选:去掉与行业或者说领域无关的名词

管理员,学校,课程,班级,学员,讲师,上课记录,作业,分数,学员详细信息,成绩列表

加属性

名字 属性 备注
管理员 具备所有权限,对于选课系统来说,并不需要管理员的属性,因此在领域模型中,管理员是没有属性的
学校 学校名,地址,课程列表,班级列表
课程 课程名,周期,价钱,大纲
班级 班级名,所属学校,课程
学员 学员名
讲师 讲师名
上课记录 班级,课程节次,日期

连关系

99-面向对象实战-关系图.png

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网