vc
源代码在线查看: subject_34644.htm
序号:34644 发表者:小抱枕 发表日期:2003-03-31 22:57:13
主题:C#是面向对象还是不是?
内容:呵呵
返回上页访问论坛
回复者:叮当 回复日期:2003-03-31 23:41:02
内容:是!//呵呵,一个字就可以挣50分啊~
返回上页访问论坛
回复者:bird 回复日期:2003-04-01 09:15:56
内容:锦上添花::::::::::::::::::::::::::::::::::::::::::::::::面向对象编程(Object-Oriented Programming ,OPP)是一套概念和想法,是一种利用计算机程序来描述实际问题的思路,也是一种直观,效率更高的解决问题的方法. 面向对象的一些专有名词:类(Class)名称空间(Namespace)封装(Encapsulation)继承(Inheritance)多态性(Polymorphism)抽象化(Abstraction) 面向对象的缘由面向对象的缘由主要是为了解决2个问题:1,程序代码的重复使用,由此种机制可以增加程序开发的速度.2,降低维护负担,将具备独立性特制的程序代码包装起来,同时修改部分程序代码时,不至于会影响到程序的其他部分. 在过去,为了增加程序代码的重复使用,程序员将重复出现的程序代码包装成一个个函数,在要使用到此函数时,在程序代码中调用此函数,以达到重复的目的.当有许多不同的项目要使用到函数时,最简单的方式就是把这些函数独立成为一个文件。可独立成原始代码文件,或是采用外部的动态连接函数库(DLL),然后在每个项目中引用这些共用函数,以达到共享的目的。但在这个阶段中达到共享代码的目的时却隐藏了一些问题:共用函数库中包含的函数数以千计,要了解每个函数的用途和输入、输出参数相当困难。共用函数库通常使用全局变量,在各函数之间互相传数据,了解全局变量与各函数之间的相依关系相当的繁杂。共用函数库可能会分散在不同的电脑上,要在不同的电脑之间维护共用函数库的版本一致性也相当繁杂。共用函数库版本更新时,可能会造成使用这些函数库的程序无法运行,造成维护上的困难。我们该怎么解决呢? 这就牵涉出了类。 类共用函数数以千计,比如说在C#中定义许多函数可以让你绘图,有些函数则用来存取文件,某些函数用来管理文件,不过问题是,谁有办法记得所有的函数用途呢?共用函数数以千计,为了让函数库能易于使用,便将这些函数分门别类。举例来说,针对文件操作的函数分为File一类,针对数据存取的函数分成DataSet一类,以便于程序员的查询和使用,这就是所谓的类。那么类多了怎么好管理呢?这就牵涉出了名称空间。名称空间共用函数在分门别类后,在查询上比较容易,不过这又连带的衍生出一个问题:不同的分类中可能会包含相同的名称空间,这就是所谓的命名冲突问题。举例来说,一个软件里的A类用来计算加减,而你调用其他软件类时,它的A类却是用来计算乘除的,为了解决名称冲突的问题,就有了名称空间的概念。类似JAVA的Package,将类放到名称空间之下管理,若要使用某类时,将语法修改成 “名称空间.类名称”。如此,不同的名称空间之下就可以使用相同的函数名称和类了。 过去的程序员为了达到重复使用代码的目的,而将这些函数独立成文件,可让其他程序员引用。不过使用函数库还有一个潜在的问题:全局变量(GlobalVariable)难以维护。举例来说,有两个函数共用一个变量,因此将这个变量声明在全局变量的区段,但是共用函数库的其他函数,也看到了这个变量,但却从来都不会使用到这个变量,因此,你必须为所有的全局变量做好良好的解释,详述有哪些函数使用到这个全局变量等。这些信息非常的不容易维护,而且也容易导致变量名称冲突错误。那么怎么解决全局变量这些问题呢?这就牵涉出了数据封装。数据封装数据封装就是用来解决全局变量不容易维护的问题。数据封装的意义是将这些函数按照其功能分门别类后,再把每一个分类的函数所共用数据包装起来,只有这个分类的函数才能调用这些数据。“实例的属性和行为的封闭,封装后的属性只能被对象名调用;封装后的属性只能被过程访问”(摘自《计算机操作系统教程 第2版》) 之前提到的,为了让程序代码更容易的重复使用,过去采用的原始代码共用的方法,不过大部分只是停留在将别人已经写好的程序代码复制过来,在加上一些功能,如此,这只是共用程序代码而已,而不是重复使用别人已经写好的功能。那么怎么样才能解决重复使用别人已经写好的功能呢?这就牵涉出了继承。继承继承的主要目的就是希望能够重复的使用别人写好的功能。指定一个类与另一个类之间的某种关系。你可以将一个类继承下来,然后就可以使用到里面编写的所有函数。举个例子来说,A类定义了一个方法X 而B类继承了A类,也就是继承了A类的方法,则建立了B类以后,就可以调用A类的X方法了。继承里的叫法还有很多,比如父类(A),子类(B)什么的,只是语异意同。 继承别人类里已经编写好的功能原本是个不错的主意,但是或许你并不需要基础类的所有方法,比如刚才的A类里,除了X方法外还有Y、Z方法,但我只需要使用到X方法,不需要Y、Z方法,或有时基础类提供的方法不是我想要的时候。这是该怎么办呢?这就牵涉出了多态性。多态性对于多态的解释有很多,我们可以大致理解为,为了加强继承的弹性,常常会需要变更某些继承下来的功能,但不改变函数,这就是所谓的多态性;再简单点定义就是说,“允许老代码调用新代码的能力”(摘自Tom Archer的《C#技术内幕》一语);另如“多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作”(摘自Charlie Calverts的《Delphi4 编程技术内幕》) 虽然继承别人以写好的功能,使程序代码更容易重复使用,不过试想一下,若修改了基础类(Base Class)中函数的程序代码,继承基础类的扩展类是否还能正常的运做呢?如果基础类是自己开发的,要修改你的程序决不是什么问题,但若基础类是别人的比如微软的,那就不好说了。这又该怎么办呢?这就牵涉出了抽象化。抽象化抽象化概念的生成是为了要降低程序版本更新后,在维护上面的负担。使得功能的提供者,和功能的用户能够分开,各自独立,彼此不受影响。 接口为了达到抽象化的目的,需要在功能提供者与功能使用者之间提供一个共同的规范,功能提供者与功能使用者都要按照这个规范来提供、使用这些功能。这个共用的规范就是接口了,接口定义了功能数量、函数名称、函数参数、参数顺序等。它是一个能声明属性、索引器、事件和方法的编程构造。它不为这些成员实现,只提供定义。接口定义了功能提供者与功能使用者之间的准则,因此只要接口不变,功能提供者就可以任意更改实现的程序代码,而不影响到使用的人,当然除了不能实质上的变动。很多人都把继承和接口搞混淆了,其实举个例子想因该会明白,继承就好象自己做的内部开发的调用一样,如先前的A类B类X方法,而接口就好似两个以上的体系做的共同规范,如我们调用WINDOWS API一样.
返回上页访问论坛
回复者:bird 回复日期:2003-04-01 09:18:39
内容:锦上添花::::::::::::::::::::::::::::::::::::::::::::::::C# 推出后,议论纷纷,有说,C#要取代 Java。这种说法为时尚早,需要看 C# 的发展前景。不过,C# 真的是一种非常强大的快速开发语言。1)。如果不包括 指针部份的话,可以说,C# 的面向对象的程度要比 Java 还要高!C# 中的基本类型都是基于对象的,例如: int, 当你定义一个 int 型变量以后,你就可以通过这个变量来访问 int 类型的成员。实际上,C# 为每一个基本类型都内建了相应的类,如: int --> Int32, Int32 是系统提供的一个类,基本类型 int 就映射为类 Int32.而Java中你找不到这样的内建关系的。Java只是提供了操作这些基本类型的工具类。如: Interger 对应于 int. 但是这只是一个简单的操作基本类型的工具,int 在Java中并不是基于对象的。C#参考大多数面向对象的语言,并且解决已有的面向对象语言的一些弊病,可以说,C#大大提高了面向对象语言的技术和实用性。2)。 C#强大的功能是Java无法比拟的。它拥有VB开发的快捷和C++ 的强大!任何VB 和C/C++所能做到的,你都可以用C#简单的做到!也就是在Windows 平台下,C# 足以取代 VB 和 C/C++. 而且C# 较 Java在面向对象的开发上还简单!C#提高了语言面向对象的技术和思想。结合了面向模块和面向对象的技术。使用户使用起来更方便,更快捷!而且提供了非常强大的兼容性,你可以用C#调用已用的VB,C/C++程序,COM, VBX... 几乎是所有微软产品的总接口。3)。 C#的速度是Java可望而不可及的!C#为了跨平台也采用了 JIT,但是不是简单的移植和套用原有的JIT技术,而是JIT的发展与提升!自从接触 C#后,Java已对我没有任何吸引力,几乎不用了。但是,令人担心的是,C#并没有公开语言的细节。你不知道C#在Windows平台上的编译格式,也不知道C# JIT 的规格。因此你很难开发出自己的跨平台的C#编译器。这样一来,C#就牢牢地掌握在微软的手里。C#的更新提高,你只能听名于微软。谁指定的标准不可怕,可怕的是标准掌握在谁的手里!C#固然可怕,但是更可怕的是C#背后的平台 .NET, C#只是 .NET 的一把为其添土,固堤的铁锹而已。当.NET 大行其道的时候,才是最可怕的时候 !
返回上页访问论坛
答案被接受回复者:bird 回复日期:2003-04-01 09:19:28
内容:注意::::::::::::::::::::::::::::::::::::::::::::::::::::::::::令人担心的是,C#并没有公开语言的细节。你不知道C#在Windows平台上的编译格式,也不知道C# JIT 的规格。因此你很难开发出自己的跨平台的C#编译器。这样一来,C#就牢牢地掌握在微软的手里。C#的更新提高,你只能听名于微软。谁指定的标准不可怕,可怕的是标准掌握在谁的手里!C#固然可怕,但是更可怕的是C#背后的平台 .NET, C#只是 .NET 的一把为其添土,固堤的铁锹而已。当.NET 大行其道的时候,才是最可怕的时候 !
返回上页访问论坛