说文解字-JAVA工程师技能分布系列一(JavaSe:面向对象)

来源:互联网 发布:安装linux u盘坏了 编辑:程序博客网 时间:2024/06/05 18:06

在软件学中,对程序的分类有三种:面向过程编程,面向数据编程,面向对象编程。

此处仅仅针对面向对象编程做自己的理解和记录,欢迎留言讨论。

在百度百科中对面向对象思想的描述是这样的:面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为一下几类:系统中一切事物皆对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象间的静态关系;消息传递是对象之间的动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列。

题外话:最开始对面向对象的定义是专指在程序设计中采用封装,继承,多台和抽象等设计方法的设计思想

现在的面向对象相比当初,范围更广,涉及面向对象分析(OOA),面向对象设计(OOD),面向对象编程实现(OOP);

在百度百科的描述中出现的名词:对象,对象的属性,对象的方法,类,实例,封装,继承,消息传递

既然是面向对象,首先要理解什么是对象?

一个软件或者产品的出现,一定是为了解决现实中某一方面或者一类问题而产生的,那么在解决问题的过程中一定会对应到现实中的某些事或物(比如说,一个病人去医院找某个医生看病,这里的一个病人,某个医生,去看病的这个医院都是实实在在存在的一个对象),所以,我理解的对象就是参与到解决某个问题的过程中必须存在的所有事物。

什么是类?

有句俗语:人以类聚,物以群分。个人理解,这里的类与编程语言中所说的类大致是一个意思。就是将具有相同特性和能力(暂时不说属性和行为)的对象抽象出来,统称为类。比如上面说到的医生就是一个类:医生类,这个类具有他们具有让病人腰不酸,腿不疼的能力等。

什么是实例?

实例描述的是类和对象之间的关系:就是实实在在存在的,可以代表这个类的属性和行为的实体,通过这个实体就可以明白这个类具体的定义。一个对象(或多个对象)就是某一个类的实例。

属性和方法?

类具有属性和方法。属性是描述状态的抽象,一个医生有他的姓名,年龄,科室,坐诊时间等等,通过这些描述就可以唯一确定这个医生就是这个医生了;行为是描述操作的抽象,这个医生能够开处方,能够看检查报告,还能做手术,这些行为描述的是这个医生能干什么。总之,通过属性和行为的描述可以唯一确定一个对象,且这个对象有什么,能干什么。

既然面向对象是一种程序设计思想,那就应该有它的特征。

面向对象编程的特征:封装,继承,多台,抽象

封装:

重点在“封”,所谓封,即密闭,使跟外面隔绝。那么放在程序中理解的话就是使对象的属性和行为与外面隔绝。仅对外提供接口。之所以要这样做,是因为封装起来的代码,实现等等,在外部是不能随意修改的,调用者也不需要知道内部的具体实现,只需要知道通过这个调用能够达到什么目的。

总之,封装能够做到提高代码的安全性和简洁性,甚至做到复用。

继承:

继,连续,接着的意思;承,接受的意思。简单的理解就是生活中我们继承遗产的意思。对应到我们的面向对象,那就是一个对象从它的父辈那里得到父辈的可被继承(私有的除外private)的属性和行为。当然,子类是可以有自己特殊的属性和行为的,也可以改变从父类继承得到的属性和行为。继承的主要目的就一个:代码复用。

多态:

态,状态,结果的意思。多态的意思就是在前提条件相同的情况下,得到不止一种结果和状态。在程序实现中的定义就是相同的事物用同样的参数调用相同的方法,得到不一样的结果。结合上面说到的继承,从定义中可以看到,正是因为有多态的机制,所以也曾强了程序的可扩展性和可维护性。这么好的东西,那要怎样实现多态机制呢?实现多态其实就是在一个继承结构中使用同一个逻辑实现处理不同的对象,然后得到不同的行为执行结果。通过描述不难看出在java中要实现多态,必须有继承关系的存在,同时在子类中还要根据需求重写父类的方法实现,这样在调用多态方法的时候才会调用到子类方法的实现,还要将子类引用指向父类对象,父类对象中其实是存放的子类引用,这样在调用多态方法的时候,才会调用到子类的实现,从而实现多态。明白了多态实现的原理,可以通过哪些手段来实现多态呢?有两种实现方式:继承和接口。首先来看继承,在继承结构中,一个父类可以有一个或多个子类,子类可以重写父类的方法,这样所有子类都重写父类的方法。当一个父类对象在调用该方法的时候会根据对象中存放的引用去判断到底是哪一个子类或者就是父类本身发出调用指令,然后去调用对应的类里面的实现。接口的实现,是指将这个接口的引用指向实现了这个接口的类,在运行的时候根据对象引用的实际类型来执行对应的方法。还有一种多态实现的说法是:方法的重载和重写,说的都是一回事,重载对应的就是接口的实现,重写对应的就是通过继承的方式实现。同时,继承的实现又叫做动态多态,接口的实现又叫做静态多态。所谓动态多态的意思就是只有在程序运行期间通过动态绑定的方式才能确定对象中引用指向的具体类型是什么,才能确定应该调用谁的实现;而静态多态是在程序编辑的时候就已经明确的指明了引用所指向的实现类,能够确定调用谁的实现。在java中,继承是单继承,只能为一组相关的类提供一致的服务接口;而接口可以多继承(或者说多实现),可以对相关或不相关的接口进行组合与扩充,然后对外提供一致的服务接口。相对继承来说,接口有更好的灵活性。纵使如此,个人还是认为,静态多态与动态多态之间没有谁更好的说法,比如说个人觉得继承的实现方式比接口在结构上更清晰,逻辑上更浅显易懂。只有在实际应用中,具体问题具体分析,灵活运用才能创造出优雅的代码。

抽象:

暂且把抽象归入到面向对象的特征里面,因为也有说面向对象的特性不应该有抽象的。因为我不是一个哲学家,也不写书,只是希望明白有这个东西,它是什么,能干什么和怎么用就ok了。

抽象,重点在抽,在新华字典中的解释是把中间的取出,从事物中提出一部分。在面向对象的体系中,并不是所有的类都是拿来描绘对象的。当没有足够的信息来描绘具体的对象的时候,这样的类我们称为抽象类。比如要描述动物,动物有体重,大小等等,猫,狗都是动物,猫和狗都有它们自己的特性,所以它们都不能用来代表动物,这个时候我们描述动物的类就称为抽象类,而狗和猫都有动物的基本特征,所以它们可以继承动物这个类。所以对抽象的理解,其实的概念是对某一个问题领域的描述,是一种分析问题和解决问题的思维方式而已。

---------------------------------------------------------------------------------------------割割割割------------------------------------------------------------------------------------------------------

对面向对象的理解暂时就这么多了,相信在面试中如果能够将以上描述都表达到位,你在面试关心目中的地位会瞬间飙升,逼格也瞬间到位了

原创粉丝点击