当前位置: 首页 > news >正文

小论面向对象编程方法

    在软件开发中,使用面向对象编程方法是一种放长线吊大鱼的策略,首先要高瞻远瞩,然后精耕细作,最后全面开花完成软件开发任务。

面向对象编程思想是适应当前软件开发规模原来越大,复杂度越来越高的情况。软件开发的工作量随着软件规模的增加而呈非线性增长,软件规模越大,软件开发工作量增长的速度越来快。而使用传统的面向过程的编程方法,开发人员的工作量和软件开发工作量是成正比的,因此当软件规模很大时,开发人员的工作量将非常巨大,从而导致软件开发成本急剧上升,这对于商业软件开发是不可行的。而软件客户的复杂的需求是客观存在的,是需要满足的,因此业界开始使用面向对象的编程方法来降低软件开发成本。【袁永福 http://www.cnblogs.com/xdesigner】

从宏观上看,面向对象编程思想的最大的作用就是将一个整体上复杂的软件功能拆分成多个功能简单的软件功能,然后以较低的成本实现各个简单的软件功能,最后进行模块集成形成一个完整而复杂的软件功能来满足用户需求。采用的是分割包围,各个击破的策略。

如上图所示,阴影部分的面积就是软件开发工作量。当采用面向过程的软件开发方法,当客户需求很复杂时,软件开发工作量将非常大,而采用面向对象的软件开发方法时,开发人员可以将复杂的客户需求拆分成两个较为简单的客户需求,然后逐一开发,最后进行集成实现所需的功能,此时软件开发工作量降低了一半,是否采用正确的方法,效果的对比是惊人的。因此采用面向对象的软件开发方法,以较低的成本开发客户需求复杂的商业软件成为现实。

从软件开发过程看,面向对象编程思想强制添加了一个软件抽象的步骤,迫使软件开发人员需要跟深入的了解和分析用户需求,从而增加了软件开发流程的稳定性和正规性。

从实现方法上看,面向对象编程思想更加符合人们对客观事物的理解方法。考察人们在理解客户事物的过程,人们会有意无意的将诸多事物进行分类整理和对比。【袁永福 http://www.cnblogs.com/xdesigner】

比如人们经过大量的认识,把汽车抽象理解为有至少4个轮子和2个车轴的机动车辆,而客车就是专门运输人员的汽车,公交车就是任何人交费就可以乘坐的客车。于是形成了“机动车汽车客车公交车”这4种客观事物和3个派生关系构成的关于汽车的认识。这个认识方式学习成本低,速度快,知识能重复利用是其最大的优点。

若不用这种分类比较的方法,则汽车就定义为至少4个轮子2个车轴的机动车;客车就是专门运输人员的至少4个轮子和2个车轴的机动车;公交车就是任何人交费就可以乘坐的专门用于运输人员的至少有4个轮子和2个车轴的机动车。对于两种认知方式可以进行如下对比【袁永福 http://www.cnblogs.com/xdesigner】

事物

分类对比

不分类对比

汽车

至少有4个轮子和2个车轴的机动车。

至少有4个轮子和2个车轴的机动车。

客车

专门运输人员的汽车。

专门运输人员的至少4个轮子和2个车轴的机动车。

公交车

任何人交费就可以乘坐的客车。

任何人交费就可以乘坐的专门用于运输人员的至少有4个轮子和2个车轴的机动车。

显而易见,若不采用分类对比的认知方式,人们认知事物的成本就大为增加,相信任何人都没能力能认识这个世界的繁杂事物的。但事实上,智力正常的人都自觉地采用这种分类对比的认知方法,从而轻易的认知周围所有的事物。

软件开发也一样,软件是开发人员对客户需求的认知的表述。不理解功能需求就不可能开发出正确的软件。就像汽车一样,用户需求也是客观存在的事物,面对复杂的客户需求,采用分类对比的方式是明智之举。因此面向对象的编程方法就是分类对比的方法在软件开发中的具体实现。

分类对比的认知方式最大的优势就是知识的重复利用,于是面向对象编程思想最大的优势就是代码的重复利用。代码的重复利用有两大好处,一个就是代码寿命明显变长,能很大的保护客户的投资,另外一个就是能层层积累,降低对新知识的学习量。【袁永福 http://www.cnblogs.com/xdesigner】

代码就是客户已有的投资的结果,商业软件开发人员应当要充分的考虑到对客户已有投资的保护,在成本允许的情况下旧代码应当尽量保存。

代码是软件的细胞,代码的长寿是软件长寿的基础,也是客户的投资价值最大化的基础。

 

相关文章:

  • git 下载代码到本地
  • Nginx安装、默认虚拟主机、用户认证、域名重定向
  • 七周七数据库
  • Android FM模块学习之四源码分析(八)
  • 初识MongoDB分片
  • BZOJ 2821 作诗(Poetize)(分块)
  • python学习笔记(九):操作数据库
  • Java今年最流行的三大框架你应该学习了
  • JSON数组,JSON对象,数组的区别与基本操作整理
  • 阿里云全球19个地域节点,哪个节点的服务器好,速度快?
  • 回顾2017:基础设施支出增长 思科占主导地位
  • 微服务入门【系列视频课程】
  • mongodb集群模式(主从模式,副本集模式,分片模式)
  • 透彻影像王书浩:三易其辙与功不唐捐
  • 如何使用 Spinnaker 和 Kubernetes 进行数据库变更发布
  • 2017届校招提前批面试回顾
  • C++类的相互关联
  • CSS实用技巧
  • es6要点
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • SegmentFault 2015 Top Rank
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • WebSocket使用
  • 百度地图API标注+时间轴组件
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 记录:CentOS7.2配置LNMP环境记录
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 蓝海存储开关机注意事项总结
  • 网络应用优化——时延与带宽
  • 小程序01:wepy框架整合iview webapp UI
  • 以太坊客户端Geth命令参数详解
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #ifdef 的技巧用法
  • #include
  • (2)STM32单片机上位机
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (day 12)JavaScript学习笔记(数组3)
  • (南京观海微电子)——I3C协议介绍
  • (一)Neo4j下载安装以及初次使用
  • (转)memcache、redis缓存
  • (转)创业家杂志:UCWEB天使第一步
  • (转载)hibernate缓存
  • .bat批处理出现中文乱码的情况
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .Net FrameWork总结
  • .Net 垃圾回收机制原理(二)
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET性能优化(文摘)
  • @Pointcut 使用
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [ element-ui:table ] 设置table中某些行数据禁止被选中,通过selectable 定义方法解决
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • []Telit UC864E 拨号上网