从结构化编程到面向对象编程

C语言的产生标志着现代计算机语言时代的开始。C语言是功能强大、高效的结构化语言,简单易学。

程序越来越复杂这一事实贯穿编程语言的历史。

20世纪60年代提出了结构化编程方法。这种结构化的编程思想被像C这样的语言所应用,第一次使程序员可以相对轻松地编写适度复杂的程序。然而,当一个工程项目达到一定规模后,即使使用结构化编程方法,编程人员也无法对它的复杂性进行有效管理。

20世纪80年代初期,许多工程项目的复杂性都超过了结构化方法的极限。为解决这个问题,面向对象编程(object-oriented programming,OOP)新方法诞生了。一旦一个程序的代码超过25 000~100 000行,就很难从总体上把握它的复杂性了。C++突破了这个限制,帮助程序员理解并且管理更大的程序。

C++通过增加面向对象的特性扩充了C。因为C++产生在C的基础之上,因此它包括了C所有的特征、属性和优点。

从C/C++到Java

Java的最初推动力并不是因特网,而是源于对独立于平台(也就是体系结构中立)语言的需要。这种语言可创建能够嵌入微波炉、遥控器等各种家用电器设备的软件。用作控制器的CPU芯片是多种多样的,但C和C++以及其他绝大多数语言的缺点是只能对特定目标进行编译。尽管为任何类型的CPU芯片编译C++程序是可能的,但这样做需要一个完整的以该CPU为目标的C++编译器,而创建编译器是一项既耗资巨大又耗时较长的工作。 因此需要一种简单且经济的解决方案。 为了找到这样一种方案, Gosling 和其他人开始一起致力于开发一种可移植、跨平台的语言,该语言能够生成运行于不同环境、不同CPU芯片上的代码。

如果万维网(WWW)的成型和Java的实现不是同时发生的话,那么Java可能保持它有用、但默默无闻的用于电子消费品编程语言的状态。然而,随着万维网的出现,Java被推到计算机语言设计的最前沿,因为万维网也需要可移植的程序。

因为计算机业被Intel,Macintosh和UNIX这3个竞争对手垄断,大多数程序员都在其中的某个领域内长期工作,所以对可移植语言的需求就不是那么迫切。但是,随着因特网和Web的出现,关于可移植性语言的旧问题又被提了出来。毕竟,因特网由不同的、分布式的系统组成,其中包括各种类型的计算机、操作系统和CPU。尽管许多类型的平台都可以与因特网连接,但用户仍希望他们能够运行同样的程序。

事实上,开始被设计为解决小范围问题的Java语言同样可以被用在大范围的因特网上。 这个认识使他们将Java的重心由电子消费品转移到Internet编程。

Java的大部分特性是从C和C++中继承的。Java设计人员之所以故意这么做,主要是因为他们觉得,在新语言中使用熟悉的C语法及模仿C++面向对象的特性,将使他们的语言对经验丰富的C/C++程序员有更大的吸引力。

Java的优势:安全性和可移植性

在网络中,有两大类对象在服务器和个人计算机之间传输:被动的信息和动态的、主动的程序。

例如,当你阅读电子邮件时,你在看被动的数据。甚至当你下载一个程序时,该程序的代码也是被动的数据,直到你执行它为止。但是,可以传输到个人计算机的另一类对象却是:动态的、可自运行的程序,虽然这类程序是客户机上的活动代理,但却是由服务器来初始化的。例如,被服务器用来正确地显示服务器传送数据的程序。

Java可用来生成两类程序:应用程序(applications)和Java applet(小应用程序)。

应用程序是可以在你的计算机的操作系统中运行的程序,从这一方面来说,用Java编制的应用程序多多少少与使用C或C++编制的应用程序有些类似。而Java的重要性就在于它具有编制小应用程序的功能。小应用程序是可以在Internet中传输并在兼容Java的Web浏览器中运行的应用程序。小应用程序实际上就是小型的Java程序,能像图像文件、声音文件和视频片段那样通过网络动态下载,它与其他文件的重要差别是,小应用程序是一个智能的程序,能对用户的输入作出反应,并且能动态变化,而不是一遍又一遍地播放同一动画或声音。

当使用一个兼容Java的Web浏览器时,你可以安全地下载Java小应用程序,不必担心病毒的感染或恶意的企图。Java实现这种保护功能的方式是,将Java程序限制在Java运行环境中,不允许它访问计算机的其他部分。

要使连接到Internet上的各种各样的平台都能动态下载同一个程序,就需要有能够生成可移植性执行代码的方法。Java解决上述两个问题——安全性和可移植性的关键在于Java编译器的输出并不是可执行的代码,而是字节码(bytecode)。字节码是一套设计用来在Java运行时系统下执行的高度优化的指令集,该Java运行时系统称为Java虚拟机(JavaVirtual Machine,JVM)。在其标准形式下,JVM 就是一个字节码解释器。

在一个给定的系统中,只要系统运行包存在,任何Java程序就可以在该系统上运行。记住:尽管不同平台的Java虚拟机的细节有所不同, 但它们都解释同样的Java字节码。

Java的主要特性

  • 简单(Simple)
  • 安全(Secure)
  • 可移植(Portable)
  • 面向对象(Object-oriented)
  • 健壮(Robust)
  • 多线程(Multithreaded)
  • 体系结构中立(Architecture-neutral)
  • 解释执行(Interpreted)
  • 高性能(High performance)
  • 分布式(Distributed)
  • 动态(Dynamic)

在C/C++中,程序员必须手工地分配并且释放所有的动态内存。这有时会导致问题,因为程序员可能忘记释放原来分配的内存,或者释放了其他部分程序正在使用的内存。Java通过替你管理内存分配和释放,可以从根本上消除这些问题。

Java通过提供面向对象的异常处理机制来解决由“被零除”或“文件未找到”这样的情况引起的问题,一个写得很好的Java程序,所有的运行时错误都可以并且应该被你的程序自己进行管理。

Java的字节码经过仔细设计, 因而很容易便能使用JIT编译技术将字节码直接转换成高性能的本机代码。Java运行时系统在提供这个特性的同时仍具有平台独立性。

results matching ""

    No results matching ""