我相信每一个想学习编程或者经历过编程实践的人,在刚开始的时候都会遇到一些沟沟坎坎,尤其是对编程里面的一些概念,比如说Java语言是面向对象的、C语言是面向过程的编程语言,Java和C都是编译型语言,JavaScript和Python都是解释性语言……我相信很多新手对这些对象、编译、解释等等这些概念都一知半解,如果你会有这样的疑问,那么不妨读下去,或许会有不一样的收获。
或许你会不自觉的发现接触到一门编程语言之后听过最多的就是“对象”,因为随着编程语言的发展,几乎市面上所有主流的编程语言都宣称自己的面向对象的编程语言,就连上古时期的C语言都能使用面向“对象”设计方法进行编程,怪不得很多程序员都很晚找到媳妇,难不成跟编程语言里面都有“对象”这件事有关,那究竟什么是对象,有该怎么去面向对象呢。
所谓对象,实质上就是指“事物”(也包括人或者物)在程序设计语言中的表现形式,可以是任何东西,例如,我可以把家里养的一条狗在编程语言中定义成一个对象:myDog,我的这条狗呢又有明显的特征,它的颜色是黑色的,我平时叫它的小名旺财,它最近吃的太多,长胖了,除了这些,它还能执行一下动作比如能汪汪叫、睡觉、看家、摇尾巴;而我定义的这个对象myDog的特征(如颜色,小名、体形)就叫做属性,而那些动作则被成为方法,在现实生活中,相似对象之间往往都有一些共同的组成特征,例如麻雀和老鹰都具备鸟类的特征,因此他们可以被统统成为鸟类,在面向对象程序设计中,“类”实际上就是对象的模版或者配方,“对象”这个词,有时候在程序设计过程中也叫做“实例”,所以我们就可以说麻雀是鸟类的一个实例,我们可以基于同一个类创建出许多不同的对象,因为“类”更多的是一种模版,而“对象”是在这些模版的基础上被创建出来的实体。
面向对象和面向过程编程思想之间的区别是什么呢,像要理解他们之间的区别,就要从程序的本质来入手,程序的本质是:程序=指令+数据;所谓面向过程,就是以指令为中心,围绕指令组织数据的编程理念;而所谓的面向对象,就是以数据为中心,围绕数据组织指令的理念展开编程,或许你一定被这段话蒙蔽了,没关系,看下面的例子,或许你就豁然开朗了,
比如我从冰箱拿饮料要做这件事,面向过程要定义三个分离的函数:f1(我的右手,冰箱):我右手打开冰箱;f2(我的左手,饮料):我左手拿出饮料;f3(我的右手,冰箱):我右手关上冰箱。面向对象就是定义一个对象"我",我有两个属性:左手,右手,三个方法:打开冰箱;拿出饮料;关上冰箱。这三个方法中,可以直接通过self.左手,self.右手去实现,这是我见过的面向过程和面向对象编程理念最直观的一个例子,是不是一下子就明白了呢。
面向对象的编程理念在后期维护、开发效率、扩展性上有着非常重要的优势,所以理解或掌握面向对象的程序设计风格是我们掌握编程技能的最基本的素质,面向对象有着三大基本特性:封装,继承,多态。
所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏,以一个MP3作为一个对象,那么作为该对象的用户,我需要MP3上有按钮、显示屏这样的接口才能播放音乐,至于他们内部是怎么工作的,我并不清楚,而且大多数时候,我也不会不在乎这些,换句话说,这些接口的实现对我来说是隐藏的。
所谓继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
很多时候内容的产生是我们人的认知局限,使得我们不得不用比喻或者打比方的方式,才能思考和接收新事物或者新概念,而这种比喻或者打比方就成了我们认识新事物和新概念的阶梯,但是像的意思是——不是,等我们真的理解了这一点的时候,我们也就真的理解了新事物。
本文来自企鹅号 - 春天之家媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - 春天之家媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。