今天去应聘被问到一个基础问题,可是我实在不知道该怎么回答
在我们编写程序的时候会考虑到这个类应该定义为抽象类,什么情况下会定义一个接口
还有就是面向对象对象的编程提供哪三大支持

解决方案 »

  1.   

    狭义的接口是非常原始和简陋的,不能保存代码,也不具有传递性。例如类型B继承自类型A,A的接口I就必须在B中重新声明并且要重新在B中写I的实现代码。而类具有完整的对象接口(从广义的、实在的角度上),它保存继承可以“自动”被子类共享,它也保持了传递性与客观世界的描述一致(如果“棋”具有的接口在“象棋”中被丢失了,这是有语言缺陷的,但是狭义接口就有这个缺陷)。在c++、smalltalk等经典的面向对象语言以及Effil等先进的面向对象语言中,没有接口概念,只有继承(包括虚类型)概念。在c#、VB.net中,不支持多重继承,给描述对象造成严重障碍。例如一个对象类型“工程师”在时候系统扩展的时候发现还具有“小股东”的身份和职责,就无法用单重继承来表示。此时,不得不退而求其次,把“小股东”写为接口并且大量修改“工程师”的代码来委派这个“小股东”接口的实现代码。不支持多重继承其实真的是一大失误,它并不一定就提高多少性能,也不一定就能够避免继承被“滥用”。现在这类OOP语言占据主流,于是给AOP等东西带来的机会。
      

  2.   

    可是当我们在疯狂的使用微软给我们封装好的类时候这些问题其实往往是最容易忽略的啊
    我们只知道拿把已经做好的类或者接口拿来使用,但是有的时候真的有点搞不明白为什么
    他们要把这些定义为接口,类,抽象类我现在很担心5年以后的。NET程序员还明不明白
    什么是面向对象的编程,至少现在我已经有点疑惑拉。。回答正题请继续解答。。谢谢,
    大家还是没有把这个问题说明白啊。。
      

  3.   

    我已经说过,我相信 c++、smalltalk、Effil的程序员在设计软件架构方面有优势。不过,.Net强调“实用”,它推出大量的框架体系,因此就像 COM 刚出现的十年还是有大多数人认为“COM不支持继承是它的优势、是好的设计模式”,直到 MS 把牵牛鼻子的绳子调转方向了者大多数照样会跟着掉头。COM 的特性必然强调接口。而 COM 用在 MS 自己的c++语言中就不需要遵循 COM 的设计理念同样,在 .net framework 中大量使用的东西都是最终目标代码实现的结果,不代表设计语言应该选择编程语言来,甚至你也完全可以使用非 MS 的 .net开发语言(其它设计思想,例如人工智能风格的)来更高效率地设计 .net 软件。
      

  4.   

    软件扩展性主要就是个“多态”的概念而已,继承、接口都不过是一种实现方式。目标语言一定是比较低级的、根据市场口味的,目标语言中90%以上的东西应该都是实现时才采用的,只有不足10%的东西在设计所用的原语言中一点对应物。我不担心因为 MSIL 设计的不足就会限制面向对象思想。