2009年10月07日

在现实世界中,大多数的计算机系统都记录有关现实世界各种对象的信息。这些信息以记录、属性、对象或其它表现形式存在于计算机系统之中。典型的方式是将信 息片段记录成某个对象的一个属性。比如,将我的体重为185磅的信息记录成“人”这种类型的一个属性。本章将讨论该方法为什么会失效,并将提出更精确的方 法。

首先,我们将讨论熟练模式—-由数字和相关单位组合而成的一种类型。通过将数字和单位组合起来,我们能够更准确地对客观世界进行建模。将单位建模成为 对象,再将数量模式与之关联,我们就可以描述如何按照一定的转换率实现数量的换算。可以用符合单位模式来进一步扩展数量模式,符合单位模式可以用组成元素 清楚地表示复杂的单位。几乎所有的计算机系统都涉及到数量;币值总是应该使用这种模式来表示。

数量模式可用作对象的属性,以记录相关信息。然而,当类型存在大量的属性(这些属性和方法使得类型急剧膨胀)时,这种方法就会失去效用。在这种情况下,可 以用测量模式,其将各种测量视为相应的对象;这种模式还可用在需要为单独的测量保存相关的信息时。本章我们将从操作级和知识级的运用入手开始讨论。

测量模式允许我们记录数量信息。观察模式为了处理数量信息,进一步扩展了该模式;进而可以在知识级中进行观察概念的子类型化。为一个观察记录相关的观察方案模式通常是很基本的要求,这样做可以使临床医生更好的解释观察的效果,并更好地确定观察的准确度和灵敏度。

为了扩展观察模式需要大量的小模式。观察所发生的时间和被记录的时间之间的差异可以用双时间记录模式来刻画。通常,保存已经确认为错误的观察记录非常重 要,这就需要用到被否觉得观察模式。观察结果最让人头疼的是其可靠性,因为在一般情况下所记录的主要内容都是有关对象的假设。临床观察,假设与推理的子类 型化是处理该问题的一种途径。

有关观察的大多数陈述是用一个诊断过程来实现的。我们基于其它的观察来推断某个观察。关联观察模式可以用于记录作为证据的观察以用于诊断的各种知识。

上述的各种模式可以加以组织并用于刻画观察概念。要理解它们是如何发挥作用的,就很有必要看一看观察过程模式,可以采用基于事件的技术来对其进行建模。

很少有专业像医药行业那样对测量和观察有如此复杂的要求。本章的模型来自一个医疗保健系统(英国国民医疗服务制度的Cosmos项目)的建模工作。在该项 目中,在一起工作的是一个由医生、护士和分析员组成的联合小组,它们所面对的是一个非常难以处理的领域。在本书里,我们并没有把Cosmos模型完整地包 括进来,如果你对其感兴趣,请参考文献1中所描述的完整模型。在这里所谈到的一些模式还能应用到其它领域:第四章将讨论这些模式是如何应用到公司财务分析 中去的。

3-1数量

在目前的计算机系统中,记录测量信息的最简单和最常用的方式是将数字记录到为特定的测量而设计的领域中(如图3-1所示)。该方法的问题之一是仅仅用一个 数字来表示人的身高是很不够的。如果说我的申告是6或者体重是185,那究竟表示什么意思呢?要搞清楚这些数字的真实含义,需要使用单位。方法之一就是将 单位引入到关系名称中,比如体重(磅)。单位可以澄清数字的具体含义,但这样一种表示方法显得十分笨拙,另外的问题就是记录人员必须为信息使用正确的单 位。如果某人告诉我他的体重是80公斤,那我将如何记录?事实上对于某些行业,尤其是医药行业,要求非常精确的记录所测量的结果—-不能多,也不能 少;如果记录的是经过转换的结果,即使转换的方法是很确定的,也显得不够忠实。

