2021-09-06

“面向对象”还是很难?3500字抽象概念具体化,轻松突破“万物皆对象”大关

前言:
有一天,我的好大哥问我,三年,你学了两年java,你对于它的核心思想面向对象有什么深度理解吗? 我说有啊,这事我贼熟
请添加图片描述

不走寻常路,只喜欢深入
大家好,我是三年,一个致力于和大家一起卷的技术up主

1.你觉得什么面向对象?

关于面向对象,这个问题其实很难述说,因为说浅,它其实就是那么回事,但往深了说,它贯穿着我们整个的java编程生涯,那么,当别人问你什么是面向对象之时,你会怎么说?
封装、继承、多态?
还是淡淡的说上一句装x神言***“万物皆对象”?***

不管是真的懂,还是假的懂,无论你说的是上面的哪一个,你的答案都不会错,但其答案的得分高低,还得从是否深入理解上面来判断

记得老师常说,类是抽象的,对象是类的实例,是类的印射

实际上,抽象概念只是在为人们徒增理解难度

2. 人们学习新东西往往会将熟悉的事务与之联系在一起

说实话,当老师说出抽象二字之时,让我真正理解面向对象使出了后撤步,有的人这时候就说了,类是抽象的这句话没错呀,对,这句话的确没错,这是它的本质,但就帮助人理解面向对象这一层面上而言,我认为他很它菜的离谱,别忙着反驳。先思考这样一个问题:

如果让你在一分钟内快速背下20个单词,你觉得你能背下几个?或者说,你会怎样选择怎样去做?

万能的三克油?还是根据词根来进行快速的记忆构成?

相信大部分跟我一样英语苦苦奔波在30分左右的小伙伴会果断选择中文的联想记忆法,而在联想记忆法中,我们往往会把比较熟悉的事或物与之联系在一起,其实这也是人对新鲜事物快速了解的一个本能,这样,就能快速完成对英语单词的记忆构建,到这相信肯定有人会奇怪,照你这么个说法,我倒要听听词根记忆和万能三克油有什么区别,在这里,我同样想问一个问题:

你觉得词根记忆的本质是什么?

我可以负责任的告诉你,这个虽然不是联想记忆,但本质上也是你对词根有所熟悉,你才会第一时间选择用词根记忆的方法去记忆,因为这东西对你来说更容易帮助你记忆单词,你对它的使用要比中文联想记忆更熟练,所以我想说的是:

3. 不要从抽象(比如类)出发,去理解面向对象

抽象的东西本身就是看不见摸不着的,要说我们对它很熟悉,那根本就是在瞎鸡儿扯淡,以这个点为出发点,只会让我们对于理解面向对象难度系数变高。 说了那么多,三年三年,该如何理解面向对象呢?什么又叫面向对象呢?

其实从我个人而言,我觉得从类出发这点很难改变,不管你是科班同学还是非科班同学,相信学到面向对象这一章之时,几乎所有老师都会首先给你引入类与对象的关系这一概念,这一引入哦吼,拐求

面向对象爱不成,从此java是路人

但这也是教学的无奈之举,这就跟老师叫你学习新的东西前预习是一个道理,预习的目的是啥,不就是为了让你对要学的东西有个大概印象,有初步了解嘛,所以教育没错,那咱就得自己想办法,俗话说的好,上有政策下有对策嘛,找对了方法,其实理解起来很简单

4. 选择绝对熟悉的人或物为出发点,进行面向对象理解

在这里,我们把类是抽象的概念丢掉,把它当作一个具体的,比如将你暗恋了四年的sb室友当作类,当作一个对象,他是一个具体存在的人对吧,他的手臂、他的腿 、他的五脏六腑,每一样,都是具体存在的,而这些东西,都是人身体的一部分(记住这个依赖关系)

手可以吃饭、也可以开车、还可以做很多事
腿可以走路,也可以夹在腰上,同样可以做许多事
再看其他的身体部分,肺负责呼吸系统,心脏负责提供血液,每一个部位都有它自己能干的事()
他们每一个都是个体,但相对于人这个大个体而言,他们只是一个小个体,前面我们说他们是人身体的一部分,说到这里,别急,现在我们同样以一个问题的方式,带大家理解这里面包含的真正概念

我要让你将你们学校当作一个人,把这个人做成一个项目,你能够做到吗?

首先,我们最初能够想到的,肯定是这个学校应该具备哪些功能对吧,学校有领导,他们负责管理这个学校,将教育做的更好,那么我们可否把他们当作我们人体的大脑,管理学校、做好教育,这是不是他们的功能?是你就点赞,不是你也点赞

