您应该始终致力于捕捉现实中存在的东西。Customer实例与a没有1 对 1 的关系,ProductList因为 a 一次ProductList可以被多个人查看Customer,并且 theCustomer绝不拥有该列表。
可能更接近现实的是:
- 每个
Supermarket人管理一个Inventory人
- 每个
Inventory人:
- 由一个
Supermarket人管理
- 包括
Inventory Item个人
- 每个
Inventory Item人
- 由一个
Inventory人组成
- 描述
Product个人
- 每个
Product人
- 由一个
Inventory Item人描述
- 位于一个
Physical Location人
- 每个
User Account人
- 每个角色个体提供能力个体
在现实生活中,人们扮演角色。这些角色可能是“客户”、“医生”或“警察”。每个人Role都有一套可以执行的能力。在 OO 系统中,每个人Role都可以使用操作来实现其功能,例如purchaseProduct()、prescribeMedication()或writeMovingViolation()。
在 OO 系统中有多种方式来表示这些角色和能力。在一种方法中,可以将 a 的customer实例配置为分别允许对和类Role进行访问queryInventory()和purchaseProduct()操作。1的实例可能被配置为允许对类进行访问和操作。SupermarketInventoryItemownerRole addInventoryItem()removeInventoryItem()Inventory
下面是一个 UML 模型的示例:

在另一种方法中,您可以创建该类的单例子Role类,称为CustomerRoleand OwnerRole,然后让这些子类中的每一个调用操作。您可以将您的viewProducts()和addProducts()操作放入这些单例中。
1考虑称这个角色为“经理”,这样超市的老板就可以雇佣其他人来做这项工作。