导航:首页 > 编程语言 > 面向对象编程会被抛弃吗

面向对象编程会被抛弃吗

发布时间:2022-09-13 02:06:03

㈠ 三大编程语言

此图中,排名前5的分别是:

java、C、Python、C++和C#

占比分别为:

17.253%、16.086%、10.308%、6.196%、4.801%

㈡ java和c++在面向对象设计方面的不同点和相同点

Java采用了C及C++的语法格式,对于学习过C及C++的程序设计者来说,学习Java将有可能很轻松。但是,如果仔细检查Java语言的许多细节,就会发现Java取消了不少C及C++的特性,并且加入了一些新的特性。这些差异包括:

不再有指针(Pointer)的概念。

这是Java和C/C++在语法上的主要区别之一。在C及C++中,指针的灵活运用将会给程序设计带来极大的便利,但是其灵活性也成为了导致程序不稳定的一个主要因素。配合C及C++的内存管理策略,编程人员必须亲自跟踪自己向系统申请到的内存,最后确认交还给系统。并且在使用指针时,要随时注意是否超过合法的内存空间,造成Segmentation Fault或General Protection Fault这样的问题。

Java提供了一种引用(Reference)类型用来替代指针,通过引用去访问申请到的内存空间,可以确保不会访问不属于自己的内存空间,同时,程序的执行系统也可以动态地做内存垃圾回收工作,将那些被取消引用的内存空间回收给系统使用。这种动态内存分配机制,通过牺牲一定的灵活性,保证了内存分配一定程度上的安全性。

不再有函数(Function)的概念。

Java编程语言中,取消了结构化语言中最重要的部分——函数。在面向对象程序设计的概念里,对象的数据才是真正的主题,而处理对象数据的方法则必须依附在对象内才有意义。因此函数概念完全是不必要的。这强化了面向对象的开发策略。

不再使用structure、union和typedef.

事实上,在C++中就可以去掉C中的structure和union等对复杂数据的自定义结构类型了,因为类(Class)的定义方式完全可以做到这项功能。而typedef的功能也可以由类来实现。虽然C++这样的设计是为了和C兼容,但是这些毕竟是多余的语言特点,在Java语言中便被抛弃了。

不再有类的多重继承(Multiple Inheritance)。

在C++中,多重继承是一项很强的功能,但也是较难掌握的。取消多重继承降低了Java语言的功能,但它使Java看起来更为简洁。同时,Java也提供了接口(Interface)的方式,可以实现部分多重继承的作用。和多重继承的不同之处在于接口并不会定义类方法的内容,以及类中的数据。

不再有操作符重载(Operator Overloading)。

操作符重载被看作是C++的一个特色。在C++中,利用操作符重载,程序设计者通过对现有运算符赋予自己的定义,可以使程序看起来更为自然。但是,如果使用不当,也会使整个程序的可读性大受影响。同时,这一功能的存在也并非必要,程序设计者可以定义类中的方法来达到同样的目的。

取消了自动类型转换。

Java是一种强类型检查的编程语言,对于诸如浮点型变量赋值给整型变量这样的情况而言,在C++的语法中是允许的,最多只是在编译时给出警告信息。但是,在Java中,除非写明强制类型转换,否则编译无法通过。

不再有预处理器(preprocessor)功能。

利用C/C++中提供的#define、#include等预处理指令,厉害的程序设计人员可以自己开发一套只有自己才看得懂的宏指令集。从软件工程的角度上看,这对团队开发软件和整个软件的维护都是十分不利的。同时,预编译后的程序代码和程序设计者看到的程序代码是不同的。如果宏指令集有错,编译器产生的错误信息将不会是编程人员所预期的,这增加了程序调试的难度。

取消了goto语句。

在C++中,goto语句已经不被建议使用了,保留goto只是为了和C语法兼容。在Java中goto语句被完全抛弃了,与此同时,Java又扩大了break语句和continue语句的功能,通过使用break和continue,程序流程被允许在多层循环中跳转。

可以这样说,Java编程语言是一种简洁而有效的纯面向对象的编程语言。而C++语言因为要与C兼容(C++语言是作为C语言的一个超集被定义的),所以在面向对象的特性方面不如Java好。

㈢ 面向对象编程为什么没有在计算科学领域获得普及

面向对象编程(OOP)具有多方面的吸引力。对管理人员, 它实现了更快和更廉价的开发与维护过程。对分析与设计人员,建模处理变得更加简单,能生成清晰、易于维护的设计方案。对程序员,对象模型显得如此高雅和浅 显。此外,面向对象工具以及库的巨大威力使编程成为一项更使人愉悦的任务。每个人都可从中获益,至少表面如此。如果说它有缺点,那就是掌握它需付出的代价。思考对象的时候,需要采用形象思维,而不是程序化的思维。与程序化设计相比,对象的设计过程更具挑战性——特别是在尝试创建可重复使用(可再生)的对象时。

㈣ 为什么面向对象的编程会在软件开发领域造成如此震憾的影响

