问题的由来,要从一块烤肉说起。6月一天晚上,小李摸了摸肚子,想趁着这温度刚好的夜晚,带着一天学习的充实感,去开心地吃烤肉串喝点啤酒。可是最近购物太多,花的太多,资金也不那么充裕,觉得晚上不应该再去加这餐。可这转念一想,饭得痛快地吃啊,用什么法子吃到呢?那不就得去赚钱,小李学的是计算机,那计算机不得学到技术才可以赚钱吃肉肉嘛。于是乎,小李痛定思痛并左右查资料,想得到学习经验和方法,更快地学好,为将来吃肉肉做准备。
以上是瞎写的小随笔,干杯~哈哈
数据结构和算法是必中必学。读到面向编程这一章的时候,里面出来和很多概念如模块化,抽象化,封装。这些概念我在起初理解的时候能从术语的角度理解,但是感觉不接地气,理解不够那么深刻。因为每一个伟大技术的诞生必然是因为解决了问题,所以在学习的路上我提出为什么要面对对象编程这一问题。查阅了一番资料,颇有心得。


zeroV5在《大话设计模式》中发现作者程杰对面向对象编程做出了一个解释,如下:
话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片。眼看就要灭了东吴,统一天下,曹操大悦,于是大宴众文武。在酒席间,曹操诗性大发,不觉吟道:“喝酒唱歌,人生真爽…”。众文武齐呼:”丞相好诗!“于是命印刷工匠刻版印刷,以便流传天下。

版样给曹操一看,曹操感觉不妥,说道”喝与唱,此话过俗,应改为‘对酒当歌’较好!“,于是命工匠重新雕刻。那时候,还没发明活字印刷术,如果样板要改,只能重头雕刻。工匠眼看连夜刻版之工,彻底白费,心中叫苦不迭。只得照办。

版样再次出来请曹操过目,曹操细细一品,觉得还是不好,说”人生真爽太过直接,应该改问语才够意境,因此应改为‘对酒当歌,人生几何?’“,于是…
在活字印刷术还没出现之前,如果版样有改动,只能重新雕刻。而且在印刷完成后,这个样板就失去了它的价值,如果需要其他样板只能重新雕刻。而活字印刷术的出现就大大改善了印刷技术。如上例”喝酒唱歌,人生真爽“,如果用活字印刷,只需要改四个字就可,其余工作都未白做。岂不快哉!!

活字印刷也反应了OOP。当要改动时,只需要改要改的地方,此为 可维护;当这些字用完后,并非就完全没有价值了,它完全可以在后来的印刷中重复使用,此乃 可复用;次诗若要加字,只需另刻字加入即可,这就是 可扩展;字的排列可以横排,也可以竖排,此是灵活性好。
这种重复,可再利用反映再面向对象编程(OOP)中其实就是面向对象设计的目标:

  • 可重用性:印刷块来回用,不用每次重新刻
  • 适应性
  • 健壮性:若是刻错了,只需改动一块就可以

当然以上是非常生动的类比,用此更深的理解OOP的目标我认为很合适。

原文链接:https://blog.csdn.net/u011700168/article/details/79161724


另一个例子,Gaosiy在博文为什么要用面向对象编程,它的优点是什么?中使用计算机中的例子也很好地解释了为什么要用面向对象编程。
在没有出现面向对象编程之前,计算机程序被用于解决某个问题是按步骤来的,比如把大象装进冰箱,需要分三个步骤。当然,这个例子不足以形容面向过程编程的形式,下面我用一个下棋游戏设计的例子来分别说一下面向过程编程和面向对象编程是怎么做的。
面向过程编程的设计思路:
步骤化分析问题:
1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。

面向对象编程的设计思路

功能化分析问题:
要实现这个游戏你需要有三个功能,1.黑棋和白棋的走动 2.棋盘的画面绘制 3.裁判系统判断输赢。

有什么差别呢?比如我现在要改动规则,或者加一些高级功能,比如悔棋等等,面向过程你就需要把你的改动穿插到程序的实现步骤中,有的时候这是一件非常头疼的事情,不如重新写过。。面向对象的话,你改动期盼的绘制功能就行了,这样改动更方便,对程序影响也更小。这只是其中一个例子,其他的优点还有很多。

面向对象编程的优势

1.数据和方法(方法可以理解为函数)被封装在一起,这样做改动的时候对整个程序的影响不大。
2.通过继承减少代码的冗余。
3.易扩展
这些特点将在后续的博文中详细为大家介绍,有关于面向对象编程中的高大上名词:类,对象,封装,继承,多态,我将在后续的文章中尽量通俗易懂的进行解释。