在这个上下文中,数量是一个很有用的概念。图3-2展示一个由数字和单位组成的对象类型(比如,6英尺或者180磅)。数量还包括适当的算数运算和相应的 操作。比如,其中的一个操作能够实现数量相加功能,但是在相加之前会检查单位是否一致(34英寸就不能跟68公斤直接相加)。数量是用户界面可以解释和显 示的“完整值”(一个简单的打印操作可以显示数字和单位)。这样,数量就可以像整型或者日期类型那样,广泛地应用到对属性的定义中。

例:我们可以将数字185和单位磅组合成为数量来表示体重为185磅。

币值总是应该表示为数量,用币制作为单位(在本书中,我使用“金钱”一词)。使用数量可使你很容易地处理多币制的情况,从而摆脱单一币值的局限性(只有在 我自己所使用的财务程序中我才使用单一币值)。金钱对象还可以控制数量的表达方式。在财务系统中,如果使用了浮点数来表示币值,常常会产生四舍五入的问 题;采用数量可以用定点数来定义数量属性。

例:80美元可以用由数字80和单位美元所组合成的数量来表示。

数量的使用是面向对象分析的一个重要特征。许多建模方法都明确区分属性和关联。在模型中,关联是连接两个类型,而属性则是根据某个属性类型来包含某个值。 问题是:什么时候用属性而什么时候又用关联?通常,在绝大多数的编程环境中,属性类型都是典型的固有类型(比如整型、实型、字符串型、日期型等)。属性与 关联的这种区别对于像数量这样的类型不一定适用。某些建模人员认为数量应当作为属性来看待(应为它是一个自包含的且被广泛加以采用的类型)。在建模概念中 并不太在意你究竟采用了什么方法,最重要的是你是否寻找并使用了形如数量这样的类型。因此,我并不太关心属性与关联之间的区别,也不想陷入有关的争论 中。(我强调这一点是因为我发现在我所见到的绝大多数模型中,很少用到像数量这样的类型。)

建模原则:当多个属性与可能会在几个类型中使用的行为相关时,就把这些属性组合成新的基础类型。

3.2转换率:

我们可以很好地利用模型中明确表示的各种单位。这些单位的用处之一是使我们可以实现从一个单位到另一个单位的数量转换。如图3-3所示,我们可以在单位之 间使用“转换率对象”,并赋予数量对象一个操作:ConvertTo(Unit),该操作能够将给定单位的数量转换成为新的单位下的数量。该操作考察各个 单位间的转换率,在原单位和目标单位间寻找合适的转换路径,将源单位下的数量转换为目标单位下的数量。

例:通过定义一个1:12(英尺比英寸的转换率),我们可以将英尺转换为英寸。
例:转换率具有符合传递性,比如,英寸与毫米之间的转换率是1:25.4,那么通过将这个转换率与上一个转换率复合,可以将英尺转换成毫米。

转换率可用在很多地方,但并不是万能的。比如,摄氏温度与华氏温度之间的转换就不是简单的乘法关系,而需要通过更复杂的运算来实现。在这种情况下,需要单独的实例方法(参见6.6节)。

如果是多个单位之间存在转换关系,我们可以使用多纬单位转换阵列。比如,力的单位转换阵列。对于非国际单位制单位,可以使用梯形单位转换阵列,虽然建立这样的转换阵列需要花费点儿功夫。

要注意:日和月之间的转换关系是不确定的,因为每月的天数是不固定的。如果存在候选的转换途径,可以在测量用例中加以利用—-可以用各种途径去验证转换过程。

对于币值,其单位是特定的货币,转换率并不固定。我们可以通过给转换率指定可用的时间范围来解决这一问题。

当进行单位转换时,既可以使用在这里所阐述的转换率,也可以使用9.4节所介绍的场景。如果转换关系频繁变化,而且转换时需要了解一系列的转换,就可以考虑采用场景。否则,采用简单的转换率是再好不过的。

3.3符合单位

