`
lylyb
  • 浏览: 90426 次
  • 性别: Icon_minigender_1
  • 来自: 烟台
社区版块
存档分类
最新评论

为什么要使用接口编程(转)

    博客分类:
  • JAVA
阅读更多
看了接口编程这篇文章,理解蛮透彻的.记录下:

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

计算机出现以后,科学家相继开发了多种语言,从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;
   }
}


分享到:
评论

相关推荐

    C#的四个基本技巧(如果可能尽量使用接口来编程)

    #### 技巧一:使用接口编程增强代码灵活性与稳定性 在.NET框架中,接口(Interface)与类(Class)都是基础的组成部分,但在编程实践中,优先选择接口进行设计有着不可忽视的优势。接口定义了一组方法、属性或事件...

    MATLAB与外部程序接口编程

    《MATLAB与外部程序接口编程》是一本深入探讨如何使用MATLAB与其他编程语言进行交互的专著。在MATLAB环境中,外部程序接口编程允许我们利用MATLAB的强大计算能力,同时结合其他语言(如C、C++、Fortran等)的优势,...

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

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

    C# 接口编程教程doc版

    本教程将深入探讨C#中的接口编程,分为七个主要部分: **第一节 接口概述** 接口提供了多继承的能力,这是C#中类无法做到的。通过接口,一个类可以实现多个接口,从而表现出多种行为。接口在设计上强调了抽象和解耦...

    Spring_依赖注入_面向接口编程_不同加载方式

    另一方面,面向接口编程是一种重要的设计原则,它提倡在代码中使用接口而非具体实现。在Spring中,我们通常定义一个接口,然后创建其实现类。例如: ```java public interface ExampleService { void doSomething...

    Matlab6.5应用接口编程

    《Matlab6.5应用接口编程》是一本深入探讨如何利用Matlab进行高效接口编程的专业指南,适合于Matlab开发的工程师、科研人员以及对Matlab接口编程感兴趣的学者。Matlab6.5作为一款强大的数学计算软件,其丰富的功能和...

    接口编程学习

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

    C语言与MATLAB接口 编程与实例 李传军 编著 PDF

    本书还会讨论错误处理和调试策略,因为在接口编程中,可能出现诸如内存管理错误、类型不匹配等问题,了解如何有效定位和解决这些问题对于提高代码质量至关重要。 总的来说,《C语言与MATLAB接口 编程与实例》是一本...

    精通windowsAPI函数接口编程实例源代码

    《精通Windows API函数接口编程实例源代码》是一个深入学习Windows API编程的重要资源,它涵盖了大量实践案例,旨在帮助开发者熟练掌握API接口的使用技巧。Windows API是微软为开发者提供的一个平台,通过它,程序员...

    农行网上支付平台-商户接口编程指南-ASP.NET_Edition-V3.1.6.pdf

    这份农行网上支付平台商户接口编程指南主要针对使用***技术的开发人员,旨在详细说明如何通过编程实现与中国农业银行网上支付平台的对接。指南从发布至2019年的V3.1.6版本经历了多次更新,每次更新都对功能进行了...

    Delphi接口编程

    ### Delphi 接口编程详解 #### 一、引言 在面向对象编程(Object-Oriented Programming,简称 OOP)领域中,继承是构建软件系统的重要机制之一。继承允许新类从现有类那里获得成员变量和方法,从而实现代码复用。...

    Spring_依赖注入_面向接口编程

    本项目通过实际示例,帮助初学者理解Spring中的依赖注入和面向接口编程。 依赖注入(DI)是Spring框架的核心特性之一,它允许我们把对象的依赖关系从代码中解耦出来,转而由Spring容器来管理。在传统的编程模式中,...

    VB和MATLAB无缝接口编程.pdf

    在研究VB与MATLAB无缝接口编程的方法时,首先要明确接口编程的含义,即不同的编程环境或语言之间进行交互、共享数据或控制的过程。VB(Visual Basic)和MATLAB是两种广泛使用的开发工具,各有其优势。VB擅长构建用户...

    MATLAB 6.5 应用接口编程 飞思科技 著 PDF

    《MATLAB 6.5 应用接口编程》是由飞思科技编著的一本专业书籍,专注于介绍如何在MATLAB环境中进行高效的接口编程。这本书详细阐述了MATLAB 6.5版本中的各种接口技术,旨在帮助读者理解并掌握将MATLAB与其他软件系统...

    Mybatis面向接口编程1

    虽然单独看这个例子,似乎使用接口增加了额外的代码量,但在 Mybatis 与 Spring 整合后,接口的使用变得更为简洁。通过 Spring 的依赖注入,我们可以直接将接口注入到业务层组件中,而无需创建接口的实现类。Mybatis...

    使用android的binder机制,进行RPC,使用C语言接口编程.zip

    本资料主要探讨如何利用Binder机制来进行远程过程调用(RPC,Remote Procedure Call),并结合C语言接口编程进行实践。 一、Binder机制概述 Binder是Android系统中的一个核心组件,它允许不同进程间的对象进行交互...

    Mybatis接口编程方式实现增删改查

    在Java应用中,Mybatis通过接口编程的方式实现了增删改查(CRUD)操作,极大地提高了开发效率。下面将详细介绍Mybatis接口编程方式实现增删改查的核心概念和技术。 1. **配置文件**:Mybatis的配置文件(mybatis-...

    如何在Java中消除实现继承和面向接口编程

    消除实现继承和面向接口编程中的不当用法,并不是意味着完全放弃这些概念,而是要更加明智地使用它们。通过优先考虑组合、合理设计接口、有效利用泛型和集合框架以及灵活应用设计模式,我们可以构建出更健壮、更易于...

    MATLAB6.5应用接口编程.pdf

    本资料“MATLAB6.5应用接口编程.pdf”旨在为那些希望进行MATLAB混合编程的学习者提供指导。 混合编程是指在MATLAB环境中结合使用其他编程语言,以利用各自的优势。例如,MATLAB在数值计算和数据处理方面表现出色,...

Global site tag (gtag.js) - Google Analytics