原文链接:https://blog.csdn.net/huiyuanliyan/article/details/51726114


写在开始之后

设计好的代码不仅需要简单地理解面向对象的方法,更需要有效地利用面向对象的设计技术。所以,这也是给自己一个警醒,用技术实现想法是重中之重。更多实践才能遇到新的问题,多些思考,再多实践,才能解决问题。

为什么要面向对象编程?相关推荐

  1. 【面向对象编程】(4) 类的继承,重构父类中的方法

    各位同学好,今天和大家分享一下面向对象编程中,类的三大特征之继承.主要介绍:子类继承父类的基本方法:重写父类的类方法:重构父类的初始化方法:super() 方法.本节主要是单继承,多继承在下一节中介绍 ...

  2. 【面向对象编程】(3) 类之间的交互,依赖关系,关联关系

    各位同学好,今天和大家分享一下面向对象编程中,类之间的交互,类之间的依赖关系和关联关系.有不明白的可见前一章节:https://blog.csdn.net/dgvv4/article/details/ ...

  3. 【面向对象编程】(1) 类实例化的基本方法

    各位同学好,本章节和大家分享一下面向对象编程的一些方法,通过一些案例带大家由浅入深掌握面向对象的编程. 1. 最基本的类实例化 创建类的方法是 class 变量名: ,实例化方法是 类名() ,分配属 ...

  4. C#编程概念系列(一):面向对象编程

    系列文章索引目录:http://www.cnblogs.com/loner/archive/2013/05/09/3068211.html 引子: 面向对象编程:这个在当下已不是什么时髦的概念,但通过 ...

  5. JavaScript面向对象编程

    自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升.JavaScript最基本的使用,以及语法.浏览器对象等等东东在这里就不累赘了.把主要篇幅放在如何实现JavaScri ...

  6. python面向对象的优点_Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  7. 转载知乎上的一篇:“ 面向对象编程的弊端是什么?”

    2019独角兽企业重金招聘Python工程师标准>>> 弊端是,没有人还记得面向对象原本要解决的问题是什么. 1.面向对象原本要解决什么(或者说有什么优良特性) 似乎很简单,但实际又 ...

  8. c语言面向对象编程中的类_C ++中的面向对象编程

    c语言面向对象编程中的类 Object oriented programming, OOP for short, aims to implement real world entities like ...

  9. ruby 新建对象_Ruby面向对象编程的简介

    ruby 新建对象 by Saul Costa 由Saul Costa Object-oriented programming (OOP) is a programming paradigm orga ...

  10. 面向对象编程概念_如何向6岁的孩子解释面向对象的编程概念

    面向对象编程概念 by Alexander Petkov 通过亚历山大·佩特科夫(Alexander Petkov) Have you noticed how the same cliche ques ...

最新文章

  1. 谨慎Asp.net中static变量的用法
  2. 程序员面试系列——插入排序
  3. leetcode 旋转数组
  4. poj2955 Brackets (区间dp)
  5. MindSpore:不用摘口罩也知道你是谁
  6. weblogic系列漏洞整理 -- 3. weblogic 后台提权
  7. c++11支持类数据成员的初始化
  8. 大写一二三四五六七八大九十大写
  9. Win10自带的邮件email上如何登录qq邮箱
  10. 2010年中国十大网络电视排行榜(转)
  11. java qq验证_JAVA正则表达式校验qq号码的方法
  12. Android 字体颜色渐变效果 Span实现
  13. Shell 循环检查的格式
  14. HDU-6148 Valley Numer(数位DP)
  15. 移动端:js判断苹果ios各类机型
  16. 2019牛客多校训练营第一场 H题 HOR 题解
  17. web攻防教学防黑客攻击,预防网站攻击
  18. 旁边工位的兄弟,居然“偷看”美女小编直播?
  19. 详解Wi-Fi连接上网认证接入的原理和过程
  20. s8 android调用相机,教你如何在安卓手机上使用谷歌 pixel相机

热门文章

  1. 什么是PECL电平以及常用的匹配电路
  2. 白山搜索引擎优化收费_百度搜索引擎优化收费标准
  3. 炼数成金--支持向量机 笔记
  4. 哔哩哔哩轻视频怎么去水印
  5. Remix Icon
  6. 【转】C++ 常用的STL查找函数方法
  7. 10. Linux的时间
  8. Milton 1.5.1发布,开源服务器端类库
  9. 启动Nginx报错nginx: [emerg] getpwnam(
  10. 安装MySQL过程中,出现“Staring the server”错误的解决方法