单位可以使原子单位,也可以是复合单位。复合单位由原子单位组合而成,如“平方英尺”或者“米/秒”。特定的操作可以将针对原子单位的转换率应用到符合单 位的转换率上。需要记住的是,符合单位中用到了哪些原子单位以及它们的幂。图3-4给出一个例子,展示一个较直接的符合单位转换模型。请记住,各原子单位 的幂可能是正数,也可能是负数。

2009年10月06日

当某人活某个组织对别人或别的组织承担某种责任时会运用到责任概念。它是非常抽象的概念,可以用来描述很多特殊的问题,包括组织结构、合同协议或者雇用关系等。

本章首先介绍一个重要的模式,团体模式–人和组织的超类型。我们将用组织结构问题来展示责任模型的发展由来。简单组织结构可以用组织层次模式来建模。当 层次结构过多时,会使模型变得复杂,这时需要用到组织结构模式。团体和组织层次模式组合在一起构成责任模式。责任模式可以处理团体之间的许多关系,包括组 织结构、患者同意、服务协议、雇用关系以及专业机构注册等。

当用到责任模式时,有必要描述可形成哪种类型的责任模式,以及这些责任模式的约束规则。这些规则可以用责任知识级的类型实例来描述。该知识级包括团体类 型,该类型用团体类型泛化模式来对各种团体进行分类和子类化,而不用改变模型。层次型责任模式用于表示确实需要严格分级的团体间的关系。这样,责任模式既 可用于刻画层次型关系,也可以用于刻画更复杂的网络型关系。

责任模式定义了团体的职责。这些职责可通过操作范围模式来定义。操作范围模式是责任合同中的一项条款,就像一条命令中的一个子命令。当这些职责逐渐增多,让它们隶属于特定的职位模式而不是隶属于拥有该职位的人员会更有好处。

本章基于多个项目,因为责任是一种很通用的概念。其最初思想来自一个为公用事业开发的客户服务项目和为一个电信公司开发的财务项目。而完整的责任模型则是在做英国国民医疗服务制度的Cosmos项目中开发出来的。

2.1团体

留意一下你的通讯簿,你看到些什么?如果不出我所料的话,你会看到大量的地址、电话号码、E-Mail地址等,这些信息都与特定的某个事务有关。通常该事 务是某个人,但有时也可能是某个公司。这使我想起我经常会给出租车公司打电话,但我并不是要与某个特定的人通话—-我只是想要一辆计程车而已。最初为 通讯簿建造的模型可能如图2-1所示,但是我对该图并不是很满意,因为其中有些概念性的重复。我马上就很自然地想到要找一个能概括人和公司的类型。该类型 是一个典型的还没有命名的概念—-所有人都知道并用到了,但没有人给它命过名。我曾在数不清的数据模型中见过不同的名称:人员/组织、参与者、法定实 体等。

我喜欢用“团体”一次。在图2-2中定义了一个团体作为任何组织的超类型。这样,就可以为公司的各个部门或者甚至非正式的小组建立起地址和电话号码等通讯记录。

多数事务都与“团体”相关而不是与某个组织相关。比如,跟个人和组织互通新建;付款给个人和组织;组织和个人都会产生某些行为,都会有银行账户,都会缴纳税款。我想,这些例子已经足够体现“团体”概念的价值所在了。

例:在英国国民医疗服务制度系统中,有如下一些“团体”:Tom Cairns一生、圣。玛丽医院的肾病治疗小组、公园路地区卫生当局以及皇家医学院。

2.2组织层次

我们首先看一下跨国公司芳香咖啡机制造公司(ACM),它有许多分公司,每个分公司又分成不同的区域子公司,而每个区域子公司又分成不同的部门,每个部门 又有很多个销售办事处。我们可以用图2-3来模拟这种结构关系。然而我对改图也不是是很满意,因为如果公司的组织发生变化,比如说去掉了区域子公司的划 分,我们就必须改变模型。图2-4提供了一个更简单的模型,该模型可以很容易的加以改变。但盖膜行的递归关系隐含着某种危险,比如它允许降部门作为销售办 事处的一部分。我们可以通过定义相应的子类型并对每种子类型施以一定的约束的方式来处理这一问题。一旦组织层次发生变化,我们可以改变这些子类型和约束规 则。通常,改变规则比改变模型结构要容易得多,所以我倾向用图2-4取代图2-3。

