接口和类

来源:互联网 发布:淘宝里,宝贝详情在哪 编辑:程序博客网 时间:2024/05/16 06:04
 
概要
接口和类代表了面向对象方法论的发展方向。类的概念出现在面向对象的初期,表征了现实中某个或某类事物,它是具体的;接口出现得比类要晚,表征了现实中的或某类事物的特性,它是抽象的。事物本身总有主次之分,面向对象的方法论也不例外。本文提出了接口为主,类为次的设计观点。
关键词 设计,接口,类,组合,继承
目录
1.      概述
2.      类和接口的发展
3.      根据接口来划分事物
4.      类“被弱化,接口变得更富有内涵
5.      面向接口而不是面向类编程
6.      接口的本质在于抽象
1.      概述
接口和类代表了面向对象方法论的发展方向。类的概念出现在面向对象的初期,表征了现实中某个或某类事物,它是具体的;接口出现得比类要晚,表征了现实中的或某类事物的特性,它是抽象的。在面向对象的词汇里面,还有一个很重要的概念,那就是抽象类,它可以看成是接口和类的结合体,它体现了理想和现实的平衡。
(注:本文提到的类不包括抽象类)。
2.      类和接口的发展
面向对象经过这么多年的发展,从最初的面向类的编程,到面向组件的编程,再到现在的面向服务的编程。其实我们很容易看到,类的概念在慢慢地弱化。而接口的内涵却得到了不断的丰富。
面向对象的类往往用来表征实际存在的、可感知的事物,代表的是一个非抽象的、具体的概念。接口是一个抽象的概念。实际存在的东西往往都是表象,是人们可以感知的,不断变化着的。而接口的抽象性决定它是基本稳定的,它的价值在于它体现了一类事物以后的发展的方向而不至于偏离事物的本质。无论是在面向过程的年代,还是面向对象的年代,或是面向服务的年代。我们都可以看到接口抽象的内涵和魅力。
在面向过程的年代,接口表征着一个系统对外开放的能力。
在面向对象的年代,接口表征着一个类所具有的特性。
在面向组件的年代,接口表征着一个组件所具有的特性。
在面向服务的年代,接口表征着两个同构或则异构系统之间的契约。
3.      根据接口来划分事物
         接口表征了某个事物的一个或一类特性。不同事物可能有着这样或那样的相同特性,譬如人和动物。而有些特性是某个或某类事物所拥有的唯一特性,故而我们可以使用接口来区别不同类的事物。因此,事物是完全可以通过接口来进行分类的。
         如果我们试图通过类来进行划分不同的事物,我们会发现它的表现力非常弱。因为类在很大程度上代表了某类特殊的事物,因此它往往不具有普遍性。即便在起初认为具有普遍性的类也会随着系统的腐化而慢慢变得特殊起来。
         而使用接口来划分就可以避免这一点。因为它生来就是抽象的,它代表着事物的本质。而事物的本质是基本稳定,不会发生变化的。
         因此我们应该按照接口而不是类对事物进行划分。
4.      “类“被弱化,接口变得更富有内涵
         在面向过程的年代还没有类的概念,系统是由一系列的过程和数据所组成,没有所谓的封装的概念;在面向对象的年代的初期,因为封装变化的需要,类几乎成为了面向对象的代名词;在面向组件的年代,类的作用开始被弱化,组件不再视为是类的集合,而是接口的集合,组件可以使用不同的技术来实现,而接口表征着这个组件的能力;在面向服务的年代,粗粒度的服务几乎已经没有当年类的影子,它虽然仍旧表征着一个或一类事物(系统),但是类的那些特征已经被自治、契约等所取代,而接口就以契约的形式浮于类之上。
5.      面向接口而不是面向类编程
         接口和类在很多语言中被视为是同一个概念。这样也引诱着人们将类视为接口,结果导致系统变得臃肿、僵硬、不可维护。关键的一点是,在一个系统中,类往往代表了特殊的概念的,在不断变化的需求中,类越来越特殊,最后变成了“四不象”,于是系统发生了腐变。因此面向类的编程并不是一个好的举措。
         而接口代表了一类抽象的概念,在设计良好的系统中,它往往有足够的抽象意义,也足够稳定。当需求发生变化的时候,某个接口所表征的特性可以基本不变化,新加入的特性可以各种各样抽象的方式来实现对事物本身的扩展。不但增强了设计的弹性和可复用性,也反映着事物本身的发展对于和谐和统一的需要。
6.      接口的本质在于抽象
抽象的魅力在于它让一个看起来很复杂的系统和日常生活一样充满和谐和统一。而 接口就是抽象的产物,它表征了对事物本质的抽象,在某个时期是基本稳定的。因此,接口的本质在于抽象。