基于对象和⾯向对象的区别
基本上每个程序员都听过⾯向对象(Object-oriented)和基于对象(Object-based)这两个概念。其实这两个概念并没有很明显的界线,不过现在业界⽐较统⼀的认为只有完全具有封装、继承、多态三⼤特点的才能够叫做⾯向对象,否则即使设计中蕴含了⼀些对象的概念,也顶多称为基于对象。
基于对象是过程化语⾔⾃然演进⽽来,随着ADT【1】思想的成熟⽽成熟,七⼗年代到⼋⼗年代初曾经⾮常流⾏,但是很快被风头更盛的⾯向对象给遮盖了,最典型的代表是Ada83。⼀贯被⼈认为是过程化语⾔代表的C语⾔,在实际应⽤中基本上使⽤的是基于对象的思想。虽然默默⽆闻,但是基于对象思想下开发的软件,实际上构成了我们现在的软件⼯业基础。
⾯向对象发源于60年代的挪威,第⼀个⾯向对象语⾔是Simula,思想成熟于80-90年代。其标志就是继承和多态。⾯向对象思想的主要历史贡献是催⽣了⾯向组件思想,简化了⽇常编程。从严肃的软件⼯程意义上来讲,⾯向对象究竟是不是“⼀个历史性的进步”,还有待历史检验,但是这种思想⽅法现在已经成为主流,所以⽆论是不是进步,已经成为现实。
通常基于对象是使⽤对象,意味着它们有像C++的结构加函数这样的对象,然⽽这只是到达⾯向对象语⾔的⼀部分,停留在把函数捆绑在结构内部的语⾔是基于对象的。但是⽆法利⽤现有的对象模板产⽣新的对象类型,继⽽产⽣新的对象,也就是说基于对象⼀般没有继承的特点。没有了继承的概念也就⽆从谈论多
态。现在的很多流⾏技术都是基于对象的,它们使⽤⼀些封装好的对象,调⽤对象的⽅法,设置对象的属性。但是它们⽆法让程序员派⽣新对象类型。他们只能使⽤现有对象的⽅法和属性。所以当你判断⼀个新的技术是否是⾯向对象的时候,通常可以使⽤后两个特性来加以判断。例如:C++是⾯向对象的,⽽VB只是基于对象的。当然,搜索现在国内⼤量的书籍与资料(包括⼤量教材)的作者都⽆法分清两者之间的区别,把VB称为⾯向对象,误⼈⼦弟。
程序员和编程员的区别注:
【1】ADT(Abstract Data Type)是指⼀个数学模型以及定义在该模型上的⼀组操作。ADT包括数据数据元素,数据关系以及相关的操作。即ADT
{
数据对象:(数据元素集合)
数据关系:(数据关系⼆元组结合)
基本操作:(操作函数的罗列)
}
抽象数据类型(ADT)的⼀个实现包括储存数据元素的存储结构以及实现基本操作的算法。在这个数据抽象思想中,数据类型的定义和它的实现是分开的,这在软件设计中是⼀个重要的概念。这使得只研究和使⽤它的结构⽽不⽤考虑它的实现细节成为可能。在⾯向对象编程语⾔中,像C++、Java都能较好的⽀持ADT,如类的机制。⽽在C语⾔中缺少了对相关⽅法的⽀持。抽象数据类型需要通过固有数据类型(⾼级编程语⾔中已实现的数据类型)来实现。抽象数据类型是与表⽰⽆关的数据类型,是⼀个数据模型及定义在该模型上的⼀组运算。对⼀个抽象数据类型进⾏定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。⼀旦定义了⼀个抽象数据类型及具体实现,程序设计中就可以像使⽤基本数据类型那样,⼗分⽅便地使⽤抽象数据类型。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。