“面向对象”编程思想为 Java 续命20+年

       Java自1991年诞生以来,以其跨平台性、面向对象设计、稳健性、安全性和丰富的生态系统被广泛使用,成为企业级应用、移动开发和大数据领域的核心语言。2001 年超越 C 语言,成为TIOBE排名第一的编程语言,在编程语言发展史上书写了浓墨重彩的一笔。这一事件标志着“面向对象”编程语言对“过程式”编程语言的全面超越。此后Java开启了霸榜之旅,与C,C++并称为“编程语言三剑客”。

C,C++,Java 三大编程语言的兴衰交替史,也是一个完整的“编程思想”的演化史。

C 语言作为典型的面向过程的编程语言POP(Procedure-Oriented Programming),深刻影响了后续编程语言的设计,成为了结构化编程的典范。

1. 结构化编程 

模块化设计:通过函数(Function)将代码划分为独立的功能单元,强调“自顶向下、逐步求精”的开发模式。

控制结构:引入 if-else、for、while、switch 等结构化语句,取代了早期语言(如汇编)的goto跳转,提升代码可读性和可维护性。

代码复用:函数库(如标准库 stdio.h、stdlib.h)的规范化,为代码复用提供标准模板。

注:goto在Java语言中无特殊含义,出于语言习惯,被作为“保留字”,在未来版本中可能会被用作关键字。

C 语言的语法结构(如大括号{}、分号;)被 C++、Java、C#、JavaScript 等语言直接继承。运算符优先级、表达式规则成为多语言共通标准。C语言凭借对底层硬件的精准支持,以及在执行效率上的卓越性能,备受青睐,成为系统编程的基石。Linux 内核、Windows 内核模块中大量使用 C 语言。

        接着我们通过C语言编程案例,直观的感受“面向过程”这一“古老”的编程思想。使用飞算Java AI 智能问答,输入指令:“用C语言写一个计算圆面积的功能”

面向过程的程序设计(POP),是一种以过程为中心的编程思想,关注“怎么做”,即完成任务的具体细节。对以上demo做个简单总结:

1)函数是基本单元:

C 语言中,函数是实现各种功能的基本模块。一个大型的 C 程序通常由多个函数组成,每个函数负责完成一个特定的任务。

2)程序执行流程清晰:

C 语言程序的执行通常是按照函数调用的顺序依次进行的,从main函数开始,逐步调用其他函数,程序的执行流程一目了然。这种顺序执行的方式符合人们解决问题的一般思维方式,即按照步骤依次完成各项任务。

3)数据和操作分离:

在C语言中,数据和对数据的操作(函数)是相对独立的。数据通常以变量的形式存在,而对这些数据的处理则通过函数来实现。

C语言“结构化”编程思想,成为现代软件工程的基石,被后续语言(如C++、Pascal、Java、Python)广泛继承。

       1979年,AT&T贝尔实验室,将C改良为“带类的C”(C with classes),1983年,该语言被正式命名为C++。名字源自计算器语言中自增运算符 ++,来表示C++语言是 C 语言的增强版,意味着 C++ 在 C 语言的基础上进行了功能扩展和改进。

       C++ 在 C 基础上,扩展“面向对象”特性,以对象为中心,将数据和操作数据的方法封装在一起,形成类(class)。通过类可以创建对象,对象之间通过消息传递进行交互。C++ 引入了类、对象、继承、多态等面向对象的概念,使得它能够很好地支持面向对象编程。计算机语言从“面向过程”到“面向对象”,编程思想,语法逻辑,都产生了质的变化。

接下来我们通过一段C++ 代码来直观的感受“面向对象”与“面向过程”之间的区别。同样使用飞算Java AI 智能问答功能,输入指令:“生成一段C++语言,调用计算圆面积函数。”此时,神奇的事情发生了,飞算Java AI 智能问答,“猜出”了我的想法,给了我两个答案。一个“面向过程”的C++代码,一个“面向对象”的C++代码。

以上为C++“面向过程”版本代码,解决问题的思路是,对问题进行拆解并封装成函数,待需用时直接调用函数即可。接着来看“面向对象”版本代码。

