如何理解面向对象思维?
一:什么是面向对象思维?
所谓面向对象,即是将现实中错综复杂的对象,抽丝剥茧,变成一个个最小的单元。要使用时,再通过封装组合的方式,组成一个个业务对象,从而映射出复杂的现实对象。比如DTO业务对象,映射出的是一个业务对象,但是DTO可能是由多个最小单元构成的,而这些最小单元,则可以存储在不同的数据库表里。
面向对象有三个特性:封装,继承以及多态。可以理解为这三个特性都一定程度上解决“抽象”问题。比如封装,把一个人,手,脚,头等都可以看成是一个对象,但是业务上就应该输出一个人DTO,则可以把手,脚,头等各个部分封装组合成一个人DTO;又或者把人的各个行为,如吃饭,走路等行为封装起来,最后向外提供一个人dto,内部细节完全屏蔽掉。至于继承,拓展子类,一定程度上也是屏蔽了子类的内部细节。通过多态,抽象的程度更高了甚至单从外部调用来说,都不知道调用的是哪个子类的方法。
二:如何使用面向对象思维
面向对象分析问题,关注点在抽象角度。比如一个勺子,用面向对象的思维去分析就是从材料这个角度,从用途这个角度,从形状这个角度等等去分析。而另一种思维方法,面向过程的关注点则是具体的实现。比如一个dto有多少个对象组成,每个对象有什么方法都是属于面向对象的思维。当真正去实现具体对象的具体方法时,就是使用面向过程的方法去实现,比如第一步该做什么,第二步该做什么等等(值得一提的是,我认为画流程图就是一种面向过程的思维,而画思维导图,则是一种面向对象+面向过程的思考方式)
更具体一点的例子就是,比如当要设计一个工单与工单事件业务对象。对于工单来说,可以从三个角度进行思考,比如工单的记录,流转以及跟踪。如记录(工单的行为操作)则可以通过设计更新人,更新时间,创建人三个字段去实现。而流转则可以通过保存一个当前工单事件来实现,而跟踪则可以设计一个流程节点,流程编码,工单号,工单状态来实现。这样就通过面向对象的思维完成了对工单业务的需求分析和设计
三:为什么需要面向对象思维
使用面向对象的思维去分析问题,实际就是一个抽象业务,分解问题规模的过程。更贴切地说,就类似通过思维导图的方式,一个层次,一个角度地去分析问题。通过这种方法,可以让需求更加清晰,让设计出来的程序扩展性更强。比如要想实现一个Web浏览器可能需要2000个过程,但是使用面向对象的方法设计,可能只需要100个类,一个类需要20个方法。(找bug也更容易找)。但是如果是一些问题规模比较小的场景,使用面向过程的设计将会更加方便(比如写一些算法)
四:如何锻炼面向对象思维
我认为抽象是面向对象的核心,面向对象是抽象的一种实现方式。所谓抽象,即抽离具象事物的一般特征,通俗地说是取其不变的东西,弃其变化的东西。即简化问题,抓住问题的本质。比如上述例子的工单,不变的是工单的记录,流转以及跟踪,但是工单的具体行为操作,具体的流转情况,每一张工单都是不同的。因此,想要锻炼面向对象的思维,首先得锻炼抽象能力。而锻炼抽象能力,主要还得通过画图来锻炼,比如思维导图,类图,实体图,架构图等。通过看书也可以锻炼抽象能力,因为书本的文体是抽象的,一千个读者就有一千个哈姆雷特(视频却刚好相反)
追更:
面向对象与面向过程的本质区别:
面向对象的关注点的抽象角度,所以面向对象主要是用来解决规模大而复杂的现实问题,对业务进行建模的一种思维方法;而面向过程的关注点是具体的实现,所以该思想方法主要是解决规模比较小的显示问题。比如一个浏览器的功能,假设一共有3000多个功能,但是通过面向对象的思维方法,可能分析后是从20个角度,每个角度进一步划分,平均一个角度是150个功能,这比直接通过面向过程的方法简单了不少。但是我认为面向对象的最终都是需要面向过程的,比如一个方法的抽象,最终还是需要落地实现的、而实现具体方法的过程,使用的就是我们的面向过程的思维(甚至画流程图就是一种面向过程的分析方法)
=====================================================================
最后:附上后端技术交流圈,欢迎各位大佬入圈交流技术......V:ff1341658(先添加好友后拉群,添加好友时请备注:小白不黑)
============================================================
如何理解面向对象思维?相关推荐
- (自己收藏)全面理解面向对象的 JavaScript
全面理解面向对象的 JavaScript 前天 by 资深编辑 WnouM 评论(3) 有2727人浏览 收藏 javascript 面向对象 对象 类 原型 < >猎头职位: 上海:Ju ...
- 归纳法与面向对象思维
归纳法包括:枚举归纳推理,因果关系法,概率推理. 上面归纳法的枚举归纳推理,因果关系法就是编程中面向对象的思维,核心一致. 我要感谢自己学了编程,面向对象思维是自底向上,从特性到共性或者整合的目的,共 ...
- 从哲学角度理解面向对象的思想
"双语播放器"已在app store上架,欢迎大家前去下载(主要用于看电影,学英语,程序员一定要学好英语!) 这里是链接: https://itunes.apple.com/cn/ ...
- JavaScript之全面理解面向对象的JS
今天看到一篇文章写得很好,对于像博主这种js一般级别的菜鸟很有帮助,博主秉着"好文要转"的原则收藏了这篇文章,简单排了下版,分享给大家,本文转自原文:http://www.ibm. ...
- UML2面向对象分析与设计 -- 面向对象思维(概念、面向对象技术的发展历史、对象和类、面向对象技术的相关原则:抽象 封装 分解 泛化 多态 分层 复用)
文章目录 1. UML2面向对象分析与设计 学习目标 2. 面向对象思维 2.1 学习目标 2.2 什么是面向对象 2.3 面向对象技术的发展历史 2.4 面向对象技术的优势 2.4.1 便于沟通:在 ...
- 深入理解面向对象 -- 基于 JavaScript 实现
我们在学习编程时,避免不了会接触一个概念,叫:面向对象编程(Object-oriented programming,缩写:oop) (不是搞对象那个对象哈),其实我们的编程方式,不止有面向对象,还有 ...
- 从C++到Java --理解面向对象是关键所在
从C++到Java --理解面向对象是关键所在 本文将提供一个对这些概念的简明的解释,而不是提供一些深入的或者如何使用的问题.记住,这只是依据我对Java的经验带而提出的一些主要的差异. Java在虚 ...
- 4.C++深入理解 面向对象部分3
C++深入理解 面向对象部分 一.C++流的控制 1.1 输入输出流相关的类 输入输出重定向例子, #include <iostream> using namespace std; i ...
- 3.C++深入理解 面向对象部分2
C++深入理解 面向对象部分 一.面向对象深入部分 在前几天 360 笔试做下来,感觉自己会的难度还行,还没学过的就乱选了,算法题部分做出来运行结果也是对的,但是两个解答题一点都没见过,直接就跳过 ...
最新文章
- python基本语法语句-Python基本语句
- Nginx初学第一步
- 苹果iPhone被曝跟踪用户位置信息(图)
- 写给期待年薪百万的IT同学
- 详解使用fastboot为Android刷入原厂镜像
- a*算法流程图_学好流程控制结构轻松应对高考数学程序算法题
- Windows——Modern Standby(现代待机) S0改Suspend to RAM(待机到内存)S3睡眠解决方案(以机械革命F1 i5-11300H为例)
- PHP的memory_limit
- .net swf 上传组件
- java装箱_Java 装箱 拆箱
- Pandas一些小技巧
- Polyfill工作笔记001---简介
- ORM框架之Mybatis(六)mybatis通用mapper
- DirectX修复工具
- 《基于机器视觉的高压输电线路覆冰厚度检测》论文笔记
- Ubuntu阿里源镜像
- 解决Eth0网卡不存在的情况_wuli大世界_新浪博客
- Visual paradigm试用版绘制ER图时如何去水印
- 扫描二维码登入PC的工作原理
- 字符串转成正则表达式