文章目录
java面向对象编程详细解析
面向对象程序设计
-
面向对象程序设计的重要性
类(class)和对象(object)是面向对象程序设计十分重要的概念。要深入了解Java程序语言,一定要树立面向对象程序设计的观念。
理解面向对象程序设计
- 面向对象程序设计(Object Oriented Programming,OOP)是继面向过程又一具有里程碑意义的编程思想,是现实世界模型的自然延伸。
结构化程序设计简介
-
早期的程序设计大量使用共享变量(全局变量)和goto语句,这使得代码结构比较混乱,不容易改错和复用
-
后来有人证明所有的有意义的程序流程都可以使用顺序、选择和循环来实现,并由此提出结构化程序设计
-
结构化程序设计的特点
- 采用自顶向下、逐步求精及模块化的程序设计方法
- 使用3种基本控制结构构造程序,任何程序都可由顺序、选择、循环这3种基本控制结构来构造
-
结构化程序设计主要强调的是程序的易读性
-
结构化程序设计方法可以用一句话概括
程序 = 算法 + 数据结构
这里的“算法”可以用顺序、选择、循环这3种基本控制结构来实现
这里的“数据结构”是指数据及其相应的存取方式。程序与算法和数据结构之间的关系如下图所示。
面向对象程序设计简介
-
面向对象的思想主要是基于抽象数据类型的(Abstract Data Type,ADT)
在结构化编程过程中,人们发现,把某种数据结构和专用于操纵它的各种操作,以某种模块化方式绑定到一起会非常方便,做到“特定数据对应特定处理方法”,使用这种方式进行编程时数据结构的接口是固定的。 如果对抽象数据类型进一步抽象,就会发现,把这种数据类型的实例当作一个具体的东西、事物、对象,就可以引发人们对编程过程中怎样看待所处理的问题的一次大的改变
-
面向对象革命的重要价值就在于,它改变了人们看待和处理问题的方式。
面向对象程序设计的基本特征
-
封装性(encapsulation)
封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装把数据和加工该数据的方法(函数)打包成为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有哪些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象的使用者分开,使用者不必知晓其行为实现的细节,只需用设计者提供的消息来访问该对象。
-
继承性(inheritance)
继承性是子类共享其父类数据和方法的机制。它由类的派生功能体现。一个类直接继承其他类的全部描述,同时可修改和扩充。继承具有传递性。继承分为单继承(一个子类有一父类)和多重继承(一个类有多个父类,在C++中支持,而Java不支持)。类的对象是各自封闭的,如果没继承性机制,则类中的属性(数据成员)、方法(对支持)。类的对象是各自封闭的,如果没继承性机制,则类中的属性(数据成员)、方法(对数据的操作)就会出现大量重复。继承不仅支持系统的可重用性,而且还促进系统的可扩充性。
-
多态性(polymorphism)
对象通常根据所接收的消息而做出动作。当同一消息,被不同的对象接受而产生完全不同的行动,这种现象称为多态性。利用多态性,用户可发送一个通用的信息,而将所有的实现细节都留给接受消息的对象自行决定,于是同一消息即可调用不同的方法。例如,同样是run方法,飞鸟调用时是飞,野兽调用时是奔跑
多态和继承之间的关系
- 多态性的实现受到继承性的支持,利用类继承的层次关系,把具有通用功能的协议存放在类层次中尽可能高的地方(父类),而将实现这一功能的不同方法置于较低层次(子类),这样,在这些低层次上生成的对象,就能给通用消息以不同的响应
面向对象编程的概念
- 万物皆对象(现实中看到的一切皆为对象,例如电脑、手机等)
- 面向对象指以属性和行为的观点去分析现实生活中的事物
- 面向对象编程指先以面向对象的思想进行分析,然后使用面向对象的编程语言 进行表达的过程
- 面向对象编程是软件产业化发展的需求
- 理解面向对象的思想精髓(封装、继承、多态),至少掌握一种编程语言
面向对象编程和面向过程编程的比较
-
面向对象编程和面向过程编程是当前主流的两种编程模式,它们既有区别也有联系。下面就其区别和联系分别进行简要叙述,通过对比,以帮助读者更加深入地理解面向对象编程
-
两种编程范式之间的区别
-
在面向对象编程出现以前,面向过程的编程范式很受程序人员的青睐,因为面向过程编程采用的是“自上而下,层层分解,步步求精”的编程思想,人们易于理解这种思想。面向过程程序设计以过程为中心,以算法为驱动 (程序 = 算法 + 数据结构)
-
面向过程程序设计的不足之处在于,程序的上一步和下一步紧密相连,环环相扣,如果需求发生变化,那么代码的改动将会很大,这样不利于对软件的后期进行维护和扩展。
程序 = 对象 + 消息传递
用户首先自定义数据结构——“类”,然后用该类型下的“对象” 组装程序。对象之间通过“消息”进行通信。每个对象既包括数据,又包括了对数据的处理,每个对象都像是一个小型的“机器” 。
-
面向对象设计使程序更容易扩展,也更加符合现实世界的模型,但也带来了“副作用”——执行效率,通常要低于面向过程程序设计
-
面向过程程序设计首先强调的“该怎么做(How to do?)”
-
面向对象程序设计首先考虑的是 “该让谁来做(Who to do?)
-
-
两种编程范式之间的联系
-
面向对象是在面向过程的基础上发展而来的,它只是添加了独有的一些特性。面向对象程序中的对象就由数据和方法构成,所以完整的面向对象的概念应该是如下形式
程序 =对象 + 消息传递 = (数据 + 方法) +消息传递
-