java面向对象是什么?
什么是对象?
- “搞对象?”格局小了,万物皆对象。
面向对象呢?
- 就是对对象做一些没羞没臊的事情,脑中仿佛有了画面,但是又搞不清楚java面向对象的方向,其实面向对象是针对于面向过程的,面向过程可以理解为亲力亲为,面向对象可以简单理解为指使对象做一些我们想做的事情,前者是执行者后者是命令者和使用者。
面向对象百科解释
- 面向对象(Object Oriented)是软件开发方法,一种编程范式。
- 面向对象应用领域繁多,其概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
- 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。
面向对象发展历程
- 早期的计算机编程是基于面向过程的方法,但是随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。面向对象方法诞生,它通过封装技术(封装过程),消息机制可以像搭积木的一样快速开发出一个全新的系统。
- 面向对象是指一种程序设计范型,同时也是一种程序开发的方法。
- 对象是类(对过程进行封装)的具体化实现。它将对象作为程序的基本单元,将程序和数据封装其(对象)中,以提高软件的重用性、灵活性和扩展性(可以随时调用对象并对其进行修改)。
- 面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA),面向对象的设计(OOD)、面向对象的编程实现(OOP)。
面向对象的来由
- 面向对象是在结构化设计方法出现很多问题的情况下应运而生的。
结构化设计方法
- 结构化设计方法求解问题的基本策略是从功能的角度审视问题域。它将应用程序看成实现某些特定任务的功能模块,其中子过程是实现某项**具体操作**的底层功能模块。
- 在每个功能模块中,用数据结构描述待处理数据的组织形式,用算法描述具体的操作过程。面对日趋复杂的应用系统,这种开发思路代码量也越来越大越来越复杂。
对象概念的理解
- 万物皆对象,如何对其深入理解?这就引入它的行为和属性。
- 对象封装在类中,他又有行为和属性,我们通过对象的行为和属性对对象操作。比如:学生有学号,姓名,年龄这是他们的属性,而学习,游戏,休息这些是他们的行为。
- 面向对象我们只需要把注意力放在对象上即可,只需对其属性和行为进行设置和操作,即可达到想要的目的,比如拿蒸米发饭举例,面向过程是种稻子,浇水,收稻子,进行加工处理,过重加水加米,砍柴,烧火,计时,出锅。需要把每一个细节都做出来。而面向对象是把这些过程设计成属性和行为把它们封装在对象中对象再封装在类中,我们直接调用即可,并不需要每次都走流程。比如还是蒸米饭,我们可以调用粮油店对象,直接从里边买米。调用电饭煲对象,直接设置柴火饭或者蒸米饭功能,静等出锅即可,可以反复调用。
- 结构化设计方法也是分模块的,但是他是对操作过程的封装,一旦我们不想蒸米饭,想熬个米汤那么这个模块就需要重新设计,所以它的可重用性太低。
计算机中的对象
- 计算机中的对象的属性和行为相对应的是数据和动作数据用来记录,动作用来执行。所以对象不仅能够进行操作,同时还能够及时记录下操作结果。
- 方法是指对象能够进行的操作,方法同时还有另外一个名称,叫做函数。方法是类中的定义函数,其具体的作用就是对对象进行描述操作。
- 成员变量是指定维度的成员变量,用于标识某个维度成员。是对对象属性的记录和封装。例如,1 到 12 之间的某个数字可以是相应于年中的某个月的成员变量。或者学生的姓名是一个字符串。年龄是一个数字等等。
- 封装是将数据和代码捆绑到一起,他的层次和界限很是分明,而且它可以私有,防止了程序相互依赖性而带来的变动影响,面向对象的封装比传统语言的封装更为清晰、更为有力。有效实现了两个目标:对数据和行为的包装和信息隐藏。
- 继承简单地说就是一种层次模型,这种层次模型能够被重(chong)用。而且在重用的时候可以根据自己的意愿进行一些变动和丰富。比如电饭锅类继承过类类那么电饭锅有过重的功能,他开可以添加一些具体的功能。
- 多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。一个接口,多种方式。(这个理解稍微有一些复杂,可以理解为向下兼容,或者直接请家长的意思)
面向对象的特性
- 对象唯一性。
- 抽象性。(把对象的属性和行为进行抽取形象成类该类唯一)
- 继承性。(可以层层继承java是单继承,即孩子只能有一个爹)
- 多态性(多形性)
开发方法
面向对象开发方法的研究已日趋成熟,国际上已有不少面向对象产品出现。面向对象开发方法有Coad方法、Booch方法、OMT方法等。(了解即可)
- Booch最先描述了面向对象的软件开发方法的基础问题,指出面向对象开发是一种根本不同于传统的功能分解的设计方法。面向对象的软件分解更接近人对客观事务的理解,而功能分解只通过问题空间的转换来获得。
- Coad方法是1989年Coad和Yourdon提出的面向对象开发方法。该方法的主要优点是通过多年来大系统开发的经验与面向对象概念的有机结合,在对象、结构、属性和操作的认定方面,提出了一套系统的原则。该方法完成了从需求角度进一步进行类和类层次结构的认定。尽管Coad方法没有引入类和类层次结构的术语,但事实上已经在分类结构、属性、操作、消息关联等概念中体现了类和类层次结构的特征。
- OMT方法是1991年由James Rumbaugh等5人提出来的,其经典著作为“面向对象的建模与设计”。该方法是一种新兴的面向对象的开发方法,开发工作的基础是对真实世界的对象建模,然后围绕这些对象使用分析模型来进行独立于语言的设计,面向对象的建模和设计促进了对需求的理解,有利于开发得更清晰、更容易维护的软件系统。该方法为大多数应用领域的软件开发提供了一种实际的、高效的保证,努力寻求一种问题求解的实际方法。
- UML将是面向对象技术领域内占主导地位的标准建模语言。UML不仅统一了Booch方法、OMT方法、OOSE方法的表示方法,而且对其作了进一步的发展,最终统一为大众接受的标准建模语言。UML是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它融入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象的分析与设计,还支持从需求分析开始的软件开发全过程。
面相对象的程序设计
基本思想
- OOP,面向对象程序设计的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成某个步骤,而是对对象数据和行为的封装,你需要什么就调用什么。
- 所用到的概念:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体现。
具体实现
1.程序设计语言
- 选择面向对象语言
- 程序设计风格(高重用性,灵活高拓展性,稳健)
2 类的实现
- “原封不动”重用
- 进化性重用(添加更多的拓展)
- “废弃性”开发(不用父类的方法)
- 错误处理(类是独立的,可以独立处理错误,更简单方便)
3.应用系统的实现
4.面向对象测试
- 算法层
- 类层(测试单个类的属性和方法的正确性)
- 模板层(测试一个工作的整个流程)
- 系统层
易混淆概念
-
“面向对象”和“基于对象”
面向对象的三大特点(封装,继承,多态)缺一不可。通常“基于对象”是使用对象,但是无法利用现有的对象模板产生新的对象类型,继而产生新的对象,也就是说“基于对象”没有继承的特点。 -
“面向过程”和“面向对象”
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。