第7章 接口

转载 2006年06月04日 19:27:00

第7章   接口

软件由各个不同的功能模块所组成,各个不同的部分既相互独立,又互相影响。所以,在软件系统中,保证各个部分的独立性和互相无错调用就成了一对矛盾。

为了保证系统各个部分的独立性,高内聚、低耦合是系统设计必须遵循的基本准则。高内聚、低耦合的要求,不仅仅是在横向的各个模块之间的要求,也是系统纵向的各个层次之间设计所必须遵循的准则。关于系统层次设计的问题,在后面的应用软件系统架构部分会给与论述。

同时,为了保证各个部分的互相无错调用,必须对调用制定一系列规则,这些规则便是接口。因此,这里所指的接口,不是程序语言上的interface语法的含义,而是一个广泛的概念。

从本质上来说,接口就是一个契约,他规定了接口的实现者(服务提供者)和调用者(客户)之间的交互规范。接口的引入给系统设计带来了很大的灵活性,在对象、模块之间解藕、设计模式的运用等地方,都可以看到妙用接口的身影。可以比较夸张的说,接口技术是面向对象设计的灵魂所在。

“面向接口编程,而不是面向实现编程”2。为了使软件架构更加合理,同时,也为了团队之间的合作,以及后续软件开发工作的顺利展开,软件设计的第一个工作,便是为软件的各个横向和纵向的部分制定调用接口。

接口在服务的提供者和使用者之间签订了一个契约,将服务的具体实现封装起来,在保证双方各自独立的情况下,提供了功能调用的稳定性。当软件修改、升级或进行其他变动时,双方都可以各自独立的变化,但是,这个契约不能够变,这是软件稳定性的保证。

“面向接口编程,而不是面向实现编程”2。为了使软件架构更加合理,同时,也为了团队之间的合作,以及后续软件开发工作的顺利展开,软件设计的第一个工作,便是为软件的各个横向和纵向的部分制定调用接口。

特别注意的是,我们在设计基于数据库的应用系统的时候,当两个模块发生交互的需求时,应当避免使用直接在数据库中搬运数据的方法,而应当在程序中调用模块定义的接口方法,否则,对数据库的任何修改,都将带来噩梦般的问题。调用接口方法,而不是直接操纵数据库。

        下面来看一个具体的例子:

这是一个BBS的例子。为了清楚的说明问题,让我们把问题尽量简化。现在设这个系统共有两个组成部分:用户登录信息维护和论坛发帖。 

我们可以把这个系统划分成两个模块:UserSystemArticleSystem

UserSystem将会包含以下功能:

l   新用户注册

l   修改用户信息

l   用户登录

因此,UserSystem的功能可以用代码表示如下:

public class UserSystem

{

    public void CreateNewAccount(Account acount)

    public void UpdateAccount(Account acount)

    public bool Login(Account acount)

}

ArticleSystem的功能比较简单,就是发贴,代码可以如下:

        public class ArticleSystem

    {

        public void CreateNewArticle(Article article)

}

因为在发送帖子的时候,需要知道当前发贴的人,会用到UserSystem中的用户信息,因此,UserSystem必须提供这个访问接口,我们在UserSystem中添加一个属性:

public static Account GetCurrentLogAccount{}

这个GetCurrentLogAccount便是UserSystemArticleSystem提供的访问接口。ArticleSystem不需要知道GetCurrentLogAccount的具体实现方法,他只需要知道,当他需要使用用户登录信息的时候,调用这个方法就可以了。以后,无论UserSystem进行如何的变化,甚至改变数据库中Account表的设计,只要GetCurrentLogAccount这个调用接口不变,都不会影响ArticleSystem。注意:千万不要在ArticleSystem中直接SelectUserSystemAccount表。

以上的接口,是一个广义上的接口的概念。至于语言层面的接口的妙用,在《设计模式》中,几乎到处都是。

上面所述,是应用系统横向的接口,下面,我们来看系统纵向接口的问题。

关于系统层次的问题,在后面会详细论述,在这里,为了说明问题,我们先做一个简要说明。

Java-微信企业号接口课程

带你走进当下比较火爆的微信开发企业平台开发,畅享现有互联网的开发资源
  • 2015年01月28日 21:39

SSH第7章上机.zip ACCP8.0

  • 2017年10月25日 12:11
  • 7.8MB
  • 下载

Java - Thinking in Java 第7章 习题

1/** * 惰性初始化 * * Created by wang on 15/8/6. */ class Init { public Init() { System....
  • u012515223
  • u012515223
  • 2015-08-20 07:14:40
  • 2275

《深入理解计算机系统》——第7章(链接)

链接链接:将各种代码和数据部分收集起来并组合成为一个单一文件的过程。(这个文件可被加载或拷贝到存储器并执行)链接可以执行于编译,加载或运行时。静态链接:两个主要任务:1 符号解析:将目标文件中的每个全...
  • pianogirl123
  • pianogirl123
  • 2016-04-16 19:24:27
  • 310

《Python核心编程》第七章练习解析

《Python核心编程》第七章练习解析
  • guojuxia
  • guojuxia
  • 2015-03-31 14:35:32
  • 2033

Frank D. Luna龙书第二版第7章习题1答案

  • 2014年09月05日 16:58
  • 13KB
  • 下载

《python核心编程第二版》第七章练习解析

1.字典方法。哪些字典方法可以把两个字典合并到一起? 有个update()方法,不过如果key相同的话,会用后者的key-value覆盖前者的 2.略 3.字典和列表的方法。 (a) 建一...
  • u013938528
  • u013938528
  • 2015-05-01 10:49:52
  • 917

第七章 浮动与定位

1、元素的浮动属性float:指设置了浮动属性的元素会脱离标准文档流的控制,移动到其父元素中相应的位置的过程。      属性值:left     right     none     (如设置左浮动...
  • qq_34429167
  • qq_34429167
  • 2016-04-22 23:06:12
  • 183

ACCP8.0S2-Y2转换教材第七章

  • 2017年06月30日 11:58
  • 1.11MB
  • 下载

JavaScript_DOM编程艺术第二版学习笔记-第7章

动态创建标记 传统技术:document.write和innerHTML 深入剖析DOM方法:createElement、createTextNode、appendChild和insert...
  • sofia92
  • sofia92
  • 2015-12-16 09:20:53
  • 891
收藏助手
不良信息举报
您举报文章:第7章 接口
举报原因:
原因补充:

(最多只允许输入30个字)