上面提到的层次结构具有一定的通用性,但仍然具有其局限性。其不足之处在于它只支持单一的组织层次关系。假设ACM公司针对每种主要的咖啡机系列为所属的 销售办事处配备一个服务小组,那么这个小组就具有双重的责任结构:既向个销售小组负责,也向各产品上产单位的服务部门负责,而这些服务部门则轮流向产品的 支持单位负责。例如,为波士顿的2176大容量卡布奇诺(一种意大利咖啡)咖啡机(每小时生产50杯)设立的服务小组既向波士顿的销售办事处负责,还向 2170系列产品的服务中心负责。该产品服务中心又向大容量意大利咖啡机服务部门负责,该部门则向咖啡机服务部门负责(这可不完全是我编造出来的!)。面 对这种情况,我们可以再增加一个层次结构,如图2-5所示(像图2-4那样,该图中还需要一些约束规则,但我把它留给读者去完成–当成一种练习)。该方 法确实是有效的,但随着更多层次的出现,整体结构会变得非常复杂而无法实用。

2.3组织结构

如果一个模型有多个隶属层次关系,我们可以用一种类型化的关系(如图2-6所示)来表示。我们把层次关系转化为一种类型,通过使用组织结构类型的不同实例 来区分不同的层次关系。这样就能用组织结构的两个实例(销售组织和服务组织)来处理上一节的场景(双层关系)。新产生的层次关系可以通过简单地增加新的组 织结构类型的方式加以处理。显然,这种抽象方式使我们能够在复杂性适度增加的情况下的增加更多的系统柔性。对于双层关系,这样去作并不值得,但是对于多层 关系,就很有必要。另外请注意,组织结构有时间周期;这使我们可以有效地记录组织结构的周期性变化。进而要注意的是,我并没有把组织结构类型堪称是一种树 形—-类型树形是一个很重要的概念,我们将在后面具体谈到。

例:为波士顿的2176大容量卡布奇诺咖啡机而设立的服务小组向波士顿的销售办事处负责。我们可以将其刻画成这样一个组织结构模型:父节点是波士顿的销售办事处,字节点是波士顿的2176服务小组,组织结构类型叫做产品线管理。
例:为波士顿的2176大容量卡布奇诺咖啡机而设立的服务小组向产品你支持结构中的2170产品系列服务中心负责。我们可以把它堪称是一个单独的组织结构,它的父节点是2170产品系列服务中心,而子节点是波士顿的2176服务小组,组织结构类型叫做产品支持。

要简化对象结构,应把重点放在玉树规则上。这些具体的形式可以使:“对于一个组织结构,如果其类型是销售组织并且其子节点是一个部门的话,那么其父节点必 须是一个区域子公司”。请注意,约束规则被表示成指向组织结构的属性,其暗含着约束规则针对该组织结构。然而,这也意味着当通过增加新的组织结构类型的方 式来扩展系统时,会改变组织结构中的约束规则。而且,随着组织结构类型数量的增加,这些规则将变得难以处理。

可以把约束规则放到组织结构类型中(如图2-7所示)。针对特定的组织结构类型的所有规则被集中到一个地方,这样便于增加新的组织结构类型。

然而,如果我们很少改变组织结构类型而是经常增加新的组织子类型,图2-7就难以处理了。在这种情况下,组织子类型的没词增加都会导致约束规则的改变。更 好的办法是让约束规则跟随组织子类型。概括起来,我们的目标是尽量减少模型的变化。我们应该按照这种方式,在不影响模型的其它部分的前提下,把约束放在最 容易发生变化的地方。

2.4责任

