`

为什么使用接口

    博客分类:
  • java
阅读更多
转自http://www.blog.sh/2006/gisbreeze/106351.html
进行接口的介绍,必须介绍一下程序语言发展的历史才行,鲁迅先生说过“治学先治史”,明白了程序语言发展的前世今生,才能知道为什么这么多语言为什么会这样,为什么么会那样?

计算机出现以后,科学家相继开发了多种语言,从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.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;
   }
}
这是逻辑的抽象

这是方法的具体

这就是编写程序的哲学.
分享到:
评论

相关推荐

    Java的接口简要介绍

    **为什么使用接口** 1. **多继承替代**:Java不支持多重类继承,但一个类可以实现多个接口,从而达到模拟多继承的效果。 2. **角色定义**:接口定义了一个角色,实现了接口的类扮演这个角色,它们必须实现接口中声明...

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

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

    操作系统为用户提供三种类型的使用接口

    1.操作系统为用户提供三种类型的使用接口,它们是命令方式和系统调用和图形用户界面。 。

    六合一综合平台,外挂系统接口使用手册.pdf

    六合一综合平台外挂系统接口使用手册.pdf 本文档是六合一综合平台外挂系统接口...本手册提供了外挂系统请求服务平台的接口调用规范、XML 文件格式定义、接口说明和接口列表等内容,为开发者提供了详细的接口使用指南。

    C#接口的使用

    - 泛型类和泛型方法可以使用接口作为约束,这样可以限制传入的类型必须实现特定的接口。 8. **C# 8.0及更高版本的接口新特性** - 可以在接口中添加静态成员,但这仅限于字段、属性、常量、方法和运算符。 - C# ...

    java使用XFire调用webService接口

    "Java 使用 XFire 调用 webService 接口" 在本文中,我们将学习如何使用 XFire 框架在 Java 中调用 webService 接口。XFIRE 是一个基于 Java 的开源框架,用于简化 Web 服务的开发和集成。下面,我们将通过一个简单...

    树莓派使用AV接口(RCA接口)视频输出config. txt配置

    如果我们想使用AV接口输出视频,就需要注释掉这两个参数,即将其设置为#_hdmi_safe_=1和#_hdmi_force_hotplug_=1。 这样,在config.txt文件中,我们可以添加以下配置: #hdmi_safe=1 #hdmi_force_hotplug=1 这样...

    人力资源(HrmService)WebService接口使用说明.rar

    《人力资源(HrmService)WebService接口使用说明》 在企业信息化建设中,Web Service作为一种松散耦合的通信方式,广泛应用于系统间的交互与集成。本文档主要针对泛微公司的E8、E9版本,以及Ecology8和Ecology9...

    FANUC机器人_EE接口的使用方法详解(图文).docx

    ### FANUC机器人EE接口的使用方法详解 #### 一、EE接口简介 EE接口,全称为End-Effector Interface,即末端执行器接口,在工业自动化领域中扮演着至关重要的角色。它主要用于检测和控制机器人末端执行器的各种信号...

    如何制作DLL接口及使用

    例如,我们可以创建一个名为`IDLLInterface`的接口类,其中包含若干个纯虚函数,如`void DoSomething()`,这个函数的实现将位于DLL的实际代码中。 创建DLL的步骤如下: 1. **定义接口**: 使用C++的抽象类(包含...

    C++使用com接口对Excel 文件进行常用操作

    C++ 使用 COM 接口对 Excel 文件进行常用操作 C++ 语言可以通过使用 COM 接口来操作 Excel 文件,实现读取 Excel 文件中的数据、获取有效的行列数、工作表等操作。此外,还可以打开选择的 Excel 文件、设置当前工作...

    通用文件上传下载接口使用说明

    通用文件上传下载接口使用说明 通用文件上传下载接口使用说明是指在 JAVA 环境下的一种文件上传下载接口...通用文件上传下载接口使用说明提供了文件上传、下载和删除三个主要功能,为开发者提供了便捷的文件操作方式。

    java 接口 java 接口java 接口

    Java接口在Java编程语言中扮演着至关重要的角色,它是实现多态性和抽象化的关键...理解和熟练使用接口是成为专业Java开发人员的基础。在实际项目中,正确地利用接口可以使代码结构清晰,易于维护,并提高代码的复用性。

    java接口的不同使用

    在Java编程语言中,接口(Interface)是一种非常重要的概念,它是类型定义的一种方式,用于规范类的行为。本文将深入探讨Java...在实际编程中,根据需求选择合适的设计模式,合理使用接口,可以极大地提升代码质量。

    第三方接口对接标准化接口文档

    本文档涵盖了接口的基本信息、接口调用方式、数据返回格式、基础数据、接口调用示意图等多个方面,旨在为开发者提供详细的接口文档。 一、概述 本文档是第三方接口对接的标准化接口文档,旨在规范化接口调用和数据...

    OPC全部接口,包含自定义接口,自动化接口

    包含的示例代码可能涵盖了如何初始化OPC连接,如何使用OPC接口进行数据读写,如何处理报警和事件,以及如何利用自定义接口进行特定功能的操作。通过学习和理解这些示例,开发者可以快速掌握OPC编程的基本方法。 5....

    通达信交易接口trade.ll、通达信交易接口购买、通达信交易接口最新

    接口的使用需要一定的编程基础,通常支持C++、C#、Python等语言,开发者需要根据官方文档进行编程接入。 2. **通达信交易接口购买** 购买通达信交易接口通常涉及以下步骤: - **联系提供商**:首先,你需要联系...

    主要讲解接口的实现和使用

    在编程领域,接口(Interface)是一种重要的概念,它在C#等面向对象的语言中扮演着规范和契约的角色。本文将详细讲解接口的实现和使用,帮助初学...通过理解和熟练使用接口,开发者可以构建更加灵活和可靠的软件系统。

    ukey开票接口电子发票接口文档发票接口文档

    《电子发票接口文档——以增值税发票税控开票软件数据接口规范3.0为例》 在信息化日益发达的今天,企业对于财务自动化的需求越来越高,其中,电子发票接口的使用成为了关键一环。本文将深入解析“ukey开票接口”与...

Global site tag (gtag.js) - Google Analytics