首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

面向对象-类和对象

“面向对象编程”是我们经常听到的一个说法,但是“面向对象”的概念很多人却不是很理解。

面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构。为什么要使用面向对象编程这样的编程架构呢?在学习编程语言的初级阶段,我们一般会在编写代码时按照自己的逻辑,一步一步地编写代码。一个数传入哪个函数,返回什么结果,接下来执行什么,都是事先想好并按照一定的数据流逻辑编写。这样的代码编写方式被称为“面向过程编程”((Procedure Oriented Programing,POP)。面向过程编程看起来好像不错,符合人类的思维逻辑,单一页面的代码来看,前面做了些什么,之后要做什么都很明了。那为什么在有这么“清晰”的编程模式之后我们还会提出面向对象的概念呢?

面向过程编程当然是有问题的,这里我说一下我在实际运用中觉得需要使用面向对象编程的原因:

可维护性低:在编写完代码之后,如果遇到需求更改需要修改某一个部分,则要找到某一个代码文件,根据这一整页代码的逻辑再去进行修改。随着时间推移,功能增多,代码文件也越来越多,能不能想起(找到)需要修改的那一部分代码在哪儿本身就是一个问题。更别说要是业务逻辑变动较多的话,多代码文件的修改工作量也是巨大。

协同工作能力低:在大型的编程工作中,业务逻辑常常被分为很多部分,由不同的人来完成,最后进行整合。大家设想一下面向过程的协同工作,ab四个人分别编写不同的代码,a没有写完之前b不能写,因为b不知道a写到后面输出一个什么变量,变量名称也无法得知。唯一办法就是事先约定好各种输入输出的变量,导致多人协同编程效率大大降低。

问题当然不止这些,但说再多,目的就是告诉大家,面向过程编程的模式有他的局限性,所以才会提出面向对象编程。(面向过程变成的各种局限性建立在项目的难易程度本身,不同项目使用的编程架构不同,并不是说面向对象编程适用于任何项目)

那么,面向对象到底是怎样的概念?面向对象包含三个重要的部分,封装、继承和多态。而今天我们就来了解一下面向对象封装里面关于类和对象的知识。

什么是类和对象?

上面这张图的背景,问你是什么?你会说是各式各样的糖果,没错,我们在说诸如“石头”,“鸽子”这样的词语的时候,指代的,其实是一类物体,将手中的“石头”扔进一堆石头里面,再让你找回来就有点难了,因为你不知道刚才那颗石头的特征是什么,所以无法在这么一大堆石头里面再把它分辨出来。

在面向对象编程中,我们将有着或相同或不同特征的一类物体抽象,叫做“类”(class)

上图背景中的物品,叫做“糖果”当然是没问题的,可单挑其中一种来,让你描述这一颗糖果的特征,什么形状,什么颜色,什么味道。你会发现他与其他的“糖果”可能并不一样,他可能比其他糖果长一点,可能比别的糖果圆,可能是红色白色黄色,味道也不尽相同。这样看来,单用“糖果”这样的词去和别人描述,别人不一定能知道你指代的具体是哪个糖果,所以我们可能会说:“那是一颗圆形的粉红色的水果味儿的糖果”。这样,我们就能较准确地描述出了我们真正指的那一课糖果(糖果的特征当然还能有其他的,但是这就要看我们对抽象物体描述的精确度的要求了)。在面向对象编程中,我们就可以把单独一颗有独立特征的糖果看做是之前“糖果”类的一个“对象”(object)

说到这里,我需要指出一点,可能会有人觉得“糖果”对象的特征是在我们指出某一课糖果的时候才存在的,其实并不是,糖果的特征是一直存在的(所以糖果“类”中也存在糖果特征的定义),只是我们抓起一把糖果抽象去看时(糖果类),并不在乎糖果的具体特征,所以不去详细说而已。当我们检出其中一颗糖果去描述时,其实只是为他的特征赋予了一个值。也就是说,我们在将一类物体抽象成类的时候,就已经需要将他会有的特征考虑进去了,等到我们实例化该类的对象的时候(捡起某一糖果)才去描述该对象(糖果)的特征

总结一下,糖果是一“类”,糖果这一类有形状,颜色,味道等特征,且不同糖果特征值不同(成员变量、类方法不同),独立的一颗糖果是糖果类的一个对象!

嗯,这就是面向对象。仔细想想,其实世间万物都可以抽象成类和对象这样的概念

这样,就简单的说明了类和对象的关系,至于在实际的代码中怎么去编写需要大家自行去了解具体语言的编码语法。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180208G0NPL000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券