`

接口存在的意义

    博客分类:
  • java
阅读更多
J2EE 接口存在的意义
 

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;
}
}

分享到:
评论

相关推荐

    领悟php接口中interface存在的意义

    下面将详细阐述PHP接口`interface`存在的意义以及如何使用。 首先,我们来看一下给出的代码示例: ```php interface Ipay { function withmoney(); // function withinternet(); } class Dmeng implements Ipay...

    浅谈Java的接口的作用和意义.pdf

    浅谈 Java 的接口的作用和意义 Java 的接口是一系列方法和特征的集合,它可以对应 Java 中特定的语法结构。接口和抽象类不同,抽象类可以实现某些方法,而接口则不能。接口的概念较为抽象,可以理解为是一系列方法...

    浅谈Java的接口的作用和意义.docx

    Java 接口的存在意义在于它可以对类中的状态和动作进行描述,从而实现面向对象编程的思想。 在类中定义一个接口是有其必要性的,它代表着一种编程思想,定义接口的目的是让代码有更强的可扩展性。定义接口可以从...

    mpz_名片赞接口_

    3. **限流控制**:描述中提到每天可以领取1000个赞,这暗示了接口存在限流策略,防止用户过度消耗资源。常见的限流算法有滑动窗口限流、漏桶算法和令牌桶算法。 4. **数据库交互**:接口可能需要与数据库进行交互,...

    接口设计原则和方法.docx

    3. **有意义的命名**:无论是接口还是参数的命名都应具有明确的意义,使开发者能够快速理解其用途。避免使用模糊不清或者过于简略的命名方式。 综上所述,接口设计是一项既细致又复杂的工作,需要在实践中不断调整...

    论文研究-多接口主机的接口选择策略设计与实现 .pdf

    在多接口主机通信中,存在一些关键问题需要解决。首先是缺省路由的选择,即当多个网络接口都可用时,如何选择最合适的路径来传输数据包。其次是地址选择问题,即如何决定哪些数据包使用哪个网络接口的IP地址进行发送...

    接口定义Test.rar

    在IT行业中,接口定义是一项至关重要的任务,它涉及到软件系统之间的通信规范和标准。接口定义Test.rar这个压缩包文件很可能是...在实际开发中,理解和熟练运用接口定义对于提升系统的可扩展性和维护性具有重要意义。

    c8051f330 jtag转c2接口板

    - **RST/C2CLK**:这个引脚名表明了复位信号(RST)和C2接口时钟信号(C2CLK)的共用,这意味着在设计中可能存在复用逻辑,使得这两个功能可以通过同一个引脚实现。 通过以上分析,我们可以理解"C8051F330 JTAG转C2...

    笔记本电脑常用接口作用解析

    在现代信息技术高速发展的...了解并掌握各类接口的特点及其用途,对于提升工作效率和享受丰富多媒体体验具有重要意义。随着未来技术的不断进步,笔记本电脑的接口也将继续演化,以满足用户更高的连接需求和使用体验。

    金税接口软件介绍

    #### 二、税控接口软件的意义 针对上述问题,税控接口软件作为连接企业内部管理软件与防伪税控系统的桥梁,能够有效地解决上述问题。具体而言,税控接口软件可以实现以下几点: 1. **避免重复录入**:通过自动同步...

    HTML商城接口调用小例子.zip

    4. **接口编辑与发布**:`modifyapi`接口允许开发者修改已经存在的API配置。这可能包括更改接口的URL、请求参数、返回数据格式等。修改后,接口需重新发布到对应的环境(如开发、测试、生产环境)才能生效,确保更新...

    Java语言:什么叫面向接口编程

    #### 接口与实现分离的意义 接口与实现分离的思想强调的是“定义与实现”的分离。在传统的面向对象编程中,我们通常将行为的定义和具体的实现绑定在一起,即在一个类中同时定义方法的签名以及其实现细节。而在面向...

    接口测试线上培训总结1

    接口测试的意义在于它可以加速项目进度,提升工作效率,并确保系统的稳定性。 接口分为内部接口和外部接口。内部接口用于公司内部模块间或应用间的通信,而外部接口则涉及与第三方服务提供商(如微信、银联)的交互...

    E1物理层接口规范文档

    本篇文章将详细解读E1物理层接口规范的核心内容及其在实际应用中的意义。 #### 二、E1接口概述 E1接口是一种基于时分多路复用(TDM)技术的标准接口,它支持每秒2.048Mbps的数据传输速率。这种接口广泛应用于电话...

    西藏医保接口用户手册v1.2

    ### 西藏医保接口用户手册v1.2关键知识点解析 #### 一、引言与文档编制目的 《西藏医保接口用户手册v1.2》是针对西藏自治区医疗保险接口设计...对于西藏地区的医保服务来说,这份手册具有重要的实践意义和技术价值。

    接口压力测试工具可多线程

    这种测试对于识别系统的瓶颈、优化性能以及确保系统在峰值负载下的稳定性具有重要意义。 "接口压力测试工具可多线程"意味着我们可以使用支持多线程的工具来模拟多个用户同时访问接口,以模拟真实世界的并发场景。多...

    TI JTAG接口定义转换

    - **专用转换设备**:市面上存在一些专门用于JTAG接口转换的设备,可以直接使用。 ##### 2. 转换的意义 - **兼容性增强**:通过转换,可以使原本不兼容的系统能够互相通信。 - **功能扩展**:转换后的新接口可以...

    http接口测试工具

    - **错误检测**:找出接口存在的潜在问题,如无效请求的处理,异常情况的捕获和反馈。 - **性能评估**:测试接口在高并发情况下的响应时间和吞吐量,为优化提供依据。 - **自动化测试**:通过自动化脚本,持续...

Global site tag (gtag.js) - Google Analytics