图2-7展现了一个组织按照某种定义好的规则,在某段时间里与其它组织存在某种关联关系。虽然一直是在围绕组织进行讨论,但考虑是否能降相同的描述方式也 应用到人身上总是值得的。也就是要文:“人是否可以按照某种定义好的规则,在某段时间里与组织或者别的人存在关联关系?”答案是肯定的,因此我能够并且也 应该降图2-7进一步抽象化,以应用到团体上面。在我这样去作的过程中,我将这种新的抽象概念命名为“责任模式”,如图2-8所示。

例:John Smith为ACM工作,这可以被建模为一个责任模型,其中ACM是委托方,John Smith是责任方,责任类型是雇佣关系。

正如前面这些例子所显示的,从组织结构中抽象出责任模型为我们带来更广阔的空间,可以应对更多的情形,而模型的复杂度并没有增加。基本的模型与图2-7有着相同的结构,唯一的变化是将组织替换成团体。

2.5责任知识级

然而,责任的引入带来了复杂性,因为责任的类型比组织结构的类型要多得多。相应地,定义责任类型的规则将变得更加复杂。

这种复杂性可以通过引入知识级来管理。知识级将模型分为两部分:操作级和知识级。操作级包括责任、团体以及它们之间的关联关系;知识级包括责任类型、团体类型以及它们之间的关联关系,如图2-9所示。

在操作级,模型记录该领域每天所发生的事件;在知识级,模型记录着控制着结构的各种通用规则。知识级的实例支配着操作级的实例的具体配置。在该示例中,责任实例(实际团体之间的关联)受到责任类型与团体类型之间的关联的约束。

例:区域子公司又可细分成各个部门。这可由一个区域子公司结构的责任类型来处理,其中委托方是区域子公司,责任方是部门。
例:患者许可可被定义成责任类型,其中委托方是患者,责任方是医生。

请注意如何用团体类型映射来替代团体子类型化。这时Odell在所讲的“强力类型”的一个实例,其主要出现在用映射来定义子类型时。团体类型与团体的子类 型有很紧密的关系,因为子类型“区域子公司”必须有它的类型作为团体类型团体类型“区域子公司”。从概念上讲,可以把团体类型的实例看成是与团体子类型相 同的对象,虽然用主流的编程语言无法直接实现该概念。团体类型是团体的一种强力类型。通常,我们只需要映射(Mapping)或者子类化 (SubTyping)这两者中的一个。但是,如果子类型具有特殊的行为并且强力类型也拥有自己的特征,那么子类型和到强力类型的映射都是需要的 (Odell用一种特殊的表示法来表示这种情况)。

知识级和操作级相对应但并不完全一样,因为父节点与子节点的映射在知识级是多值的而在操作级是单值的。这时由于操作级刻画的是参与责任的实际团体,而知识级刻画的是参与责任类型的可能的团体类型。这种用多值的知识映射来表示单值的操作映射的可能类型的方式是很常见的。

知识级和操作级是模型所具有的一个共同特征,虽然我们经常不显示指明两者之间的差异。我将两者明确地分开是因为我发现这样做有助于理清建模思路。本书中有大量关于操作级与知识级的例子,尤其是在第3章。

建模原则:将模型清晰地分解成操作级和知识级。

多数的数据建模人员用“元模型”一次来描述知识级,我对这样的用法不是很赞同。因为元模型也可以用于建模技术,其中,元模型包括了诸如类型、关联、子类型 以及操作等(例如Rational软件的统一方法的元模型)。知识级则不同,它不描述用于操作级的各种图符。因此我只在刻画用于描述模型语言(图符的语 法)的模型时才使用“元模型”一词。

责任模型表达了一些乡党员是的抽象概念。就像在爬山的过程和总,在高原反应到来之前,我们会停下来做适当的准备。虽然对象模型的结构非常的简单,但在知识 级的实例中却隐藏着大量的知识。仅仅这些工作还不足以实现对象模型,必须对知识级加以初始化。初始化知识级是一个受限的因而也是简单的编程过程,目的是要 有效的配置系统。虽然简单,但仍然是属于程序设计,因此应当考虑如何加以测试。

