前言:
面向对象时Java中十分重要的一个概念,很多工作多年的程序员也很难说清楚什么是面向对象。我在这里也只是阐述一下当下我对面向对象的理解。
也就是说,我的理解并不一定是正确的,而且随着以后我对面向对象的理解的改变,这篇文章的内容也会改变。(也可能我会忘记更改)
什么是面向对象?
面向对象的本质是什么?
面向对象的本质是一种思想。
什么是思想?
思想是一个人面对问题时选择解决方法的指导原则。
比如:
要解决一个问题:赚钱。
不同人会选择不同的方法:
-
选择创业赚钱
-
选择打工当社畜赚钱
-
选择烧杀抢掠赚钱
这些方法都能解决赚钱的问题,但为什么不同的人会选择不同的方法?这是因为不同的人选择方法时,思想不同,有的人敢拼敢闯、不怕失败,他就更偏向于创业赚钱;有的人追求安稳,他就更偏向于打工赚钱;有的人没有道德底线,心狠手辣,想快速赚钱,那么他就更偏向于烧杀抢掠赚钱。
当我们遇到困难时,我们的思想会决定我们选择什么样的方法去解决。这就是思想的作用。
面向过程的思想和面向对象的思想是什么?
编程的目的是解决问题,解决问题需要设计方法。而在编程中设计算法有两种指导思想,就是面向过程和面向对象。
面向过程的思想和面向对象的思想有什么区别?
面向过程的思想在设计算法(或者是代码逻辑)时,一般遵循走一步看一步,兵来将挡水来土掩,缺什么添什么的原则。
面向对象的思想在设计算法(或者是代码逻辑)时,一般遵循着眼大局,分割分配的原则。
举例:甲方提出任务:移走一座山
方法一:
思想:面向过程
概述:
确定移山需要的技术,带上需要的人,上去就干,需要驱赶动物就驱赶动物,需要砍树就砍树,需要爆破就爆破,需要运输就运输,直到最后把山移走。
说的比较模糊,但毕竟面向对象时主要对象。因此,面向过程的内容大致说一下就行,重点还是放在面向对象上
方法二:
思想:面向对象
概述:
先分析分割任务,然后设计如何分配,设立各种部们精准分配任务。
设计三个阶段分配给三个部门:
-
准备阶段,设立准备部门:
分配给准备部门任务并设立相应的部门分配工作:
-
遣散民众:设立民众部门
-
处理外来旅客:设立旅客部门
-
驱散工作
分配给安保人员,设计安保人员的属性并设计其各种方法去完成分割后的具体任务
-
警示工作
分配给工人,设计工人的属性并设计其各种方法去完成分割后的具体任务
-
宣传工作
任务转接给辅助部门
-
-
处理本地居民:设立居民部门
-
拆迁工作
分配给拆迁大队,设计拆迁大队的属性并设计其各种方法去完成分割后的具体任务
-
沟通工作
转接给辅助部门
-
-
-
驱赶动物:设立动物部门
-
分类工作
分配给专家,设计专家的属性并设计其各种方法去完成分割后的具体任务
-
转移工作
分配给转移大队,设计转移大队的属性并设计其各种方法去完成分割后的具体任务保护工作
-
捕杀工作
分配给捕杀大队,设计拆迁队的属性并设计其各种方法去完成分割后的具体任务
-
-
移走树木:设立林木部门
-
向政府申请:
转接给辅助部门
-
分类工作:
分配给专家,设计专家的属性并设计其各种方法去完成分割后的具体任务
-
移植工作:
分配给工人,设计工人的属性并设计其各种方法去完成分割后的具体任务
-
砍伐工作:
分配给砍伐大队,设计砍伐大队的属性并设计其各种方法去完成分割后的具体任务
-
-
-
移山阶段:设立移山部门:
-
挖土工作:
分配给挖掘机大队,设计挖掘机大队的属性并设计其各种方法去完成分割后的具体任务
-
爆破工作:
分配给爆破大队,设计爆破大队的属性并设计其各种方法去完成分割后的具体任务
-
运输工作:
分配给货车大队,设计货车大队的属性并设计其各种方法去完成分割后的具体任务
-
-
收尾阶段:设立收尾部门:
-
工资发放;
分配给文职人员,设计文职人员的属性并设计其各种方法去完成分割后的具体任务
-
设备安置:
分配给工人,设计工人的属性并设计其各种方法去完成分割后的具体任务
-
-
辅助全阶段:设立辅助部门
-
设立文宣部门:
-
宣传工作
分配给文职人员,设计文职人员的属性并设计其各种方法去完成分割后的具体任务
-
-
设立沟通部门:
-
内部沟通:
分配给文职人员,设计文职人员的属性并设计其各种方法去完成分割后的具体任务
-
外部沟通:
分配给文职人员,设计文职人员的属性并设计其各种方法去完成分割后的具体任务
-
-
设立政府交接部门:
-
与政府完成各种许可上的申请:
分配给外交人员,设计外交人员的属性并设计其各种方法去完成分割后的具体任务
-
-
设立统计部门:
-
统计工程进度:
分配给文职人员,设计文职人员的属性并设计其各种方法去完成分割后的具体任务
-
统计资金流动:
分配给文职人员,设计文职人员的属性并设计其各种方法去完成分割后的具体任务
-
统计人员信息、人员变动
分配给文职人员,设计文职人员的属性并设计其各种方法去完成分割后的具体任务
-
-
思维导图:
这样,通过面向对象的思想设计的方法就完成了。(我不是专业移山的,有些地方分割的比较详细,有些地方分割的就比较草率)
总结:
面向过程思考的是怎么解决问题。
面向过程思考的是怎么分配问题和谁能解决问题。
Java面向对象的知识:
Java基础编程基本分为Java基础程序设计和Java面向对象。
Java基础程序设计的知识是数据类型、输入输出、流程控制和数组等。
Java面向对象的知识是什么?
简单来说能够把使用面向对象思想设计的方法变成Java代码的知识就是Java面向对象的知识。
因此,Java面向对象的知识包括:
-
类和类的成员
属性、方法、构造器、代码块、内部类
-
面向对象的特征:
封装、继承、多态
-
关键字
this package import super static final interface(接口)等
学完以上的内容Java面向对象的内容也基本就学完了。
面向对象和面向过程哪个更高级?
很多同学可能总是听别人说面向对象更高级,但自己写代码时却感觉面向对象好麻烦,完全感觉不到面向对象比面向过程好用到哪里。
以下为我的观点:
-
面向对象和面向过程是同级的
面向对象和面向过程都是一种思想,没有高低之分。
-
大学生编程阶段大部分时间面向过程的确更好用
百行之内,过程绝杀。
千行之内,不分伯仲。
千行之上,对象为王。
以上就是面向对象和面向过程在代码编写时的优势大致比较。总体上来看,代码量越大面向对象的思想更占优。
同时,也因为大学生阶段很多学生都没有机会一次性写千行以上的代码(个别大佬除外),所以对于大学生来说,的确大部分时候会觉得面向过程的思想更加方便。
-
选择用面向对象还是用面向过程看自己的需求
究竟是选择面向对象的思想还是选择面向过程的思想并不是看我们用哪个更顺手就用哪个,而是看我们的需求。比如说:如果你是机械专业,顺道学了一点C语言,那就老老实实选择面向过程,机械专业本身的性质就决定你不会写过长的代码。还是用面向过程更加方便。
如果你是计算机专业并且和我一样选的Java后端开发路线,那么无论你多么讨厌面向对象,你也必须选择面向对象编程。除非你是学着玩的,那 . . . 你随便选,爱咋选择就咋选择,就当是培养兴趣了。
我学会了类的相关知识是不是就学会了面向对象?
不是。
我也能用Java类的知识写一个面向过程设计的程序。类不等于面向对象。
学会面向对象是指你会用面向对象的思想设计代码逻辑,然后用类相关知识将代码逻辑实现为实际的代码。并且面向对象的程序要有面向对象的特征。