您应该始终致力于捕捉现实中存在的东西。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的实例可能被配置为允许对类进行访问和操作。Supermarket
InventoryItem
owner
Role
addInventoryItem()
removeInventoryItem()
Inventory
下面是一个 UML 模型的示例:
在另一种方法中,您可以创建该类的单例子Role
类,称为CustomerRole
and OwnerRole
,然后让这些子类中的每一个调用操作。您可以将您的viewProducts()
和addProducts()
操作放入这些单例中。
1考虑称这个角色为“经理”,这样超市的老板就可以雇佣其他人来做这项工作。