一:什么是面向对象思维?

所谓面向对象,即是将现实中错综复杂的对象,抽丝剥茧,变成一个个最小的单元。要使用时,再通过封装组合的方式,组成一个个业务对象,从而映射出复杂的现实对象。比如DTO业务对象,映射出的是一个业务对象,但是DTO可能是由多个最小单元构成的,而这些最小单元,则可以存储在不同的数据库表里。

面向对象有三个特性:封装,继承以及多态可以理解为这三个特性都一定程度上解决“抽象”问题。比如封装,把一个人,手,脚,头等都可以看成是一个对象,但是业务上就应该输出一个人DTO,则可以把手,脚,头等各个部分封装组合成一个人DTO;又或者把人的各个行为,如吃饭,走路等行为封装起来,最后向外提供一个人dto,内部细节完全屏蔽掉。至于继承,拓展子类,一定程度上也是屏蔽了子类的内部细节。通过多态,抽象的程度更高了甚至单从外部调用来说,都不知道调用的是哪个子类的方法。

二:如何使用面向对象思维

面向对象分析问题,关注点在抽象角度。比如一个勺子,用面向对象的思维去分析就是从材料这个角度,从用途这个角度,从形状这个角度等等去分析。而另一种思维方法,面向过程的关注点则是具体的实现。比如一个dto有多少个对象组成,每个对象有什么方法都是属于面向对象的思维。当真正去实现具体对象的具体方法时,就是使用面向过程的方法去实现,比如第一步该做什么,第二步该做什么等等(值得一提的是,我认为画流程图就是一种面向过程的思维,而画思维导图,则是一种面向对象+面向过程的思考方式)

更具体一点的例子就是,比如当要设计一个工单与工单事件业务对象。对于工单来说,可以从三个角度进行思考,比如工单的记录,流转以及跟踪。如记录(工单的行为操作)则可以通过设计更新人,更新时间,创建人三个字段去实现。而流转则可以通过保存一个当前工单事件来实现,而跟踪则可以设计一个流程节点,流程编码,工单号,工单状态来实现。这样就通过面向对象的思维完成了对工单业务的需求分析和设计

三:为什么需要面向对象思维

使用面向对象的思维去分析问题,实际就是一个抽象业务,分解问题规模的过程。更贴切地说,就类似通过思维导图的方式,一个层次,一个角度地去分析问题。通过这种方法,可以让需求更加清晰,让设计出来的程序扩展性更强。比如要想实现一个Web浏览器可能需要2000个过程,但是使用面向对象的方法设计,可能只需要100个类,一个类需要20个方法。(找bug也更容易找)。但是如果是一些问题规模比较小的场景,使用面向过程的设计将会更加方便(比如写一些算法)

四:如何锻炼面向对象思维

我认为抽象是面向对象的核心,面向对象是抽象的一种实现方式。所谓抽象,即抽离具象事物的一般特征,通俗地说是取其不变的东西,弃其变化的东西。即简化问题,抓住问题的本质。比如上述例子的工单,不变的是工单的记录,流转以及跟踪,但是工单的具体行为操作,具体的流转情况,每一张工单都是不同的。因此,想要锻炼面向对象的思维,首先得锻炼抽象能力。而锻炼抽象能力,主要还得通过画图来锻炼,比如思维导图,类图,实体图,架构图等。通过看书也可以锻炼抽象能力,因为书本的文体是抽象的,一千个读者就有一千个哈姆雷特(视频却刚好相反)

追更:

面向对象与面向过程的本质区别:

面向对象的关注点的抽象角度,所以面向对象主要是用来解决规模大而复杂的现实问题,对业务进行建模的一种思维方法;而面向过程的关注点是具体的实现,所以该思想方法主要是解决规模比较小的显示问题。比如一个浏览器的功能,假设一共有3000多个功能,但是通过面向对象的思维方法,可能分析后是从20个角度,每个角度进一步划分,平均一个角度是150个功能,这比直接通过面向过程的方法简单了不少。但是我认为面向对象的最终都是需要面向过程的,比如一个方法的抽象,最终还是需要落地实现的、而实现具体方法的过程,使用的就是我们的面向过程的思维(甚至画流程图就是一种面向过程的分析方法)

=====================================================================

最后:附上后端技术交流圈,欢迎各位大佬入圈交流技术......V:ff1341658(先添加好友后拉群,添加好友时请备注:小白不黑)

============================================================