然后学校有学生,学生只是负责学习吗?学生想要唱个爱你一万年、跳个857不行吗?学生能做的所有事,都是学生这个群体具备的功能,那么为了方便理解,我们将他学生的功能归类,学生主要负责为校园增添朝气、光彩,都说学生是学校的血液,这里我们就将学生当作人体心脏。

你们的学校有财务部吧,每年都催你交钱,有学生会吧,查寝这种事那不都归他们管,除了这些学校还设立许多部门,像食堂啊、教务组啊一堆的,他们都有自己专门做的事,我们统一将他看作人体的五脏六腑

好,现在学校和人体有了具体的一 一对应关系,你现在知道这个项目该怎么做了吗?还不知道?不知道的话我们再用通俗的话来解释解释

将学校当作一个人,这是不是我给你们提出的需求
将这个人做成一个项目,这是不是需要对需求进行分析(有哪些部位,有哪些功能),那么这两个合在一起,做成项目打包上线,这是不是就是一个业务,我们已经对他的整体构造十分清楚了,所以现在我们将他化作代码实现,你觉得能够写吗?

什么,你有一种无从着手的感觉?

有这样的感觉就对了,说明你对面向对象还没理解清楚。在这里,我们回到前面学习新事物,人往往会将所熟悉的联系在一块 这块,这个需求对于我们而言是陌生的对吧,我们要用熟悉的代码将他做出来,你要给我说代码也不熟悉咋办,我告诉你没有捷径,就只有不断地淦、淦、淦

将项目实现为代码,是将这个整体学校一股脑丢进去,还是先将领导者丢进去、然后再到学生?(这里我们尽量不复杂化,只以简单两个点来切入说明)

1. 直接丢入学校

假如我们丢入的是学校,这个项目是不是就是一个大个体,一个类、一个对象,接下来我们要完成他的功能,是不是需要在里面创造学生会、教务部、财务部门这些东西,这些小的东西是不是全部被他包含在里面,那么这个叫啥?这个就叫封装

2. 先丢入领导者和学生
我们先完成学生这些小个体,学生能做的功能,咱给他写上,然后又完成老师这些个体,他们能干啥,咱又给他写上,接着又继续设立财务部、设立学生会等等,直到将整个学校搭建完成,说到这里有的同学已经感觉出来了,这其实就是面向过程

那么我们回到直接丢入学校这点,我将这一个整体丢进去,那学生、老师这些呢,傻啊你,你缺啥你就写啥呗,我缺学生,我就把他写出来(赶紧回忆起前面的手和人体的关系),他相对学校是个小个体,和学下有被包含关系,所以我们将他单独分离出来,写一个学生类,两者就没有关系了嘛,依旧有关系对吧,学生,学生所能做的事都被包含在学校这个项目里面,那将他单独分离出来的目的是啥呢,你先想一下,你要是一个类疯狂往里面塞东西,整个程序就只有一个类,是不是可读性会比较差,鲁棒性比较低,哪里出了问题,你不得从头翻到尾去进行修改,你说你习惯这样,好吧,我只能说三字:NB!

所以,现在回到封装这个概念,你有没有理解呢?所有的小个体被包含在大个体里面,这是封装,小的个体他有他自己的事情,我们又将他看作一个大个体,他里面具备一些功能,执行功能的对象(小个体),看作一个整体,他也是封装,所以封装对于代码而言,具备很大的拓展性,我想写一个超大项目,我可以层层递进,给他一直写下去,直到将其完全完善,而这些个体

我们就将他称之为对象

现在让我们回到面向对象这个概念,你觉得他还模糊吗,还是那么高不可攀嘛,“万物皆对象”,说的其实就是这么个玩意儿,对了,至于他的三大特性,咱还有继承、多态没有提到,其实这些都不重要,你真正理解面向对象这个概念了,自然而然会突破这些问题(如果你想当一名程序员的话),因为好的代码一定是非常具备可读性的,而封装、继承、多态的这些东西的存在,本质上不过是为了让程序写的更加健壮的手段罢了,概念就只是概念,不要过分纠结于概念,动起手来,方是真谛,从代码中寻找答案吧

我是三年,一个致力于和大家一起卷的技术up主
如果本篇博客对你有所帮助的话,记得动动小手点赞哦

注:以上仅代表个人观点,希望能帮助小白,得到大佬指点
同时 , 禁止抄袭!!!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用python中的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字中含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
06-03

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值