客户和产品列表之间的 UML 关系(Java Supermaket 软件)
UML Relationship between Customer and Product List (Java Supermaket Software)
我正在尝试创建一个超市软件,允许客户或所有者通过 Java 中基于 swing 的 GUI 登录并使用我的系统。当客户登录后,他们可以查看产品。当所有者登录后,他们可以查看产品并添加新产品。
我想要 Customer
class 中的方法:ViewProducts()
和 Owner
class 中的方法:ViewProducts()
、AddProducts()
.
这些方法是否错误,因为它们不是特定于 customer/owner(它们与产品相关)。
我的关系是 Customer
class 与 ProductList
一对一的关系,Owner
与 [=17= 一对一的关系],这两个 classes 可以用他们自己的方式操作数据。我做错了吗?
这种方式没有意义,因为 Customer
和 Owner
不能有与其无关的属性,例如 ProductList
.
您首先需要考虑的是 IS-A 与 HAS-A。如果你的 class 是一个特定的东西,它应该是超级 class 的 child。如果它有东西,那么它就是一个组合。如果我正在设计这个,我会让 productList 成为一个 class,然后让商店员工作为超级 class,所有者和工人作为 sub-classes,两者都将产品列表作为一个组合。
你应该始终致力于捕捉现实中存在的东西。 Customer
实例 与 ProductList
没有 一对一的关系,因为 ProductList
可以被多个 Customer
查看],并且 Customer
绝不会 拥有 该列表。
大概比较接近实际的是:
- 每
Supermarket
个人管理一个Inventory
个人
- 每个
Inventory
个人:
- 由一个
Supermarket
个人管理
- 包括
Inventory Item
个人
- 每个
Inventory Item
个人
- 由一个
Inventory
个人组成
- 描述
Product
个人
- 每个
Product
个人
- 描述为一个
Inventory Item
个人
- 位于个
Physical Location
个人
- 每个
User Account
个人
- 识别个人
- 出场角色个人
- 每个角色个体提供能力个体
在现实生活中,人们扮演着角色。这些角色可能是“客户”、“医生”或“警察”。每个人 Role
都有一组可以执行的功能。在 OO 系统中,每个个体 Role
都可以使用操作来实现其功能,例如 purchaseProduct()
、prescribeMedication()
或 writeMovingViolation()
.
有多种方法可以在 OO 系统中表示这些角色和功能。在一种方法中,Role
的 customer
实例可能被配置为允许访问 queryInventory()
和 purchaseProduct()
对 Supermarket
和 InventoryItem
的操作class分别是。 Role
1 的 owner
实例可能被配置为允许访问 [=16= 上的 addInventoryItem()
和 removeInventoryItem()
操作] class.
这是一个 UML 模型的例子:
在另一种方法中,您可以创建 Role
class 的单例子 class,称为 CustomerRole
和 OwnerRole
,然后让每个这些 subclasses 调用操作。您可以将 viewProducts()
和 addProducts()
操作放入这些单例中。
1考虑称这个角色为“经理”,这样超市的老板就可以雇佣其他人来做这项工作了。
我正在尝试创建一个超市软件,允许客户或所有者通过 Java 中基于 swing 的 GUI 登录并使用我的系统。当客户登录后,他们可以查看产品。当所有者登录后,他们可以查看产品并添加新产品。
我想要 Customer
class 中的方法:ViewProducts()
和 Owner
class 中的方法:ViewProducts()
、AddProducts()
.
这些方法是否错误,因为它们不是特定于 customer/owner(它们与产品相关)。
我的关系是 Customer
class 与 ProductList
一对一的关系,Owner
与 [=17= 一对一的关系],这两个 classes 可以用他们自己的方式操作数据。我做错了吗?
这种方式没有意义,因为 Customer
和 Owner
不能有与其无关的属性,例如 ProductList
.
您首先需要考虑的是 IS-A 与 HAS-A。如果你的 class 是一个特定的东西,它应该是超级 class 的 child。如果它有东西,那么它就是一个组合。如果我正在设计这个,我会让 productList 成为一个 class,然后让商店员工作为超级 class,所有者和工人作为 sub-classes,两者都将产品列表作为一个组合。
你应该始终致力于捕捉现实中存在的东西。 Customer
实例 与 ProductList
没有 一对一的关系,因为 ProductList
可以被多个 Customer
查看],并且 Customer
绝不会 拥有 该列表。
大概比较接近实际的是:
- 每
Supermarket
个人管理一个Inventory
个人 - 每个
Inventory
个人:- 由一个
Supermarket
个人管理 - 包括
Inventory Item
个人
- 由一个
- 每个
Inventory Item
个人- 由一个
Inventory
个人组成 - 描述
Product
个人
- 由一个
- 每个
Product
个人- 描述为一个
Inventory Item
个人 - 位于个
Physical Location
个人
- 描述为一个
- 每个
User Account
个人- 识别个人
- 出场角色个人
- 每个角色个体提供能力个体
在现实生活中,人们扮演着角色。这些角色可能是“客户”、“医生”或“警察”。每个人 Role
都有一组可以执行的功能。在 OO 系统中,每个个体 Role
都可以使用操作来实现其功能,例如 purchaseProduct()
、prescribeMedication()
或 writeMovingViolation()
.
有多种方法可以在 OO 系统中表示这些角色和功能。在一种方法中,Role
的 customer
实例可能被配置为允许访问 queryInventory()
和 purchaseProduct()
对 Supermarket
和 InventoryItem
的操作class分别是。 Role
1 的 owner
实例可能被配置为允许访问 [=16= 上的 addInventoryItem()
和 removeInventoryItem()
操作] class.
这是一个 UML 模型的例子:
在另一种方法中,您可以创建 Role
class 的单例子 class,称为 CustomerRole
和 OwnerRole
,然后让每个这些 subclasses 调用操作。您可以将 viewProducts()
和 addProducts()
操作放入这些单例中。
1考虑称这个角色为“经理”,这样超市的老板就可以雇佣其他人来做这项工作了。