【2015】对面向对象的理解
1、什么是面向对象语言
面向对象语言(Object-Oriented Language)是一类以对象作为基本程序结构单位的程序设计语言,指用于描述的设计是以对象为核心,而对象是程序运行时刻的基本成分。
面向对象语言很多,如一直高居世界编程语言排行榜的Java、C#、C++、Object-C、PHP等等。
2、面向对象的理解
相信很多程序猿,特别是新手,都对面向对象都没有去理解过,但都用过而且可能用的还很熟。
最近面试一位刚入行不久的新手,也有半年多的工作经验了,也做过项目,其实也算不上新手,问其面向对象语言的三个基本特征之一,其回答竟然是“开源”,真是让我大吃一惊。
或许懒、或许感觉这些抽象的文字难以学习理解、或许认为工作中用不到,但我想这些最基本知识的还是要知道的,不要工作3年,积累下的经验可能3天都不到。
以下是个人对面向对象的理解:
什么是对象? 引用我的一位大学老师的说:一切都是类、一切都是对象。
现在大部分的面向对象语言是基于类的。
他的算是启蒙老师吧,很风趣的一位老师,在学校代课教我们时,最经常挂在嘴边的就是这句话(只要他的课这句话最少要听到10次以上)。以至于现在想到他,脑海里第一反应就是这句话。
除了红字以上是我的废话,可以忽略。
2.1、对象
一切都是对象
举例:
将一栋房子 比作一个对象 【房子:对象】。 从图上也可以看到这是一种新类别的房子【房子:类-Class】 如图
这尼玛就是对象,那对象应该包含什么呢,相信只要学过,面向对象的肯定都知道面向对象的三项基本特征:封装、继承、多态。
2.2、对象的基本特征一:封装
封装 将各个独立功能设计成一个个独立的单元,形成一个有规划设计的整体,减小耦合,提高内聚,避免牵一发而动全身,方便对程序的修改。
还是用房子来解释,上面已经有房子的基本类型了,大概样子就是那个熊样。
举例:
房子空间很大,但是如果男男女女有十几人住,而且就一间屋子的话,很不方便,如果吃喝拉撒一个屋,那就成难民营,更何况晚上灯一黑,立刻就乱套了,你懂得。
这样,就要想法解决:
工人们出动了,把房子折腾折腾给分成楼上楼下两层,并说明了,一楼吃喝玩乐、二楼休息; 楼上楼下工人们又分别给隔离出几个房间,就把房子这样改造好了,然后男男女女们过来了,大家就可以各自的房间,做爱做的事,而且不会影响到其他了。
这样一个简单的封装就完成 【房子:类-class】是对 【房子两层:部分类-partialclass】的封装 ;【房子两层:部分类–partialclass】是对【房间:函数/方法-function】的封装。
2.3、对象的基本特征二:继承
继承 发生在两个对象之间,继承对象可以肆意的使用被继承对象的一些属性、方法&函数等;使代码重用,减少编码量,间接减少维护成本。
仍然是房子。
工人们已经给分好楼、做好房间了。这时有个人觉得房子应该有个紧急避难所。好吗,尼玛房子都折腾的差不多了,尼玛告诉工人要紧急避难所,工人说这不好搞哇。可以这人有钱,任性,
发话了,要搞必须搞,不好搞也要搞,而且狠狠的搞。工人们就为难了,难道再去给盖一栋有避难所的房子?大家集思广益最终,房子其他都还用着,再给挖个地下室。于是新房子诞生了。
一个简单的继承就出现了 【房子:基类-baseclass】被【新房子:扩展类-ExtensionClass】继承。
2.4、对象的基本特征三:多态
多态 不同的场合做出不同相应,有着不同的特点,可以说是封装的一个实现。
房子已经成型,要对房间进行装修了,工人想法很简单都按照一种样式来,简单方便快捷。但是住房的男男女女们有意见,这就是尼玛客户,各种千奇百怪的想法,有要在承重墙
上开扇窗户的,有要在卫生间装摄像头的、要在厨房里装空调。工人们对能实现就开始开工了,对房子的窗户、地板、墙、楼梯等进行装修。这样装修完房子内部就丰富起来了。如图
“一种多态的展现”就出来了:【房子:类-class】 通过 【窗户、地板、墙、楼梯等:属性-Property】体现多态
2.5、面向对象
最后的总结,前面其实是对象的说明。现在来说一下面向对象,像开篇提到的一切都是对象。那面向对象有是怎么回事呢难道说是面向一切,真这么理解也不为过。
面向对象是一种对现实世界理解和抽象的方法,对做程序来说,就是让程序人员,用一种思维更好的看待万物,在编程中的本质。 OO