面对同样的问题,“面向对象”解决问题的思路是,先创建类(class),然后在类中封装函数,函数由类进行管理。调用函数时,先有类生成一个对象,接着由对象去调用相应函数。“面向对象”的编程思想是将问题从“如何实现”延伸至“由谁去实现”。

        通过两段代码对比,我们可以直观感受到,“面向对象”语言更加注重事物整体特征和行为的抽象描述。正是这一编程思路的改变,使得在处理复杂工程代码时,“面向对象” 相较于 “面向过程” 语言具有多方面显著优势:

1模块化程度更高:

“面向对象”编程将数据和操作封装在类中,每个类可以看作一个独立的模块,负责特定的功能。各个模块之间职责清晰,便于开发人员分工协作,也提高了代码的可维护性。而“面向过程”编程中,随着代码规模增大,代码结构会变得混乱,难以管理。

2)层次结构清晰:

通过继承和组合机制,“面向对象”语言可以构建出层次分明的类结构。子类继承父类(单继承),并进行扩展。这种层次结构使得代码的逻辑关系一目了然,易于理解和扩展。

3)易于修改和维护:

在“面向对象”编程中,由于代码的模块化和封装性,降低代码耦合度。当需要修改某个功能时,只需要修改相应的类或对象,而不会影响到其他部分的代码。

       C++ 在C语言基础上,增加了“类”,“类”是面向对象编程(OOP)中的核心概念,C++同时保留了C语言面向过程的基本特性,是“面向过程”编程思想向“面向对象”编程思想过渡历史时期的产物。“青出于蓝,而胜于蓝”的 C++,在编程思想上迈出历史性一步,由此挤身开发语言第一梯队。2024年6月,C++迎来了历史时刻,TIOBE排名首次超过 C,来到了 TIOBE 编程语言排行榜第 2 名。

        C++诞生十年后,Java 横空出世 低调问世。起初,它并未引起太多关注,在技术浪潮中默默蛰伏。随着互联网时代的到来,Java迎来了高光时刻。“一次编写,到处运行”的跨平台优势,使它迅速在网络编程、企业级开发等领域崭露头角。凭借自身优越性能、丰富的类库和强大的开发工具支持,很快登顶编程语言排行榜首。此后二十余年,即便编程语言不断推陈出新,Java依然保持领先地位。这不仅得益于其虚拟机实现跨平台,更源于它彻底贯彻“面向对象”的设计思想。若将C++看作是“面向过程”思想到“面向对象”思想过渡的典型代表,Java则是纯粹的面向对象语言,让代码组织更优,可维护性与扩展性更强。通过,继承,封装,多态三大特性,将“面向对象”编程思想深刻移植到开发者灵魂深处。“一切皆对象”成了Java 从业者的代码信仰。

更关键的是,“面向对象”这一编程思想赋予了Java语言卓越的“易理解性”。当掌握Java语言的面向对象设计理念后,现实世界里万事万物,都能借助Java语言精准描述。即便是非软件行业从业者,能够相对轻松理解其语义内涵。 Java语言通常被认为是“完全面向对象”的语言。考虑到代码的“易用性”,Java语言中保留了部分非面向对象的语法。

比如我们最常用到的Java八种基本数据类型,便是“非面向对象”设计。

同时 Java 也为八种基本数据类型提供了对应的包装类,集成了面向对象的特性和丰富的方法,从而可以更方便地对基本数据进行操作和处理。

另外还有static(静态)所修饰的变量与函数,无需生成对象,可由类直接调用。

Java 中常见的数组,是一个典型的“非面向对象”设计,它保留了底层的高效性和直接操作内存的能力,但同时牺牲了部分面向对象的特性。

Java “非完全面向对象”,是出于对性能,语句优化后的“更优设计”。

       那么问题来了,使用高度“面向对象”的Java语言,写出的一定是符合“面向对象”思想的代码吗?答案是否定的。“面向对象”不仅是通过“继承”,“封装”,“多态”植入Java语言的特性,同时也是一种语言规范,需要Java开发者时刻遵循的一种编码习惯。如果不能遵循这种规范,便无法将Java语言“面向对象”的优势发挥到极致。

        通常一个Java初学者,需要上万行代码练习才能养成这种良好的编码习惯。如今随着AI的盛行,借助AI编程工具便可轻易的实现优质代码输出。相较于人类自然语言,AI存在着难以跨越的感情鸿沟,无法做到尽善尽美。而在编程语言方面,AI展现出绝对优势,能够输出接近完美的代码。下期将深入探讨,AI在计算机语言编程中的天然优势。

声明:文章中所有代码,由飞算JavaAI生成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值