面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术到一定阶段后的产物。如今,面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构,CAD技术、人工智能等领域。
面向对象语言借鉴了20世纪50年代的人工智能语言LISP,引入动态绑定的概念和交互式开发环境的思想。始于20世纪60年代的离散事件模拟语言SIMULA67,引入了类的要领和继承,成型于20世纪70年代的Smalltalk。
面向对象语言发展的两个方向:一种是纯面向对象语言,如Smalltalk、EIFFEL、C#、Java. 另一种是混合型面向对象语言,即在过程式语言及其它语言中加入类、继承等成分,如C++、Objective-C.
面向对象语言的操作以对象为基础,对硬件底层的操作不是很方便。面向过程语言是以过程或函数为基础,对底层硬件、内存等操作比较方便,但是写代码和调试维护会很麻烦。另外,如今程序设计也有了新的需求。正像当初的结构化模式和后来的面向对象模式是来满足大型程序和巨型团队的要求,如今的因为要求处理更多的数据的趋势而出现的关键问题就是并行性(parallelism)。基于这个背景出现的微软的F#语言的目标就是并行性——为了更好的在多处理器的电脑上并行工作。F#是一种函数型程序设计(FP,Functional Programming)语言。
面向对象语言刻画客观系统较为自然,便于软件扩充与复用,主要有以下四个特点:
1、识认性,系统中的基本构件可识认为一组可识别的离散对象;
2、类别性,系统具有相同数据结构与行为的所有对象可组成一类;
3、多态性,对象具有唯一的静态类型和多个可能的动态类型;
4、继承性,在基本层次关系的不同类中共享数据和操作。
计算机诞生初期,人们要使用计算机必须用机器语言或汇编语言编写程序。世界上第一种计算机高级语言是诞生于1954年的FORTRAN语言。
BASIC语言是1964年由 Dartmouth 学院 John G. Kemeny 与 Thomas E. Kurtz 两位教授在FORTRAN语言的基础上简化而成的, 适用于初学者设计的小型高级语言;C语言是1972年由美国贝尔实验室的D.M.Ritchie所开发,采用结构化编程方法,遵从自顶向下的原则。在操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,但在编写大型程序时,C语言仍面临着挑战。
1983年,贝尔实验室的Bjarne Stroustrup在C语言基础上推出了C++。 C++进一步扩充和完善了C语言,是一种面向对象的程序设计语言。如上所述,典型的面向对象语言如下:
C#是微软公司2000年7月发布的一种简单、安全、面向对象的程序设计语言,是专门为.NET的应用而开发的语言。它吸收了C++、VB、Delphi、Java等语言的优点。C#继承了C语言的语法风格,同时又继承了C++的面向对象特性,但C#的对象模型已经面向Internet进行了重新设计,使用的是.NET框架的类库。
C#不提供对指针类型的支持,使得程序不能随便访问内存地址空间,从而更加健壮。C#不支持多重继承,避免了以往类层次结构中由于多重继承带来的可怕后果。.NET框架为C#提供了一个强大的、易用的、逻辑结构一致的程序设计环境。同时,公共语言运行时(CLR)为C#提供了一个托管的运行时环境,使程序比以往更加稳定、安全。
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由Sun Microsystem公司于1995年5月推出的Java程序设计语言和Java平台的总称。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台,科学超级计算机、移动电话和互联网。在全球云计算和互联网产业环境下,Java更具有了显著优势和广阔前景。
Java由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java应用程序接口(Java API). SUN公司对Java编程语言的解释是:Java语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。
Java平台由Java虚拟机和Java应用编程接口构成。Java应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台安装一个Java平台之后,Java应用程序就可运行。Java适合团队开发,软件工程可以相对做到规范,但是不是和互联网模式的持续不断修改。互联网软件工程管理上的不足,持续的修修补补导致架构的破坏。
SUN公司在推出Java之际就将其作为一种开放的技术。全球数以忘记的Java开发公司被要求所设计的Java软件必须相互兼容。“Java 语言考群体的力量而非公司的力量”是SUN公司的口号之一,这与微软公司所倡导的注重精英和封闭的模式完全不同。
Python是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年发明。Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C/C++重写,而后封装为Python可以调用的扩展类库。需要注意的是在您使用扩展类库时可能需要考虑平台问题,某些可能不提供跨平台的实现。Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。Python支持重载运算符和动态类型。Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。因此,很多人还把Python作为一种“胶水语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。
后来的面向对象语言大都借鉴了C/C++语言,这里继续说回C++作为面向对象语言的特点。这里先不详细介绍C++语言的具体语法,只介绍C++对于面形对象程序的设计实现过程与逻辑。
C++的发展大致可以看作,由B语言(B语言是贝尔实验室开发的一种通用的程序设计语言,它是于1969年前后由美国贝尔实验室的电脑科学家肯·汤普森(Ken Thompson)在丹尼斯·利奇(Dennis Ritchie)的支持下设计出来)到C语言,再到C++,然后标准C++,到现在的托管C++。
托管C++
托管原理:现将高级语言程序翻译成一种与具体计算机类型无关的中间语言程序,当要在某种具体计算机上执行此程序时,再将它编译成机器相关的程序执行。其优点在于语言程序与机器无关,可在任何计算中执行,增强了程序的可移植性,实现程序的平台无关性。
CLI(Common Language Infrastructure)定了一组通用数据类型规范,它与具体机器无关。CLR(Common Language Runtime)(和Java虚拟机类似),是.NET一个标准化的程序执行环境,能够将中间语言程序转换成具体的机器语言程序。
托管的具体执行过程如下图:
.NET平台的主要功能
.NET是基于因特网和Web的,它独立于任何语言或平台,对于程序开发的语言不作限制,开发者可以使用多种.NET兼容语言的任意组合创建.NET程序,这就允许在同一软件项目中,多个程序员分别使用自己精通的.NET语言编写程序代码。
下次将介绍个人对Visual Studio 2010 中VC++的理解
>The ISO/IEC C++ standard ---- unmanaged C++. This version of C++ is supported on the majority of computer platforms.
>The C++/CLI standard ---- managed c++. This version is designed specifically for writing programs that target the CLR and is an externsion of the ISO/IEC C++.