UML软件工程组织

仓库管理器:一个库存的分析模式

Eduardo B. Fernandez 著,邓克 译

 摘要 库存可以让我们知道一个机构有什么,如:零件,成品,家具,机器等。一个好的库存系统对任何一个现代商务或制造系统来说,都是必要的。本文中,我们列举了一个针对库存系统的分析模式,这个库存系统跟踪仓库中物品的数量和位置,并且能够根据制造或生产的不同阶段(从零部件采购到产品发运),动态更新有关物品的数量。这是一个通用的模型,是根据对一个实际运行库存系统的抽象而定义出来的,并且可以通过扩展,实现一个有更详细需求的或相类似的应用。这是一个组装模式,由两个原子模式组成。

1         介绍

现代制造系统中,制造过程中所涉及信息的管理已经成为降低产品成本,提高产品质量的一个关键因素。很多公司和机构在这个领域投入了大量的资源,制造资源计划系统(MRP)已经变得重要了[Salv92]。库存是MRP系统中最重要的一部分,用来跟踪目标对象的数量和位置。

这里,我们开发了一个库存模式-仓库管理器,它满足对可重用性和可扩展性所期望的要求。这个模型不仅考虑了系统的静态视图,还考虑了它的动态方面。因为一个库存控制系统不能被完全地模型化(除非顾及到整个制造系统中几个其他方面的问题),所以模型中也包含了制造系统的一些功能性部分(非库存方面的)的作用。这个模型可以作为开发一个完整的制造系统模型的起点或是作为一个语义分析模式(Semantic Analysis Pattern[Fer00a]的实例,这种实例实际上是一个领域范围内可以使用的最小应用。这个模式也是一个组装模式[Rie96],我们识别出了两个原子模式:基本库存(Basic Inventory)和物品分布(Item Distribution)

2         问题

商业活动、制造车间、图书馆怎样跟踪各种不同种类的物品和它们的位置?

3         环境

所有机构,不管是大型的,还是小型的,都使用零部件来构建产品或供应其他商家。他们需要能够跟踪物品的数量。在制造车间里,这些物品是零部件和产品;在图书馆里,它们是书,磁带,或者是档案;在服装店里,它们是服装及附属物,等等。这些机构也需要能够找到所需的物品。

4         约束

l         在一个公司里,物品可能是正在制造或已经完成产品的原材料。货物有损失或遭到破坏的可能。机构必须能够跟踪仓库中物品的实际数目。

l         其他功能单元可以改变物品的数量:例如,物品无论何时、何地迁移或使用时,应该更新其相应的库存数量。

l         解决方案必须描述一个基础的语义单元,这意味者它必须足够简单,以便应用到各种环境中。这是可重用性的基础。

l         解决方案必须包括现实的文档解释。

5         解决方案

5.1   需求

一个库存系统的基本功能或用例(Use Case)可以总结如下:

u       把不同类型的货物分开,如:物料或零部件与成品。

u       跟踪仓库中的每个物品。可能需要几种类型的数量。手头(onHand)数量指示了物品的现存数量。定购(onOrder)数量指示了将来有多少物品可以入库。保留(reserved)数量指示了为订单保留的数量,它暗示了一个员工以后可以使用的数量(可获得数量)是手头数量与保留数量的差额。在更复杂的系统中,可能还会用到其他类型的数量。

u       跟踪物品的位置。库存应该记录物品在特定位置上的分布。

由这些功能的本质所决定,几乎所有其他子系统都会对库存中记录的数量有影响。一些对库存系统有直接影响并更新库存记录数据的功能是:采购、接收、物料的分发、审计、报废、发运、制造。

5.2   原子模式

我们从定义一个跟踪物品的库存模式基本库存模式开始。


1.基本库存模式的类图

库存系统的基本模式如图1所示。物品是任何我们想知道它的存在位置和数量的东西。每一个物品属于一个唯一的类型,这个类型提供了一个标识,如:物品号(物品编码,型号)。库存(Inventory)类持有每个物品我们所关注的各种数量。这可以被认为是一个原子模式,如语义分析模式(SAP),它既可以单独存在,又可以作为一个更大模型的一部分。它的动态方面在组装模式中显示。

2显示了物品分布模式的类模型。这是一个描述一系列物品的位置以及在那些位置上的分布的模式。它是另一个原子模式,将和基本库存模式一起组装成仓库管理器模式。为了指示分布状态,我们需要把库存数量分解成多个位置数量。(一个库存物品通常存放在几个不同的位置上)。这要求在库存(Inventory)类和位置(Location)类之间定义多多的关联关系,并且使用一个关联类-分布(Distribution)来指示物品在位置上的分布。

 


2 物品分布模式的类图

5.3   货物管理器的类模型

如下图所示:

3显示了满足需求5.1的库存模型。仓库(Stock)和零部件/产品(Component/Product)通过一个聚合关联发生关系。[[1]] 库存(Inventory)类中的数量(quantities)属性是仓库(Stock)与零部件/产品(Component/Product)类的结合点,不同的链接,有不同的值。这个模型允许设计者定义不同类型的仓库,作为单独的物品集合;例如,零部件仓库,产品仓库。库存的不同类型可以归纳为一个库存(Inventory)类。

 

3.仓库管理器分析模式的类图

【译者注:原图中关联类ComponentInventoryProductInventory的关联目标搞反了。这幅图是译者自己用Rational Rose 2000作的。另外,原图中的’/’符号,在UML中没有,应该是作者的笔误。】

物品被划分成两个不同的类型:成品和用于制造产品的零部件。其他的划分方法也是可能的。产品(Product)类中的“型号(model)”属性,用来作为一个唯一的标识符,其他属性描述了顾客选择时可能用到的特征,如颜色等。零部件(Component)类具有物品序号,描述,类型等属性,物品序号用来做唯一的标识符。产品(Product)和零部件(Component)通常是多-多的聚合关系(一个型号的产品使用几种类型的零部件,一种类型的零部件可以被用在几种型号的产品中),不过这与库存模型无关,因此在图中没有标明。

物品(Item)类被划分成产品(Product) 和零部件(Component)子类的原因是:在这两个实体的管理中,存在着很多不同。例如,产品是由一些零部件制成的,在制造过程中,库存系统需要跟踪零部件数量的变化。换句话说,零部件库存比产品库存更复杂。另一方面,两者又在一些方面有相同之处,例如,都需要跟踪手头(onHand)数量(合计的总数量)和实际的存放位置。这里可以应用泛化关系,定义库存(Inventory)类为一个父类,含有共同的特征,而产品库存(ProductInventory)和零部件库存(ComponentInventory)类作为子类,含有每一种不同库存类型的独特特征。图3的模型中也包含了从动态分析中引申出的操作,这将在下一部分描述。

5.4   动态分析


3中的类模型提供了库存系统的静态视图。这是不够的,我们也需要动态模型来显示库存怎样随时间而变化。在动态模型中,我们定义了为完成通用的操作而应该具有的一般特征。具体的库存系统的其他特征可以从该模型的基本配置中派生。图4是动态模型的序列图。

4.物品入库、出库的序列图

当零部件或产品入库时,通过调用add_to_stock操作,它们的手头数量(onHand)增加。当零部件或产品出库时,通过调用remove_from_stock,它们的手头(onHand)数量减少。而add_to_stock操作根据预定的规则,决定物品放在哪儿。当零部件或产品被放到某个特定的仓库区域时,操作add_to_localStock增加局部的手头数量(localonHand)。相似地,remove_to_localStock减少局部手头数量。


5.物品迁移序列图

零部件或产品可以从一个仓库区域迁移到另一个仓库区域,操作transfer执行这个动作。因为所有的移动操作既可以应用到零部件(由Component类表示),又可以应用到产品(由Product类表示)上,所以我们把这个操作放在父类Inventory中。当零部件或产品移出某个仓库区域时,remove_from_localStock操作被用来更新局部手头数量(localonHand)。相反情况下,使用add_to_localStock操作。图5显示了物品迁移的序列图。

最复杂的库存变化发生在制造过程中(见图6)。我们首先假设顾客的订单已经被处理,并形成了一张表单。表单中详细指示了在制造某种类型的产品时所需的零部件--什么型号的,以及每种型号的数量;这张表单就是生产指令单。当物料员根据生产单备料时,根据生产指令单上指示的数量,所需零部件保留数量的值增加。当零部件从仓库区域实际被领出时,保留数量和手头数量的值减少了。当制造过程结束时,产品库存中的手头数量增加了。通常,生产指令单从处理到结束,需经历几天时间。备料、领料到制造等阶段使人们知道生产指令单正处于什么状态。图6显示了制造过程中的库存变化。


6.按照顾客的订单来制造的序列图

6         在图书馆库存管理中应用此模式

为了展示本模式在不同领域的使用,我们把它应用到一个图书馆库存中。如图7所示:

现在,作品仓库(Works Stock)类定义图书馆各种材料的仓库。分布(Distribution)类用来指示某个位置上的数量。这里的位置(Location)类可以表示借书处、图书存放架、缩微胶片中心、公共阅读区,等等。这里,我们显示了一个作品仓库;然而,这个仓库或许可以分成几个独立的仓库:书库,视频磁带库,CD库,等等,因为这些种类的资料的处理方式是不同的。这个系统的用例(Use Case)是诸如借/还书的动作。这些用例(Use Case)的有些序列图与前面给出的序列图相似,如书的位置的迁移;而有些则不同,如顾客订单的处理。

 


7.图书馆库存系统

7         结论

产生的模型满足了以下的约束:

l         该模式可以用于跟踪不同类型仓库中目标物品的数量和它们的分布位置。

l         其他动作产生的影响可以通过调用适当的操作反映出来。如图书馆的例子中指出的那样,对库存产生影响的动作在不同的应用中可以是不同的。

l         尽管该模式是用制造业中的术语描述的,但它仍可以用来表示诸如图书馆、商务活动、或者其他相似的地方的库存。

l         文档,如顾客订单,和其他一些东西,被认为是与库存系统相互作用的外部系统的组成部分,因此没有在模式中表示出来。

为了使该模式能够在多个领域里应用,我们省略了:

l         物品的细节,如结构和描述。

l         存放位置的细节。

l         描述内部动作的文档,例如,在不同位置间货物的迁移。

l         异常处理,例如,保留数量比实际能获得的数量大,订单取消等。

l         提示低库存水平的报警。

l         历史信息

l         资金流动

l         当库存物品为液体形态时的处理。(度量液体时应该使用不同的方法)

l         这些方面应该通过其他模式来增加,或者是开发一个包含它们的完整框架。

8         已知的使用

一些库存模型的例子是:

l         在为位于美国佛罗里达Boynton Beach的摩托罗拉公司寻呼机产品分部的信息技术部开发一个库存原形时,应用了该模型。[Fern97]

l         Hay的库存模型中[Hay96],资产是些有实际物质形态的东西,(目前)必须存放在一定的场所,如仓库中的某一位置,制造工作中心。更确切的说,一项资产是一个场所中某种资产类型的物质形态。考虑了两种性质的资产:离散的物品和库存。离散的物品可以被单独的信息条所标识(如序列号,公司标签号【译者注:原文中的serial member为笔误,应该为serial number.】)。库存只用来跟踪大批量的资产。资产的类型又可以分为产品类型、物料类型、和零件/设备类型,这是因为以作者(Hay)的观点,物理形态不同的产品、零件、物料是按不同的方式来跟踪的。总的来说,贺氏模型中包含了我们忽略的一些方面。然而,它的模型没有包含动态的方面,属性,或操作;也没有把仓库(stock)与库存(Inventory)分开。

l         Fowler的文献[Fowl97]中有一章(第六章)写的是关于库存和会计的。他强调会计中的货物和资金的流动。他的模型中的另一个重要的方面是元数据(处于知识层中)和操作的分离。

l         Hellenack[Hell97]讨论了作为其他业务模式一部分的库存。她分离了成品库存和原材料库存(与我们的产品[Product]和零部件[Component]类等价),也包含了一些资金流动。她的模型中只包含了静态的方面并且没有物品分布的管理。

9         相关的模式

保留和实体使用模式(Reservation and Use of Entity Pattern)[Fern97],订单和发运模式(Order and Shipment Pattern)[Fern00b],在几个应用中与本模式相辅相成,如制造业。[Brag98,Brag99]中的模式应用到了资源控制领域,并且看来会在很多应用中与本模式合作。一个可以使用“仓库管理器”模式的模式是依赖性需求模式(Dependent Demand Pattern)[Hau97]。因为产品和零部件是有类型的,所以类型对象模式(Type Object Pattern)也是相关的。最后,仓库/产品、仓库/零部件的聚合关系,是容器/环境模式(Container/Context Pattern)的一个实例。

10    致谢

Motorola 公司库存系统的原型是由Michael Lynch, Chin- Shu Lee, Zhiwei Peng,and Mahbub Anwar构建的, 他们都为本模式中的这些构思做出了贡献。Rosana T.V. Braga, 我们的主管,以她富有洞察力的意见,对改进这篇论文的质量起到十分重要的作用。笔者在PLoP 2000 的工作室也为改进这篇论文提供了有价值的建议。

参考文献

[Booc99] G.Booch, J.Rumbaugh, and I.Jacobson, "统一标记语言用户指南", Addison-Wesley 1999.

[Brag98] R.T.V. Braga, F.S.R.Germano, and P.C. Masiero, "资源管理模式的联合使用", Procs. of PLoP'98,http://jerry.cs.uiuc.edu/~plop/plop98

[Brag99] R.T.V. Braga, F.S.R.Germano, and P.C. Masiero, "业务资源管理的模式语言", Procs. of PloP'99,http://st-www.cs.uiuc.edu/~plop/plop99

[Coa97] P.Coad, "对象模型:策略,模式和应用" (第二版),Yourdon Press, 1997.

[Fern97] E.B. Fernandez , M. Lynch, and C.S. Lee, “库存控制系统的面向对象原型的开发”, Report TR-CSE-97-32, Dept. Of Computer Science and Engineering, Florida Atlantic University, April 1997.

[Fern99] E.B.Fernandez and X.Yuan, "保留及实体使用的分析模式", Procs. of Pattern Languages of Programs Conf. (PloP’99),http://st-www.cs.uiuc.edu/~plop/plop99

[Fern00a] E.B. Fernandez and X. Yuan, "语义分析模式", Procs. of the 19th Int. Conf. on Conceptual Modeling (ER2000), 183-195.

[Fern00b] E. B. Fernandez, X. Yuan, and S. Brey, "产品订单和发运的分析模式", Procs. of PLoP 2000.

[Fowl97] M. Fowler, 分析模式可重用的对象模型, Addison- Wesley,1997.

[Hau97] R. Haugen, “依赖性需求供应和需求平衡的业务模式”, Procs. of Pattern Languages of Programs Conf., PloP97, http://st-www.cs.uiuc.edu/~plop/plop97/Workshops.html

[Hay96] D.C.Hay, 数据模型模式思考的常规, Dorset House Publishing, New York, 1996.

[Hell97] L. J. Hellenack, “面向对象的业务模式”, Object Magazine, January 1997, pp. 23-30 and 70.

[John98] R. Johnson and B. Woolf, "类型对象", 程序设计的模式语言3 中的第四章, Addison-Wesley, 1998.

[Rie96] D. Riehle, “组装设计模式”, Procs. of OOPSLA’97, 218-228.

[Salv92] G. Salvendy, 工业工程手册, Wiley- Intersience Pubs. ,1992.



[1] 这是一个松散的聚合类型,两个类都可以独立存在。[Booc99]

 

版权所有:UML软件工程组织