您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

漫画:如何给女朋友解释什么是面向对象编程?

时间:2019-07-31 17:05:05  来源:  作者:

周末午后,我正在愉快的打着王者荣耀,五杀在即之际。女朋友拿着一本我看过的《面向对象编程》过来找我。

什么是面向对象?是要面向我写代码吗?

漫话:如何给女朋友解释什么是面向对象编程?

 

不是啦,这个面向对象的对象不是你这个对象啦。

漫话:如何给女朋友解释什么是面向对象编程?

 

此时,我突然感受到了一股莫名的杀气。

什么?你还有其他对象吗?有我好看吗?有我瘦吗?不对。你不能有其他对象。

漫话:如何给女朋友解释什么是面向对象编程?

 

什么是面向对象?

面向对象,英文名字叫Object Oriented,是一种软件开发方法。是和面向过程相对应的。

别给我拽英文。给我详细说说,说不明白今天就没完。

我有点饿了,要不然你给我做点饭,我慢慢的详细给你讲吧。

漫话:如何给女朋友解释什么是面向对象编程?

 

我现在就想听你给我讲,咱们直接点外卖吧,别自己动手做饭了。

漫话:如何给女朋友解释什么是面向对象编程?

 

其实,对于吃饭这件事儿,就可以分为面向过程吃饭和面向对象吃饭。自己亲自下厨就是面向过程,点外卖就是面向对象。

在面向过程的吃饭中,我们想要填饱肚子,需要自己亲自下厨把这顿饭做出来,那么,我们就需要先想好吃什么、然后去买菜、洗菜、洗米、蒸饭、炒菜等等一系列的事情。

pubic void 做饭(){
 制定菜单();
 买菜();
 洗菜();
 洗米();
 蒸饭();
 炒菜();
}

 

那么,你说和点外卖相比,自己做饭有哪些缺点啊?

漫话:如何给女朋友解释什么是面向对象编程?

 

那还用说,麻烦呗。

漫话:如何给女朋友解释什么是面向对象编程?

 

的确,面向过程编程也一样,由于想要完成做饭这件事,需要自己定义很多个方法。除此之外,还有很多遇到很多其他问题,比如:

我不想吃米饭,我想吃馒头。

上次买的菜家里面还有,不需要去买菜。

中午吃剩下的菜家里面还有,直接热一热就可以吃了。

这次去的一家超市提供洗菜服务,不需要我们自己洗菜了。

以上这些突发事件,在编程中就叫做需求变更或者新的需求,这种事情发生是必然会发生的。

那么,有新的需求了怎么办,上面这种自己动手做饭的场景,就只能重新拼凑咯。

对于程序员来说,就需要通读代码,找出可以复用的方法,然后重新调用,不能复用的就重新写一个。时间久了,方法就会越来越多,系统维护越来越复杂。

面向对象,其实就是我们通过点外卖的方式来“做饭”。我们知道我们需要一顿饭,我们只需要打开外卖软件,在里面选择我们需要的菜品然后下单就可以了。我们不关心饭店做饭的过程。想吃什么点什么,家里来人了就再下一个订单,不想吃米饭了,想吃馒头了,也可以给饭店打电话,让他们把米饭换成馒头。

 

外卖软件.点餐(红烧肉,糖醋鱼,可乐一瓶).送达时间(一小时后).备注(可乐加冰)

 

所以,通过面向对象的方式“做饭”,就像上面的代码一样。

 

哦,我明白了,面向对象就是把本来可能需要自己做的事情交给别人来做?对于我来说,外卖软件就是个对象,我再面向他“做饭”,其实是他帮我做的。

漫话:如何给女朋友解释什么是面向对象编程?

 

额、你说的也对,也不对。在这个场景中,确实可以把外卖软件当做是「对象」。其实,在面向对象编程中,抛弃了函数,想要实现一个功能不再是通过函数的叠加调用实现的了。而是通过对象。

漫话:如何给女朋友解释什么是面向对象编程?

 

对象就是对事物的一种抽象描述。现实世界中的事物,都可以用「数据」和「能力」来描述。

比如我要描述一个人,「数据」就是他的年龄、性别、身高体重,「能力」就是他能做什么工作,承担什么样的责任。

描述一个外卖软件,「数据」就是他包含的菜品,而「能力」就是他可以点菜。

什么是封装?

我们把「数据」和「能力」组合成一个对象的过程就叫做「封装」。

封装的结果就是可以有一个类,通过这个类我们可以获得一个对象。然后我们就可以通过给这个对象下命令,让他执行自己的「能力」。

除了把「数据」和「能力」封装成一个「对象」更加方便使用以外,还有啥其他的特点么?

漫话:如何给女朋友解释什么是面向对象编程?

 

封装只是面向对象的第一步,目的是把现实世界的东西抽象成对象。面向对象真正有威力的地方是「继承」和「多态」。

举一个不是很恰当,但是女朋友比较容易理解的例子。

我们使用外卖软件点餐,当我们第二次去某一家店时,外卖软件会提示你上一次你在这家点了什么,你可以点击<再来一单>把上次的菜品直接加到购物车中,这就是「继承」。而在购物车中的物品你可以直接付款下单,也可以把增删和修改菜品。这就是「多态」。

什么是继承?

在面向对象编程中,当两个类具有相同的特征(属性)和行为(方法)时,可以将相同的部分抽取出来放到一个类中作为父类,其它两个类「继承」这个父类。继承后子类自动拥有了父类的部分属性和方法。

通过继承创建的新类称为“子类”或“派生类”。