如何理解面向对象思维?相关推荐

  1. (自己收藏)全面理解面向对象的 JavaScript

    全面理解面向对象的 JavaScript 前天 by 资深编辑 WnouM 评论(3) 有2727人浏览 收藏 javascript 面向对象 对象 类 原型 < >猎头职位: 上海:Ju ...

  2. 归纳法与面向对象思维

    归纳法包括:枚举归纳推理,因果关系法,概率推理. 上面归纳法的枚举归纳推理,因果关系法就是编程中面向对象的思维,核心一致. 我要感谢自己学了编程,面向对象思维是自底向上,从特性到共性或者整合的目的,共 ...

  3. 从哲学角度理解面向对象的思想

    "双语播放器"已在app store上架,欢迎大家前去下载(主要用于看电影,学英语,程序员一定要学好英语!) 这里是链接: https://itunes.apple.com/cn/ ...

  4. JavaScript之全面理解面向对象的JS

    今天看到一篇文章写得很好,对于像博主这种js一般级别的菜鸟很有帮助,博主秉着"好文要转"的原则收藏了这篇文章,简单排了下版,分享给大家,本文转自原文:http://www.ibm. ...

  5. UML2面向对象分析与设计 -- 面向对象思维(概念、面向对象技术的发展历史、对象和类、面向对象技术的相关原则:抽象 封装 分解 泛化 多态 分层 复用)

    文章目录 1. UML2面向对象分析与设计 学习目标 2. 面向对象思维 2.1 学习目标 2.2 什么是面向对象 2.3 面向对象技术的发展历史 2.4 面向对象技术的优势 2.4.1 便于沟通:在 ...

  6. 深入理解面向对象 -- 基于 JavaScript 实现

    我们在学习编程时,避免不了会接触一个概念,叫:面向对象编程(Object-oriented programming,缩写:oop) (不是搞对象那个对象哈),其实我们的编程方式,不止有面向对象,还有 ...

  7. 从C++到Java --理解面向对象是关键所在

    从C++到Java --理解面向对象是关键所在 本文将提供一个对这些概念的简明的解释,而不是提供一些深入的或者如何使用的问题.记住,这只是依据我对Java的经验带而提出的一些主要的差异. Java在虚 ...

  8. 4.C++深入理解 面向对象部分3

    C++深入理解 面向对象部分 一.C++流的控制 1.1 输入输出流相关的类   输入输出重定向例子, #include <iostream> using namespace std; i ...

  9. 3.C++深入理解 面向对象部分2

    C++深入理解 面向对象部分 一.面向对象深入部分   在前几天 360 笔试做下来,感觉自己会的难度还行,还没学过的就乱选了,算法题部分做出来运行结果也是对的,但是两个解答题一点都没见过,直接就跳过 ...

最新文章

  1. python基本语法语句-Python基本语句
  2. Nginx初学第一步
  3. 苹果iPhone被曝跟踪用户位置信息(图)
  4. 写给期待年薪百万的IT同学
  5. 详解使用fastboot为Android刷入原厂镜像
  6. a*算法流程图_学好流程控制结构轻松应对高考数学程序算法题
  7. Windows——Modern Standby(现代待机) S0改Suspend to RAM(待机到内存)S3睡眠解决方案(以机械革命F1 i5-11300H为例)
  8. PHP的memory_limit
  9. .net swf 上传组件
  10. java装箱_Java 装箱 拆箱
  11. Pandas一些小技巧
  12. Polyfill工作笔记001---简介
  13. ORM框架之Mybatis(六)mybatis通用mapper
  14. DirectX修复工具
  15. 《基于机器视觉的高压输电线路覆冰厚度检测》论文笔记
  16. Ubuntu阿里源镜像
  17. 解决Eth0网卡不存在的情况_wuli大世界_新浪博客
  18. Visual paradigm试用版绘制ER图时如何去水印
  19. 扫描二维码登入PC的工作原理
  20. 字符串转成正则表达式

热门文章

  1. WebRTC基础实践 - 10. 总结
  2. pb11.5的使用体会
  3. 数据结构实验——病毒检测(KMP实现)
  4. python告诉你迪丽热巴 vs 杨幂 vs 林志玲谁最美
  5. 领域驱动设计 -- 领域驱动建模与面向对象建模的差异(一)
  6. LaTeX 命令和代码结构简介
  7. 数据集成平台,多种数据源融合
  8. Elasticsearch-2.4.3的单节点安装(多种方式图文详解)
  9. 达梦数据库安装ODBC驱动及无法正常启动解决办法
  10. 【往届已检索】第二届电子、信息与计算技术前沿国际会议征稿中