Python全栈工程师(10:面向对象的软件开发)
面向对象的软件工程包括下面几个部分
1.面向对象分析(object oriented analysis ,OOA)
软件工程中的系统分析阶段,要求分析员和用户结合在一起,对用户的需求做出精确的分析和明确的表述,从大的方面解析软件系统应该做什么,而不是怎么去做。面向对象的分析要按照面向对象的概念和方法,在对任务的分析中,从客观存在的事物和事物之间的关系,归纳出有关的对象(对象的‘特征’和‘技能’)以及对象之间的联系,并将具有相同属性和行为的对象用一个类class来标识。
建立一个能反映这是工作情况的需求模型,此时的模型是粗略的。
2 面向对象设计(object oriented design,OOD)
根据面向对象分析阶段形成的需求模型,对每一部分分别进行具体的设计。
首先是类的设计,类的设计可能包含多个层次(利用继承与派生机制)。然后以这些类为基础提出程序设计的思路和方法,包括对算法的设计。用一种更通用的描述工具(如伪代码或流程图)来描述
3 面向对象编程(object oriented programming,OOP)
根据面向对象设计的结果,选择一种计算机语言把它写成程序,可以是python
4 面向对象测试(object oriented test,OOT)
在写好程序后交给用户使用前,必须对程序进行严格的测试,测试的目的是发现程序中的错误并修正它。 面向对象的测试是用面向对象的方法进行测试,以类作为测试的基本单元。
5 面向对象维护(object oriendted soft maintenance,OOSM)
由于使用了面向对象的方法开发程序,使用程序的维护比较容易。 因为对象的封装性,修改一个对象对其他的对象影响很小,利用面向对象的方法维护程序,大大提高了软件维护的效率,可扩展性高。
python中关于OOP的常用术语
抽象/实现
抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于绘程序结构,从而实现这种模型。抽象不仅包括这种模型的数据属性,还定义了这些数据的接口。
对某种抽象的实现就是对此数据及与之相关接口的现实化(realization)。现实化这个过程对于客户程序应当是透明而且无关的。
封装/接口
封装描述了对数据/信息进行隐藏的观念,它对数据属性提供接口和访问函数。通过任何客户端直接对数据的访问,无视接口,与封装性都是背道而驰的,除非程序员允许这些操作。作为实现的 一部分,客户端根本就不需要知道在封装之后,数据属性是如何组织的。在Python中,所有的类属性都是公开的,但名字可能被“混淆”了,以阻止未经授权的访问,但仅此而已,再没有其他预防措施了。这就需要在设计时,对数据提供相应的接口,以免客户程序通过不规范的操作来存取封装的数据属性。
注意:封装绝不是等于“把不想让别人看到、以后可能修改的东西用private隐藏起来”
真正的封装是,经过深入的思考,做出良好的抽象,给出“完整且最小”的接口,并使得内部细节可以对外透明(注意:对外透明的意思是,外部调用者可以顺利的得到自己想要的任何功能,完全意识不到内部细节的存在)
合成
合成扩充了对类的描述,使得多个不同的类合成为一个大的类,来解决现实问题。合成讲述了一个异常复杂的系统,比如一个类由其它类组成,更小的组件也可能是其它的类,数据属性及行为, 所有这些合在一起,彼此是“有一个”的关系。
派生/继承/继承结构
派生描述了子类衍生出新的特性,新类保留已存类类型中所有需要的数据和行为,但允许修改或者其它的自定义操作,都不会修改原类的定义。
继承描述了子类属性从祖先类继承这样一种方式
继承结构表示多“代”派生,可以述成一个“族谱”,连续的子类,与祖先类都有关系。
泛化/特化
泛化表示所有子类与其父类及祖先类有一样的特点。特化描述所有子类的自定义,也就是,什么属性让它与其祖先类不同。
多态与多态性
多态指的是同一种事物的多种状态,多态性的概念指出了对象如何通过他们共同的属性和动作来操作及访问,而不需考虑他们具体的类。
自省/反射
自省也称作反射,这个性质展示了某对象是如何在运行期取得自身信息的。如果传一个对象给你,你可以查出它有什么能力,这是一项强大的特性。如果Python不支持某种形式的自省功能,dir和type内建函数,将很难正常工作。还有那些特殊属性,像__dict__,__name__及__doc__
面向对象实战:
基于面向对象开发程序的开发流程:需求模型->领域模型->设计模型->实现模型
需求模型之5w1h8c
1. 需求VS功能
需求:客户想要的效果,对客户有价值的事情
功能:系统为了实现客户的价值而提供的能力/功能
举例:
汽车:驾驶是需求,刹车、加速、转弯是功能
打印机:打印是需求,进纸、设定、与电脑连接等是功能
pos机:买单是需求,商品扫描、金额汇总、收银等是功能
2. 需求的重要性
1/3的项目失败或陷入困境是因为需求原因导致的
修复需求错误的问题成本极高
1 编码阶段修复发现一个错误耗费人类是1个单位
2 测试阶段修复需求错误的成本是5-10倍
3 维护阶段(产品上线后),修复需求错误成本是20倍
ps:在需求阶段修复错误,成本只需要0.1-0.2即可
结论:需求错了,几乎要把软件项目重做一遍
3. 需求分析的目的
1 记录员,记录客户的需求
2 分析员,和客户一起分析,完善需求
3 引导员,能够引导客户的需求
4. 需求分析的方法
需求分析518方法,简称我要发,具体就是5w1h8c
5w:
when:用户想在什么时间用,例如半夜备份的任务,很明显我们得知该需求需要自动化执行
where:用户想在什么地方用,如垃圾桶室内和室外的区别,同样的事物放到不同地方用肯定不一样
who:用户想让谁来用,不仅是人,也可以是一个系统
what:用户想要我们程序的输出结果是什么,如图片,文档,系统
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
指我们的产品与客户其他已有的产品或系统的兼容能力,要知道现在很少有产品是孤立运行的,特别是在大企业、大公司中,多个系统都是相互交互、互相配合的。新的系统必须能够和已有的系统配合,否则将无法运行
注:5w+1h属于功能属性
8c属于质量属性
三 需求模型之用例的写法
三段法:NEA
1 正常处理(normal):分析正常流程
2 异常处理(exception):分析每一步异常情况和对应的处理
3 替代处理(alternative):分析每一步是否有其他替代方法,以及如何做
#1. 用例名称
一般情况下,用例名称即需求名称
#2. 场景
场景即用例发生的环境,正好对应5w中的:when,where,who
#3. 用例描述
描述详细的用例内容,对应5w中的what和how
即用户应该怎样做,以及每个步骤中的输出,但不要求每个步骤都有一定的输出,可以有也可以没有,也可以有多个
#4. 用例价值
描述用例对应的客户价值,对应5w中的why
#5. 约束和限制
即真个需求流程中相关的约束和限制条件,对应518方法中的8C
#用例名答题系统#场景:when:8.10开始where:北京who:linux学院,网络客户#用例描述:1. linux学院提供50道题2. 每个客户无需输入任何个人信息就可以参与答题,随机选择20道题,给客户回答,每道题5分,3.答题结束后,输入手机号,提交,算总分4.60分参与抽奖,<60分赠送基础视频#用户价值:答题有奖,答题提交时输入自己的手机号获取成绩,获得潜在客户的联系方式,为后期将客户转成学员做准备#约束:暂无
四 领域模型
需求分析阶段不区分面向对象还是面向过程,领域模型是完成从需求分析到面向对象设计的一座桥梁
#定义:领域模型是对领域内的概念或现实世界中对象的可视化表示,又称为观念模型,领域对象模型,分析对象模型
#它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系
#1 发掘重要的业务领域概念
#2 建立业务领域概念之间的关系
#1 从用例中找名词(找完后需要删除不是领域对象的名词,具体删除什么,与不同领域有关,没有统一标准,靠经验)
#2 加属性(有些属性并没有在用例中明确给出,靠行业经验自己添加)
#3 连关系(画UML图)
五 设计模型
面向对象类设计的具体步骤第一步:领域类映射(不是全盘拷贝)类筛选:并不是每个领域类都会出现在软件中名称映射:对应属性映射:对应提炼方法:领域类中并没有方法,在用例中找动词第二步:应用设计原则和设计模式第三步:拆分辅助类(领域类可以在实现阶段拆分为几个类)
六 实现模型
七 答题系统案例
#找名词:
linux学院,题,客户,得分,奖,视频
#筛选:去掉与领域无关的名词。视频应该算作一种奖品
linux学院,题,客户,得分,奖
#加属性
加属性
名词 属性 备注
linux学院 NA 对于答题系统来说,并不需要linux学院的属性,因此在领域模型中,linux学院是没有属性的
题 题目编号,题目类型,题目描述,答题选项,正确答案,分数
客户 客户编号,姓名,性别,年龄,手机号
答题记录 记录编号,客户编号,题目编号列表,总分数,时间 通过答题记录就可以知道用户是谁,以及用户答过的题目
奖品 奖品编号,奖品名字
#连关系:画图
1:答题记录是客户与题的关系类,而客户与奖品之间可以建一个关系类,这样以后单查关系类就可以知道谁得了什么奖品
2:找动词:创建题目随机选择题目答题提交算总分抽奖
第三步:设计模型
第四部:实现模型
八 UML图
类图中通过加号(+)来表示 public
通过减号(-)表示 private
通过井号(#)表示 protected
Python全栈工程师(10:面向对象的软件开发)相关推荐
- 案例驱动python编程入门-郑州高薪python全栈工程师
阶段一.Python 全栈工程师之必知必会 - 前端开发技术 课程一.入门必备 - 新手学 HTML5+CSS3 1.HTML基本标签 2.W3C标准及XHTML1.0基本规范 3.表格.表单及框架 ...
- 2017最新整理python全栈工程师系统培训之路精品课程(全套)
百度搜索"一起自学吧"做大数据专家,不做第一,只做唯一. 课程介绍: 本课程由一起自学吧论坛打造,目的是给想成为Python全栈工程师的同学提供一套完整,全面而系统的培训课程,课程 ...
- 匠人之心,成就真正Python全栈工程师
Python行业现状 Python在2017年世界脚本语言排行榜中 Python排名第1,也是多领域首选语言,掌握了Python就是掌握了未来. Python人才需求量 世界编程语言排行榜之Pytho ...
- python全栈工程师 pdf_python全栈工程师项目开发实例实战入门教程百度云
python全栈工程师项目开发实例实战入门教程百度云 课程目录: 开学典礼 pycharm的基本使用 Python基本语法 数值类型数据及运算 字符串的基本操作 字符串的常用方法 列表的基本使用 列表 ...
- Python全栈工程师-第1周-韦玮-专题视频课程
Python全栈工程师-第1周-1583人已学习 课程介绍 Python全栈工程师-第1周 课程收益 Python全栈工程师培养课程 讲师介绍 韦玮 更多讲师课程 ...
- Python 全栈工程师必备面试题 300 道(2020 版)
2020元旦巨献,面试升级必备!献给正在学习Python的同学! Python 全栈工程师必备面试题 300 道(2020 版) Python 面试不仅需要掌握 Python 基础知识和高级语法,还会 ...
- python全栈工程师薪水_不止 20K,Python 工程师薪资再飙升(内附转型指南)
原标题:不止 20K,Python 工程师薪资再飙升(内附转型指南) Python 诞生之初就被誉为最容易上手的编程语言.进入火热的 AI 人工智能时代后,它也逐渐取代 Java,成为编程界的头牌语言 ...
- 大龄开发者究竟该何去何从?2019年Python全栈工程师,都是开发人员改怎么转向高收入?
是继续做技术还是"强迫"自己转型做管理? 作者 | Petr Zemek 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 以下为译文: 很多人因为喜欢 ...
- Python全栈工程师-第14周-韦玮-专题视频课程
Python全栈工程师-第14周-136人已学习 课程介绍 Python全栈工程师 课程收益 Python全栈工程师 讲师介绍 韦玮 更多讲师课程 企业家,IT ...
- Python全栈工程师-第4周-韦玮-专题视频课程
Python全栈工程师-第4周-490人已学习 课程介绍 Python全栈工程师-第4周 课程收益 Python全栈工程师培养 讲师介绍 韦玮 更多讲师课程 企 ...
最新文章
- 生成树计数Matrix-Tree定理-数学
- 苹果11怎么关掉横屏_苹果手机这些常规操作你可能不会!教你省电又省心?
- Java I/O流InputStream,OutputStream,Reader,Writer
- 感受JTable 与 JTableModel
- 马踏棋盘算法(骑士周游)+贪心优化
- 如何分析网站日志文件
- Android应用程序组件
- (105)FPGA面试题-查找程序中的代码错误
- ​从程序员到 33 岁的亿万富翁
- netty应用场景_彻底搞懂 netty 线程模型
- 人机交互论文计算机导论,计算机导论第10章人机交互[精].ppt
- 多进程相关内容(IPC)
- 数据库分页LIMIT
- 2020-11-05
- HTTP协议和URLConnection使用
- 关于squid版本问题
- 平板电脑装深度linux,在酷比魔方iWork10 Pro平板上装Deepin 20.1后触摸无反应的解决...
- 一些提取api key的正则表达式
- html显示时钟 翻页 js,js css3翻页数字时钟代码
- 张纪中选定潇浪饰新版《西游记》孙悟空
热门文章
- 计算机毕业设计(附源码)python医院疫情管理系统
- 归因分析(Attribution Analysis)模型解析
- 计算机模拟及其应用,计算机模拟
- 急速扩张的银隆曝出欠款,董明珠的梦想与现实
- 如何做好初中物理实验室的建设与管理
- 一次性查找并统一替换多个 Excel 中的多个关键字
- 基于MATLAB Simulink的三相AC DC整流后的直流电机转速开环控制仿真模型
- iReport关于page header制作表单明细模板,textfield与staticText不相容的问题解决
- 手绘线条一直画不直_教程|手绘插画:学会画线就成功了一半(2)
- SPI message 基础 Part 2