被继承的类称为“基类”、“父类”或“超类”。

比如:

狗{
 吠();
}
牧羊犬 继承 狗{
 放羊();
}

上面的例子中,狗类是父类,牧羊犬类是子类。牧羊犬类通过继承获得狗类的吠()的能力,同时增加了自己独有的放羊()的能力。转换成JAVA代码如下:

public class Dog{
 public void bark(){
 System.out.print("旺旺旺");
 }
}
public class HerdingDog extends Dog{
 public void herd(){
 System.out.print("放羊中....");
 }
}
public class Main(){
 HerdingDog dog = new HerdingDog();
 dog.bark();
 dog.herd();
}

 

什么是多态?

同一操作,作用于不同的对象,可以产生不同的结果,这就是「多态」。通常说的多态都是指运行期的多态,也叫动态绑定。

要实现多态,需要满足三个条件:

有类继承或接口实现、子类重写父类的方法、父类引用指向子类的对象。比如:

犬科动物{
 吠();
}
狗 继承 犬科动物{
 吠(){旺旺旺}
}
狼 继承 犬科动物{
 吠(){嗷嗷嗷}
}

 

狗和狼都是犬科动物,拉来一直犬科动物,如果它你叫的话,你可能没办法直接分辨出他到底是狼还是狗。只要他真正的叫出来的时候,你才知道。这就是运行时多态。转化成Java代码如下:

public class Canidae{
 public void bark();
}
public class Dog extends Canidae{
 public void bark(){
 System.out.print("旺旺旺....");
 }
}
public class Wolf extends Canidae{
 public void bark(){
 System.out.print("嗷嗷嗷....");
 }
}
public class Main(){
 Canidae canidae = new Dog();
 canidae.bark();
 Canidae canidae1 = new Wolf();
 canidae1.bark();
}

 

这样,就实现了多态,同样是Canidae的实例,canidae.bark调用的就是Dog类的方法,而canidae1.bark();调用的却是Wolf的方法。

有人说,你自己定义的对象,定义的时候不就知道canidae到底是什么类的对象了么,这个其实并不决定的,很多时候我们可能不知道,原因是,对象可能并不是我们自己new出来的,比如Spring的IOC。

奥,那我终于知道什么是面向对象编程了。

漫话:如何给女朋友解释什么是面向对象编程?

 

嗯,对了,外卖点好了么?

漫话:如何给女朋友解释什么是面向对象编程?

 

呃....

漫话:如何给女朋友解释什么是面向对象编程?

 

(全文完)

文章来源:https://dwz.cn/gd0GXLFX

作者:漫画编程



Tags:面向对象编程   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
面向对象:Object Oriented Programming,简称OOP,即面向对象程序设计。类(Class)和对象(Object)类是用来描述具有相同属性和方法对象的集合。对象是类的具体实例。比如,学生都有...【详细内容】
2021-12-22  Tags: 面向对象编程  点击:(9)  评论:(0)  加入收藏
函数式编程已经存在了60多年,但是到目前为止,它一直都很小众。只有像Google这样的改变游戏规则的企业才会依赖函数式编程,普通程序员对此几乎一无所知。 这种情况很快就要被改...【详细内容】
2020-11-05  Tags: 面向对象编程  点击:(109)  评论:(0)  加入收藏
何为面向对象编程面向对象编程(Object-oriented Programming,缩写:OOP)是软件工程中一种具有对象概念的编程范式(Programming Paradigm),同时也是一种程序开发的抽象方针,与之...【详细内容】
2020-10-24  Tags: 面向对象编程  点击:(80)  评论:(0)  加入收藏
面向对象编程,Object Oriented Progamming,OOP。1、类和对象面向对象编程的两个重要概念:类(class)和对象(object)。类是抽象的概念,对象是具体的东西。在面向对象编程的世界中,一切...【详细内容】
2020-08-17  Tags: 面向对象编程  点击:(71)  评论:(0)  加入收藏
本节是第四讲的第十四小节,上一节我们为大家介绍了JavaScript对象的基础概念,本节为大家介绍JavaScrip面向对象编程(OOP)以及构造函数等概念。面向对象的程序设计(Object-orie...【详细内容】
2020-08-04  Tags: 面向对象编程  点击:(64)  评论:(0)  加入收藏
现如今面向对象编程的使用非常广泛,本文我们就来探讨一下Python中的面向对象编程。作者 | Radek Fabisiak译者 | 弯月,责编 | 郭芮出品 | CSDN(ID:CSDNnews)以下为译文:Python支持...【详细内容】
2020-03-05  Tags: 面向对象编程  点击:(41)  评论:(0)  加入收藏
关于POP和OOP的解释我想网上的资料已经数不胜数了,但是基本无非都是在摆理论。刚好本人既写过面向过程(POP)的C程序也写过面向对象(OOP)的C#程序,甚至是万物皆对象的python程序。...【详细内容】
2019-09-26  Tags: 面向对象编程  点击:(122)  评论:(0)  加入收藏
周末午后,我正在愉快的打着王者荣耀,五杀在即之际。女朋友拿着一本我看过的《面向对象编程》过来找我。什么是面向对象?是要面向我写代码吗? 不是啦,这个面向对象的对象不是你这...【详细内容】
2019-07-31  Tags: 面向对象编程  点击:(271)  评论:(0)  加入收藏
1:基本概念面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式。这句话的意思是:每个对象能够接受信息,处理数据和发送消息给其他对象;这就意味着在这个编程模式下,每...【详细内容】
2019-07-26  Tags: 面向对象编程  点击:(325)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条