面向对象编程(OOP)具有多方面的吸引力。对管理人员,它实现了更快和更廉价的开发与维护过程。对分析与设计人员,建模处理变得更加简单,能生成清晰、易于维护的设计方案。对程序员,对象模型显得如此高雅和浅显。此外,面向对象工具以及库的巨大威力使编程成为一项更使人愉悦的任务。每个人都可从中获益,至少表面如此。
抽象的进步
所有编程语言的最终目的都是提供一种“抽象”方法。一种较有争议的说法是:解决问题的复杂程度直接取决于抽象的种类及质量。这儿的“种类”是指准备对什么进行“抽象”?汇编语言是对基础机器的少量抽象。后来的许多“命令式”语言(如FORTRAN,BASIC和C)是对汇编语言的一种抽象。与汇编语言相比,这些语言已有了长足的进步,但它们的抽象原理依然要求我们着重考虑计算机的结构,而非考虑问题本身的结构。在机器模型(位于“方案空间”)与实际解决的问题模型(位于“问题空间”)之间,程序员必须建立起一种联系。这个过程要求人们付出较大的精力,而且由于它脱离了编程语言本身的范围,造成程序代码很难编写,而且要花较大的代价进行维护。由此造成的副作用便是一门完善的“编程方法”学科。
为机器建模的另一个方法是为要解决的问题制作模型。对一些早期语言来说,如LISP和APL,它们的做法是“从不同的角度观察世界”——“所有问题都归纳为列表”或“所有问题都归纳为算法”。PROLOG则将所有问题都归纳为决策链。对于这些语言,我们认为它们一部分是面向基于“强制”的编程,另一部分则是专为处理图形符号设计的。每种方法都有自己特殊的用途,适合解决某一类的问题。但只要超出了它们力所能及的范围,就会显得非常笨拙。
面向对象的程序设计在此基础上则跨出了一大步,程序员可利用一些工具表达问题空间内的元素。由于这种表达非常普遍,所以不必受限于特定类型的问题。我们将问题空间中的元素以及它们在方案空间的表示物称作“对象”(Object)。当然,还有一些在问题空间没有对应体的其他对象。通过添加新的对象类型,程序可进行灵活的调整,以便与特定的问题配合。所以在阅读方案的描述代码时,会读到对问题进行表达的话语。与我们以前见过的相比,这无疑是一种更加灵活、更加强大的语言抽象方法。总之,OOP允许我们根据问题来描述问题,而不是根据方案。然而,仍有一个联系途径回到计算机。每个对象都类似一台小计算机;它们有自己的状态,而且可要求它们进行特定的操作。与现实世界的“对象”或者“物体”相比,编程“对象”与它们也存在共通的地方:它们都有自己的特征和行为。 Alan Kay总结了Smalltalk的五大基本特征。这是第一种成功的面向对象程序设计语言,也是Java的基础语言。通过这些特征,我们可理解“纯粹”的面向对象程序设计方法是什么样的:(1) 所有东西都是对象。可将对象想象成一种新型变量;它保存着数据,但可要求它对自身进行操作。理论上讲,可从要解决的问题身上提出所有概念性的组件,然后在程序中将其表达为一个对象。
(2) 程序是一大堆对象的组合;通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个对象“发送一条消息”。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程或函数。
(3) 每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。
(4) 每个对象都有一种类型。根据语法,每个对象都是某个“类”的一个“实例”。其中,“类”(Class)是“类型”(Type)的同义词。一个类最重要的特征就是“能将什么消息发给它?”。
(5) 同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法,大家不久便能理解。由于类型为“圆”(Circle)的一个对象也属于类型为“形状”(Shape)的一个对象,所以一个圆完全能接收形状消息。这意味着可让程序代码统一指挥“形状”,令其自动控制所有符合“形状”描述的对象,其中自然包括“圆”。这一特性称为对象的“可替换性”,是OOP最重要的概念之一。

一些语言设计者认为面向对象的程序设计本身并不足以方便解决所有形式的程序问题,提倡将不同的方法组合成“多形程序设计语言”(注释②)。

②:参见Timothy Budd编着的《Multiparadigm Programming in Leda》,Addison-Wesley 1995年出版。

1.2 对象的接口
亚里士多德或许是认真研究“类型”概念的第一人,他曾谈及“鱼类和鸟类”的问题。在世界首例面向对象语言Simula-67中,第一次用到了这样的一个概念:
所有对象——尽管各有特色——都属于某一系列对象的一部分,这些对象具有通用的特征和行为。在Simula-67中,首次用到了class这个关键字,它为程序引入了一个全新的类型(clas和type通常可互换使用;注释③)。

③:有些人进行了进一步的区分,他们强调“类型”决定了接口,而“类”是那个接口的一种特殊实现方式。

㈤ 为什么有这么多开发者讨厌面向对象编程

关于面向对象编程,有人喜欢它,也有人讨厌它。面向对象编程(OOP)已经存在了很长时间。它是一种编码风格、一种思想流派、一种学校里的教授实践。它的核心思想是将代码组织成有意义的“对象”,这些“对象”是现实问题的模型,将描述模型各个“状态”的变量和修改这些变量的方法(子例程或函数)捆绑在一起。