丰富的知识级也会影响系统间的通信,如果两个子系统需要进行通信,它们不仅必须共享对象模型,还必须拥有同样的知识对象(和这至少是如5.4节所述的知识 级间的一些等价物)。接下来最终我们会遇到下面这个问题:如果责任类型的数量非常庞大,使用图2-9的结构更容易些还是扩展图2-5为每种责任类型配置关 联关系更容易些?问题本身的复杂度是回避不了的,我们只能比较权衡类型结构和知识对象,判断哪个模型更加简单。

需要注意的是,对关系加以类型化并不是可以应用在所有的团体关系上。比如,生物学上的父子关系就不能作为责任类型的一个实例,因为没有团体之间的责任关系,也不存在固有的责任期限。但是法定的监护关系属于责任类型。

2.6团体类型泛化

正如模型自身所体现的那样,其功能的强大不容置疑,但如果能够增加一些有用的变化,则可以使的模型具有更强的适应能力。这些变化可以用在任何使用了知识级/操作级花粉方式的模型中。

我们来分析一下Edwards医生,他是一个普通的分析模式实践者(简称GP)。使用图2-9所示的模型,我们可以把他堪称是GP或者是医生,但不能两者 都是。针对医生所定义的而又适用于GP的所有责任类型都必须重复描述。我们可以采用多种技术来缓解这个问题。其中一种方式就是允许团体类型拥有子类型或者 超类型关系(如图2-10所示)。这样就引入了团体类型的泛化概念,起作用与类型的泛化相似。泛化使得针对责任类型的约束发生了变化,因此既要考虑团体的 类型(来自类型映射),又需要考虑团体的超类型(来自所有的类型映射)。

图2-10给出了团体类型的一个单继承关系。多继承可以通过允许超类型的映射是多值的方式来实现。因此,图2-10只支持单一分类,即如果Edwards 既是一个GP,又是一个儿科医生的话,我们只能通过创建安一个特殊的“GP/儿科医生”团体类型来刻画,赋予团体多种团体类型,这可以通过允许映射到团体 的类型可有多个取值的方式来实现。

有关知识级和操作级之间的许多讨论与元模型建模中的对象和类型的关系是类似的。

2.7层次型责任

要实现责任模型所给出的柔性结构,还需要在一些责任类型的约束规则上多下功夫。比如图2-3所示的组织结构定义了一个严格的层级序列:分公司被划分成若干 区域子公司、区域子公司被划分成若干部门、部门被划分成若干销售办事处。定义一个区域子公司结构的责任类型是可能的,但是如何才能保持图2-3中的严格规 划呢?

首要的问题是图2-3刻画了一个层次型的结构,而责任模型没有相应的规则来约束这样一种结构。这可以通过提供附加有约束规则的责任类型的子类型的方式来加 以处理(如图2-11所示)。这些附加的约束规则和惯例性的约束规则一起共同作用于责任类型,从而保持操作级结构的层次特性,类似的责任类型子类型可以用 于实现一个有向无循环图结构。

利用图2-11,通过一系列的责任类型,我们可以刻画图2-3所示的情形。责任类型“区域子公司结构层1”对分公司负有区域性的责任,“区域子公司结构层 2”对区域子公司富有部门性的责任,以此类推。这种方法确实可行,但是有点笨拙。另一种方式是使用一种如图2-12所示的分级的责任类型,采用这种方式就 只有一种“区域子公司结构”责任类型,其中,各级分别映射到相应的团体类型—-分公司、区域子公司、部门、销售办事处。这种模型使得可以很容易地增加 新的级别的责任类型,并便于修改所需结构中的级别。分层的责任类型捕获团体的责任关系并组织成一个层次型的模型,而分级的责任类型用于捕获其中具有固定次 序的团队责任关系。

