对于接口而言,接口、函数、值类型、函数类型、参数类型、参数等都属于概念范畴,因此,在接口的静态模型中概念又可以如下表示。
concept::=API|Method |Value Type|method Value Type|para Value Type|Parameter|……
在定义接口本体模型中二元映射关系之前,先定义实例与概念之间的从属关系。
定义3 若实例a属于某一概念C,则称a为概念C的实例,记作C(a)。
例如,接口a是API的一个实例,那么它就可以表示为API(a).
在接口本体中,概念之间有两类二元关系,一种是继承关系,另一种是相交关系。接下来分别来定义这两种关系。
定义4 存在概念C和概念D,若对于概念D中的任意实例x,x都属于概念C,则称概念D是概念C的子概念,记作hasChild(C,D)。
例如,对于概念值类型Value Type而言,函数类型method Value Type和参数类型para Value Type都是它的子概念,可以分别表示为hasChild(ValueType,method-Value Type),has Child(Value Type,para Value Type)。
定义5 存在概念C和概念D,若对于概念D中的任意实例x,x不都属于概念C,且对于概念C中的任意实例y,y也不都属于概念D,则称概念C与概念D之间存在相交关系,记作intersect With(C,D)。
同样以概念method Value Type和para Value Type为例,在C和C++编程语言中,规定函数的类型不能是函数类型和数组类型,而对于形参而言,是没有void 类型的,在VB编程语言中,形参类型还不能是定长的字符串。由于两个概念之间存在诸如int、float、string等相同的实例,又存在不同的实例,因此两个概念之间是相交的关系,可以表示为intersect With(method Value Type,para Value Type)。
以上介绍的是概念与概念之间的两类二元关系。概念的实例与实例之间有很多关系,这里给出一个统一的抽象的定义,并通过一个示例来解释说明。(www.xing528.com)
定义6 若存在实例x属于概念C1,实例y属于概念C2,而x与y可以使二元函数R成立,则称x与y之间具有R关系,记作R(x,y)。
以设计模式中观察者模式的主题接口为例,如图4 所示,Subject接口中有三个函数,函数register Observe是用来注册观察者的,函数remove Observer是用来删除观察者的,两个函数的类型都为void,同样都需要类型为Observer的输入参数o。函数notify Observers是在主题状态发生改变时,用来通知所有观察者的,它的函数类型同样为void,但是它没有输入参数。
图4 观察者模式的主题接口
在这个例子中,Subject是接口这一概念的实例,函数register Observe、remove-Observer以及notifyObservers是函数的实例,类型void 和Observer分别是函数类型和参数类型的实例,而形参o则是参数的实例。接下来,分析这个示例中实例与实例之间存在的关系。
(1)实例之间的从属关系belongTo(x,y):表示实例x属于实例y。
例如,函数registerObserve是接口Subject中的函数,且它只属于接口Subject。因此由函数registerObserve可以确定接口Subject,两者之间的关系就可以用belongTo(registerObserve,Subject)来表示。
(2)实例之间的具有关系hasType(x,y):表示实例x的类型为实例y。
同样以函数registerObserve为例,如图4 中所示,函数的registerObserve的类型为void,void 是函数类型的实例。任何函数都只对应一种函数类型,即,由函数可以确定它的类型。因此,两者之间的关系就可以用hasType(registerObserve,void)来表示。
在接口模型中,实例与实例之间的二元关系远不止这两种,本书将在3.2 节中从另一个角度出发,继续讨论。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。