这一切都让他相信“OOP 是危险的。OOP 程序固有的非确定性让代码变得不可靠”。程序在运行时会有很多不同的路径,因为会有很多不同的对象,而且会不断动态创建出新的对象。“这种看似无辜的编程范式对世界经济造成的破坏性影响是人们难以理解的”。

㈥ 如果不用面向对象的编程会死掉吗

不会死掉,适应的场合不一样,有的比较接近底成的就用面向对象d的 就比较好一点,而像c++。java就是接近上层,脱离了硬件,还是比较有市场的

㈦ 既然java这种面向对象的编程思想已经很好的替代了C语言这种面向过程编程模式,请问为什么还有那么多人

java是高级编程语言,所谓高级就是越靠近人的思维方式,人的思维方式主要是面向对象的思维方式;
c语言是低级编程语言,所谓低级就是越靠近机器的思维方式,机器是面向过程的方式运行的,按部就班地先做什么再做什么的一步一步的运行;
一般情况下,同样的功能,c语言编写的程序比java编写的执行效率高,因为c语言更懂底层负责执行的硬件,但是java的开发效率会比c语言搞,因为java的编程方式更接近编程人员的思维方式。
所以这两种语言是不同级别的语言,不具可比性,所谓各有千秋。

㈧ 面向对象编程的弊端是什么

面向对象原本要解决什么(或者说有什么优良特性)
似乎很简单,但实际又很不简单:面向对象三要素封装、继承、多态


(警告:事实上,从业界如此总结出这面向对象三要素的一刹那开始,就已经开始犯错了!)。


封装:封装的意义,在于明确标识出允许外部使用的所有成员函数和数据项,或者叫接口。


有了封装,就可以明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者;而外部调用者也可以知道自己不可以碰哪里。这就提供一个良好的合作基础——或者说,只要接口这个基础约定不变,则代码改变不足为虑。


继承+多态:继承和多态必须一起说。一旦割裂,就说明理解上已经误入歧途了。

㈨ 面向对象编程为什么没有在科学计算领域获得普及

两方面原因,其一在于绝大部分科学计算领域中的算法的是直接以面向过程来描述的,这很显然,因为算法就是对数据进行处理以得到所需要结果的过程。这一套逻辑是该领域研究人员所熟悉的,因此就算他们选择了C/C++来进行编程,也很自然的就采用了面向过程的范式。其二在于科学计算领域的研究人员所受到的编程方面的训练并不足以使他们足够强地掌握面向对象的编程方法。当水平不足的时候,使用面向对象的方法写出来的程序运行效率可能很差,这不满足科学计算对于效率的高要求。
但是这并不绝对,比如在元胞自动机领域,可能多数程序都是面向对象的,因为该方法的描述与面向对象的方法是十分契合的,也因为这一领域最近才迅速发展,领域中已经有足够多的研究人员具备使用C++进行面向对象开发的能力。
此外,尤其需要注意的是,进入新世纪之后,越来越多的人开始采用C/C++甚至最近的Python进行科学计算了,但是这并不表明面向对象在他们的程序架构中占有优势地位,多数科学计算的C/C++程序仍然是面向过程的,或者本质上是面向过程,只是基于对象在顶层上做了一些封装。我注意到题目的标签中加了Fortran项,我想大家须要将面向过程/面向对象这种编程范式与具体的语言(Fortran/C/ C++/Python)区分出来 。我自己比较熟悉的Python/C++都是支持面向过程/面向对象多种编程范式的。况且Fortran语言的运行效率并不比C/C++高,两方阵营表现几乎一致
最后,就我个人而言,我现在使用得更多的是以泛型编程技术为核心的多种范型并存的编程风格。前述已经给出定义“算法就是对数据进行处理以得到所需要结果的过程”,因此泛型这种将数据类型与操作过程相分离,最大程度上提高代码复用程度并且基本不损失运行效率的范式,在我看来,十分契合数值计算的需求。但是科学计算领域的研究人员中少有人具备熟练掌握并最大程度上利用该范式的能力。

㈩ 关于大家认为面向对象的编程方法是不是已经过时了

面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构

阅读全文

与面向对象编程会被抛弃吗相关的资料

热点内容
编译器原理与实现书 浏览:708
dos选择命令 浏览:16
apm固件编译到单片机 浏览:120
联通深蓝卡都包含什么app 浏览:263
如何判断网络服务器正常 浏览:649
路由器搭桥远端服务器地址是什么 浏览:515
编译动态库时会连接依赖库吗 浏览:707
淘宝手机加密是随机的吗 浏览:672
解压包子怎么装饰 浏览:585
四个数凑24算法 浏览:676
哪一种不是vi编译器的模式 浏览:169
xp在此处打开命令窗口 浏览:128
代码编译运行用什么软件 浏览:999
动态库在程序编译时会被连接到 浏览:761
python超简单编程 浏览:260
获取命令方 浏览:977
怎样制作文件夹和图片 浏览:60
调研编译写信息 浏览:861
python冯诺依曼 浏览:419
同时安装多个app有什么影响 浏览:254