遵循“契约式设计”的原则,为责任类型所定义的约束规则与附加的约束规则一起共同作用于子类型。对于存在分级责任类型的情况,约束包括了对超类型的约束, 并使得委托方和责任方的映射显得多余。这样的一种想法可以用图2-13所示的模型来表达。需要特别强调的是,图2-12并非不正确。分级的责任类型是一种 非常好的责任类型子类型,因为施加于责任类型的约束规则仍然会适用于分级的责任类型,而其中的责任方和委托方的映射仍然得以继续保持,虽然它们需要从级别 映射关系中派生而来的。我倾向于采用图2-12的模型。分级的责任类型可能并不总是必须的,只要不违反模型,添加起它们来也很容易。图2-12还具有这样 的有点:它使得知识级和操作级的关系更加明确。

2.8操作范围

责任提供了一条描述团体之间如何相互联系的颇有价值的途径。责任的类型描述了它们所具有的关系的种类;通常还需要其它一些更详细的信息来具体阐明责任的内 涵。举例来讲,1997年,一名医生被聘用为肝脏方面的外科医生,其任务是为伦敦东南部地区实施20例肝脏移植手术;某医院的糖尿病治疗小组应红十字会的 要求,为马萨诸塞西部地区依赖胰岛素的糖尿病患者提供医疗服务。

诸如此类的详细说明称为责任的操作范围(如图2-14所示)。每个操作范围都定义了责任团体所担当的某部分责任。很难用抽象的方式列举操作范围的具体属性。因此,我们认为责任应当拥有大量的操作范围,每一操作范围是某种描述实际特征的子类型。

例:某位要在一年内负责伦敦东南部地区20例肝脏移植手术的外科医生,他参与一个雇用责任模型,该责任有一个协议范围:数量是20;肝脏移植方面的协议;地点是伦敦东南部地区。
例:糖尿病治疗小组和红十字会参与一个责任模型,其临床治疗范围如下:其中“观察概念”对象是以来胰岛素的糖尿病患者;地点是马萨诸塞州西部地区。
例:芳香咖啡机制造公司(ACM)与印度尼西亚咖啡出口公司(ICE)签订有每年3000吨爪哇咖啡和2000吨苏门答腊咖啡的合同。这可以用ACM与 ICE之间的责任模型来描述,其责任期限是一年,资源类型有两种:3000吨/年的爪哇咖啡和2000吨/年的苏门答腊咖啡。

在针对特定的组织使用操作范围时,需要识别其所具有的操作范围类型及属性。要用很抽象的方式来概括操作范围是非常困难的,但地点好像是一个各种操作范围都 具有的属性。操作范围俄的子类型如果很多的话,其间的继承关系可能会形成层次结构。在特别复杂的实例中,你可能会见到在知识级防止有操作范围类型,用来说 明哪些责任类型具有哪些操作范围类型。

2.9职位

通常,对于人的操作范围—-他们的职责(包括它们的诸多职责中的许多责任)—-已经预先在工作说明中做了具体的规定。当某人次去工作时,替代者将继承所有的职责。也就是说,职责与工作相关,而不是与人相关。

我们可以通过引进“职位”的概念(作为团体的第三个子类型)来处理这种情况(如图2-15所示)。隶属于工作的任何职责,无论谁拥有它,都只与职位相关。通过在人员和职位之间建立责任模型来表示人员占据该职位。具体来讲,就是某人在规定的时间内负责某个职位的各项职责。

例:Paul Smith是大容量产品开发小组的负责人,这可以通过设立大容量产品开发小组负责人这样一个职位的方式来描述,该职位和大容量产品开发小组(一个团体)之间有管理责任关系,而Paul Smith和该职位之间有另一个责任关系(聘用关系)。

不应该在所有时候都使用职位,因为它们引入了更多的间接联系,会增加操作级的复杂性。只有职位中体现了一些稳定的重要职责,而人员经常变换职位的情况下才使用职位的概念。对于模型中所有的职责都与某个特定的人相关的情况,就没必要再使用职位这一概念。