`

为什么要使用接口编程

阅读更多

r看了接口编程这篇文章,理解蛮透彻的.记录下:

进行接口的介绍,必须介绍一下程序语言发展的历史才行,鲁迅先生说过“治学先治史”,明白了程序语言发展的前世今生,才能知道为什么这么多语言为什么会这样,为什么么会那样?

计算机出现以后,科学家相继开发了多种语言,从smalltalk,Pascal,Basic,C语言,C++,java,.net等等,这些语言的发展步伐,可以看作是从面向过程向面向对象发展的一段历史。很多面向对象的书在介绍自己的历史的时候,都会给读者介绍这一段历史,并鼓吹OO编程是多么多么的优异。问题是,很多刚开始学程序的人根本不知道为什么要有这个转变,他们也很难理解OO语言中的虚函数,接口等概念到底为了什么而提出来。

我们在了解这一段历史以前,首先给大家介绍一个概念——“粒度”,什么是粒度?作者认为所谓粒度其实就是一个程序中使用代码单元的组合尺度,我们可以举一个例子,沙砾——砖块——房屋模板,我们设想去修建一座房子,其实有很多中修筑方法,如果你不闲麻烦,可以使用沙砾一点点地建筑,或者将沙砾烧制为砖块,用砖块来砌,甚至直接从工厂购买房屋的门,窗,墙组件来堆砌。这三种不同的方法代表了三种不同的组合尺度。沙砾是最小的单位,使用它搭建小的房子说不定还可以,但是毫无疑问,我们必须使用很多很多“沙砾”,不便于管理;砖块比沙砾聚合了一层,可以用来修建较大的房子了;房屋模板是最高的尺寸,使用它可以快速地搭建大规模的房屋。这三种尺度的区别和联系,与我们编写程序概念是有很大的相似之处的。

在早期学习Pascal,老师告诉我们这种面向过程语言的最基本的单元是过程和函数,它们是程序中的最小的组件。过程和函数可以实现最基本的代码重用,当我们把某些固定功能的代码使用过程和函数编写后,我们可以在程序中调用它们而不必在任何需要的地方都写上这样一段代码,这样的好处是显而易见的。在一些小型的程序里面,使用过程和函数是合适的,但是在大中型程序中,它们的弊端就显示出来,过程和函数的粒度太低了,如果我们一个系统,有10000个函数和过程,我们的程序员将不得不花费大量的时间去寻找和维护它们,10000个没有任何关系的函数和过程的管理难度是显而易见的,就好像10000个人的企业一样,如果没有部门和职务,这还不乱了套?!

面向对象语言的出现,就是为了解决这个问题,别听OO语言吹的天花乱坠,其实它出现就为一个理由——提高编程的粒度。面向对象语言的基本单位是类 CLASS,类封装了很多数据成员和成员函数,过程,将最小组件的提高了一个等级,我们需要直接操作的不是过程和函数了,而是一个个更高层次上的类。我们把10000人分了很多部门,不同的部门负责不同的事宜,这样公司终于可以走上正轨了。

做成了类CLASS是否就万事大吉了呢?不一定,新的问题随之而来,也许我们有一个部门的人很多,可以做很多事情,如何在部门内部实现更好的管理呢?好比我们有一个类,它提供了很多种方法和属性,这些方法和属性其实可以分为一堆堆,为不同的功能服务,但是我们的类并没有做这个管理。在AO种,map对象拥有很多功能,比如管理图层,管理元素,管理选择集,进行地图显示,每种不同的功能都有好多方法和属性,现在这些属性和方法是杂乱无章,没有任何区别堆积在一个类里面的,当我们的程序员需要寻找一个方法的时候,不得不一个个去寻找,很不方便。

这个时候,接口interface出现了,C++的发明者第一次提出纯虚函数(其实就是接口)概念的时候,遭到了很多抵制,很多人都不明白接口的意义何在,我们用虚函数好好的,何必又出来个啥东西都没有的空架子?说它是类吧,又不能实现产生一个对象;说它是对象吧,又没有方法体来使用。接口出来干了一件好事,就是将类内部进行分类。对于map对象,我们可以做好几个接口,这些接口中定义不同功能的方法,函数和属性,map类实现这些接口,这样我们可以使用接口定义,实现对象。因此,所谓接口就是一系列相关方法与属性集合的定义。

Dim pGraphicsContainer as iGraphicsContainer
pGraphicsContainer=application.document.ActiveView.focusMap
pGraphicsContainer可以使用的属性和方法就只能是它定义的那部分了,而不能使用管理元素等的接口定义的方法和属性,那我们如何使用其它的功能呢?这就是所谓的QI(Query Interface)功能。从一个接口查询另一个接口。

Dim pGeoFeatureLayer as iGeofeatureLayer
pGeoFeatureLayer= pGraphicsContainer QI

好了,我们罗嗦了这么多,已经走进了COM的概念了,在正式介绍COM以前我们得最后罗嗦一点:计算机语言的发展历史,其实就是一部不断提高组件粒度的历史,不断提高代码重用的历史。以前我们使用过程和函数,后来我们使用类,现在我们使用接口,都是为了一个目的,让我们操作的组件在具体和抽象之间寻找一个平衡点。太具体了,如过程和函数,就没有了框架;太抽象,如类,就无法分别。


一个代码示例:
public interface IForm
{
void Show();
void ShowDialog();
}

public class A:IForm
{
public void Show()
{
}
public void ShowDialog()
{
}
}

public class B:IForm
{
public void Show()
{
}
public void ShowDialog()
{
}
}


public class FormFactory
{
public static IForm CreateInstance(string parm)
{

if (parm == "A")
{
return new A();
else if (parm == "B")
return new B();
}
return null;
}
}

分享到:
评论

相关推荐

    为什么使用接口编程WORD文档

    【为什么使用接口编程】 在软件开发中,接口编程是一种重要的设计模式,它的核心思想是通过定义规范而不是具体的实现来组织代码。接口编程的引入源于程序设计语言从面向过程到面向对象的发展历程,它旨在提高代码的...

    面向接口编程详解

    综上所述,面向接口编程不仅有助于构建高度解耦、易于扩展的系统,而且还能够在设计阶段就考虑到系统的灵活性和可维护性,为后续的系统升级和维护提供了便利。通过理解和实践面向接口编程的思想,开发者可以更好地...

    面向接口编程。面向接口编程。

    面向接口编程是一种重要的软件设计原则,它强调程序之间的交互应当基于接口而非具体的实现类。这一概念在面向对象编程(OOP)中占据了核心地位,尤其是对于构建可扩展、灵活和可维护的系统至关重要。以下是对面向...

    java中的面向接口编程

    在java中,面向接口编程是通过使用接口和抽象类来实现的。接口定义了一个对象可以执行的操作,而抽象类则提供了一个基本的实现。通过组合接口和抽象类,开发者可以创建出更加灵活和可维护的系统。 面向接口编程是...

    java面向接口编程

    在Java编程语言中,"面向接口编程"是一种重要的设计原则,它强调了程序设计应以接口为中心,而非具体的实现类。这种编程范式有助于提高代码的可扩展性、可维护性和松耦合性。让我们通过生活中的实例和给定的类文件来...

    面向接口编程而不是面向实现编程

    4. **使用接口**:在需要的地方,我们使用实现了接口的对象,而不是直接创建实现类的实例。这样,我们的代码对具体实现保持无知,增强了灵活性。 5. **配置和管理**:在应用的配置中,我们可以指定哪些实现类应该被...

    面向接口编程

    面向接口编程是软件设计中的一个重要概念,它倡导的是在代码中使用接口而非具体的实现类来进行交互。这种编程方式能够提高代码的灵活性、可扩展性和可维护性,是面向对象编程中的核心原则之一。在Java、C#等面向对象...

    mybatis之接口编程(2)

    在接口编程中,MyBatis还支持动态SQL,即在映射文件中可以使用条件判断、循环等逻辑,使SQL更具动态性。例如,我们可以使用`<if>`、`<choose>`、`<when>`、`<otherwise>`等标签实现条件判断。 五、事务管理 ...

    面向接口编程(经典但无实例)

    3. **学习曲线**:对于新手开发者来说,理解和使用接口编程模式可能需要一定的学习时间,尤其是在大型项目中。 ### 结论 面向接口编程是现代软件开发中不可或缺的一部分,它帮助开发者构建出更加健壮、可维护和可...

    SCSI接口编程 SCSI接口编程 SCSI接口编程

    在本文中,我们将深入探讨SCSI接口编程的关键概念、原理以及相关的编程技术。 首先,理解SCSI的基本原理至关重要。SCSI是一种并行接口,最初设计用于连接硬盘、磁带驱动器、CD-ROM等存储设备,后来发展到支持打印机...

    VC++USB接口编程实例

    本文将深入探讨使用VC++进行USB接口编程的关键知识点,结合提供的"VC++USB接口编程实例",我们将理解如何利用C++语言来与USB设备进行通信。 1. **USB基础知识**: - USB是一种连接外部设备的标准,它提供了高速...

    面向接口编程 (C#)

    面向接口编程是一种软件设计策略,它强调程序组件之间的交互应基于接口而非具体实现。在C#、ASP.NET和Visual Studio的开发环境中,这种编程范式是构建可扩展、灵活和可维护的应用程序的关键。以下是对这个主题的详细...

    面向接口编程详解——思想基础

    面向接口编程是一种编程范式,它是面向对象编程(OOP)的一个重要组成部分,而非独立的编程思想。在面向接口编程中,我们关注的是定义清晰、明确的行为规范,而不是具体的实现细节。接口作为一种契约,规定了类必须...

    面向接口编程详解(三)——模式研究.doc

    面向接口编程是一种重要的软件设计原则,它强调程序的组件应通过接口进行交互,而不是直接依赖于具体的实现。在本文档的第三部分,作者探讨了如何在实际的模式中运用这一原则,通过分析MVC(Model-View-Controller)...

    java实验 面向抽象与接口编程

    在面向抽象和接口编程的过程中,要特别注意以下几点: - 抽象类可以有构造方法,但接口不能。 - 接口中的方法默认是public abstract的,没有访问修饰符也可以。 - Java 8引入了默认方法(default methods),允许...

    Matlab6.5应用接口编程

    每种接口都有其独特的优势和适用场景,学习如何选择和使用这些接口是接口编程的关键。 1. MATLAB Builder:通过MATLAB Builder,开发者可以将Matlab代码转换为可执行文件或.NET组件,使非Matlab环境也能调用Matlab...

    接口编程学习

    在面向对象编程中,接口编程尤为重要,因为它有助于降低各对象间的耦合度,并促进模块化的设计。通过定义清晰的接口,开发者可以更加灵活地替换系统中的各个部分,而不必担心对其他部分造成影响。 #### 二、接口...

Global site tag (gtag.js) - Google Analytics