第17章C#语言简介
C#(C Sharp)是微软于2000年提出的一种源于C++、类似于Java的面向对象编程语言,适合于分布式环境中的组件开发。C#是专门为.NET设计的,也是.NET编程的首选语言。
17.1OOP语言
OOP(Object-Oriented Programming,面向对象编程)是目前主流的编程技术,本节介绍其中最重要的C++、Java和C#,重点是它们三者之间的关系与对比。
17.1.1OOP概述
程序设计语言,在思想上发展很快,在技术上也是不断创新。经历了手工操作(控制面板)、机器语言、汇编语言、宏汇编语言、高级语言和第4代语言等多个阶段。OOP只是在高级程序设计语言中,流行的多种编程技术之一。
1.基本特征
面向对象编程的三个基本特征是:
●封装(encapsulation)——是对问题的抽象,以达到信息隐藏的目的。通过类和对
象,将属性(数据/变量)和方法(操作/函数)封装在一个黑箱内,将细节隐藏起
来。既可以保护数据不被他人恶意或大意地修改,又能防止其他程序员编写高耦合
度的代码,还方便了今后对对象内部的修改和升级。
●继承(inheritance)——利用问题和事物的相似性,通过类的(多层)继承机制,
可以达到减少软件开发难度和重用已有对象的属性和方法之目的。
●多态(polymorphism)——同一操作或响应,可以同时针对多个可选的类型和对
象,并且能够自动在它们中间选择最合适的来进行。多态可以分为:
⏹编译时多态:包括函数和运算符的重载(overload),通过早期的静态绑定
(binding)来实现。
⏹运行时多态:通过继承结合晚期动态绑定来实现——用同一基类的指针,可以
访问各个不同派生类中的同名方法和函数。
2.基本概念
面向对象编程的基本概念(类似的概念多、表达不够准确、各处的用法各异):
●抽象(abstraction)——一个问题的本质特征。忽略一个对象的细节,致力于一般
的合适级别的程序能力。抽象是在事物的周围绘制透明的盒子,是定义事物接口的行为。
●信息隐藏(information hiding)——限制外部对类属性(数据成员)的访问。
●封装(encapsulation)——将某种保密和隐匿应用到类中的数据和一些方法(函数
或子例程)上。封装确保一个对象只能通过确定的渠道(即类的公用方法)才可被修改。封装意味着将数据及相关函数打包到一个单一的单元(类)中。每个对象暴露一个接口(公用方法),规定其他对象可以如何读取或修改它。
●类(class)——问题的抽象,对象的模版,接口的实现。例如int是整数的模版、
CPoint是点的模版。
●对象(object)——问题中的事物,类的实例(变量),拥有数据和功能。若int i;
CPoint p;则i是int的实例变量,p是CPoint的实例对象。
●实例(instance)——一个对象,是某个类的示例。
●实例化(intantiate)——由类定义创建对象。
●继承(inheritance)——创建子类的机制,一种“is a”或“is like”关系,形成类
层次结构。是OOP中对象重用的核心概念。
●子类(subclass)——继承自另一个类的派生类(derived class)。
●超类(superclass父类)——被另一个类继承的基类(base class)。
●虚函数(virtual function)——可以在子类中被覆盖(override)的函数。
●纯虚函数(pure virtual function)——只有声明没有定义的函数,必须在派生类中
被覆盖。
●抽象类(abstract class)——至少包含一个纯虚函数的类,不能被实例化。
●具体类(concrete class)——可以实例化的类,不包含纯虚函数。
●接口(interface)——纯抽象的类,类的模版。接口中的所有的方法(成员函数)
都只有声明,没有定义(都是纯虚函数)。必须在接口的派生类中,实现接口的全
部方法。接口可以看成是一个,定义了一套内部行为的,若干操作特征标记的集合。
(在C++中,也把类的公用成员函数叫做接口)。
●属性(attribute)——类和接口中的数据信息,又叫数据成员(data member)或成
员变量(member variable)。属性是类知道的事物。
●方法(method)——类操作的实现,又叫成员函数(member function)。方法是类
要做的事情。(在C++中,也把虚函数叫做方法)。
●重载(overload)——一个类中的,参数的数目、类型或排列顺序不同的多个同名
方法(成员函数)。
●覆盖(override)——在子类中重新定义(与父类中的定义有区别的)属性和方法。
●持久化(persistence)——将对象存入永久存储中(如文件、数据库等)。
●持久对象(persistent object)——存入永久存储的对象。
3.简史
计算机科学中,对象的概念和实例,最早于1960年出现在MIT的PDP-1中,1963年Ivan Sutherland在其博士论文中所编写的计算机程序Sketchpad中应用了对象技术。
但是,作为一种程序设计方法,OOP最早出现在1967年,由挪威计算中心的Ole-Johan Dahl和Kristen Nygaard,在他们发明的Simula67语言中首先引入的。Simula语言是在Algol60基础上,加入了对象、类和继承等概念后开发出来的,它在OOP的历史中占有重要地位。
Smalltalk是1970年代,由美国施乐(Xerox)公司PARC(Palo Alto Research Center帕洛阿尔托研究中心)的Alan Kay、Dan Ingalls、Ted Kaehler和Adele Goldberg等人,开发的一种面向对象和动态类型的交互式程序设计语言。它受到了Sketchpad和Simula的影响,但是Smalltalk被设计成一个全动态系统的纯OOP,程序的所有成分都是对象(但是,为了提高运行效率,C++/Java/C#中的基本数据类型都不是对象),对象可以被动态地创建、修改和销毁。在Smalltalk中还创造出词汇“'inheritance(继承)”和“O
bject-oriented programming (面向对象的程序设计)”。
使OOP走向辉煌的是1985年发明的C++,随着GUI(Graphical User Interfaces,图形用户界面)的流行,C++的地位更加巩固。但是,因特网的发展和万维网的流行,又催生了另一个重要的OOP语言——Java(1995年)。为了与Sun公司的Java竞争,微软公司也推出了一种用于.NET组件编程环境的新OOP语言——C#(2000)。
4.语言谱系图
C 语言系列的发展简图如图17-1所示。C 语言是专门为编写操作系统而发明的,是一种面向系统编程的中级语言。C++是带类的C ,是为面向对象编程而设计的。Java 最初是为嵌入式设备创建的,后来改造成适用于跨平台的网络编程。C#则是专门为面向组件编程的.NET 而设计的一种源于C++、类似于Java 的OOP 语言。
C
(Dennis Ritchie 1972)
C++
(Bjarne Stroustrup 1985)
C#
(Anders Hejlsberg 2000)
Java
(James Gosling 1995)
面向系统编程
面向对象编程面向网路编程
面向组件编程
图17-1C 语言系列
图17-2给出了可用于.NET 编程的主要高级语言(包括C#、VB 、C++/CLI 、J#和F#等)的发展脉络。
17.1.2C++
C++是第一个广泛流行的OOP 语言,C++是在C
语言的基础上,添加了面向对象和泛型编程的功能后,扩展而成的。C 语言是C++的子集,C++是C 语言的超集。
1.C
C 语言是为编写操作系统而创建的一门高级语言,语法简洁、表达自由、库函数丰富,具有强大的功能和极大的灵活性,适用于高效的系统编程。
1)起源
basic语言属于高级语言1970年,AT&T 贝尔实验室的美国计算机科学家Ken Thompson 和Dennis Ritchie 等人在DEC 公司的PDP-7小型机上开发出了Unix 操作系统,最初的实现是用汇编语言写成的。
Ken Thompson (左)与Dennis Ritchie
为了使Unix操作系统具有可移植性,迫切需要一种高级语言工具。为此,Dennis Ritchie 以B语言为基础,参考了Algol68,于1972年设计出了C语言。1973年他们用C语言重写了Unix,1975年又利用C语言将Unix移植到了PDP-11上。
Fortran
(IBM/John Bacus1957)
Algol60
(Peter Naur1960)
CPL
(MIT1963)
BCPL
(Martin Richards1967)
C
(Dennis Ritchie1972)
C++
(Bjarne Stroustrup1985)
Java
(Sun/James Gosling1995)
C#
(Microsoft/Anders Hejlsberg2000)
Managed C++
(Microsoft2002)
C++/CLI
(Microsoft/Stanley
B.Lippman2005)
Simula67
(Ole-Johan Dahl&
Kristen Nygaard1967)
Smalltalk
(Alan Kay等1972)
B
(Ken Thompson1970)
Pascal
(Niklaus Wirth1970)
Object Pascal
(Niklaus Wirth&
Larry Tesler1985)
Delphi
(Borland/Anders
Hejlsberg1995)
Basic
(John Kemeny&
Thomas Kurtz1964)
Visual Basic
(Microsoft/Alan
Cooper1991)
Visual Basic.NET
(Microsoft/Paul
Vick2002)
Visual J# (Microsoft2003)
.NET/CLI (Microsoft/Anders Hejlsberg2000)
Visual J++ (Microsoft/Anders Hejlsberg1998)
ISWIM
(Peter J.Landin1966)
ML
(Robin Milner等1973)
Caml
(Gérard Huet等1985)
OCaml
(Xavier Leroy等1996)
F#
(Microsoft/Don
Syme2002)图17-2主要编程语言工具的发展
2)特点
C语言是一种可移植的系统语言,拥有充分的控制语句和数据结构功能,包含丰富的操作符,从而能够提供强大的表达能力,可以用于许多不同的应用领域。但是,C语言并不是面向科学家和计算机业余爱好者的,而是专门为程序员设计的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论