我正在尝试创建一个超级市场软件,该软件允许客户或所有者通过Java中基于swing的GUI登录并使用我的系统。客户登录后,便可以查看产品。所有者登录后,他们可以查看产品并添加新产品。

我想要Customer类中的方法:ViewProducts()
Owner类中的方法:ViewProducts()AddProducts()
这些方法是否错误,因为它们不特定于客户/所有者(它们与产品有关)。

我的关系是Customer类与ProductList具有1到1的关系,而OwnerProductList具有1对1的关系,并且这两个类可以以自己的方式操纵数据。我要解决这个错误吗?

这种方式没有意义,因为CustomerOwner不能具有与它们无关的属性,例如ProductList

最佳答案

您应该始终以捕捉现实中存在的事物为目标。 Customer实例与ProductList没有1对1的关系,因为一次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系统中的这些角色和功能。在一种方法中,可以将customerRole实例配置为允许分别访问queryInventory()purchaseProduct()类上的SupermarketInventoryItem操作。 owner 1的Role实例可能被配置为允许访问addInventoryItem()类上的removeInventoryItem()Inventory操作。

这是一个UML模型的示例:

java - 客户和产品列表之间的UML关系(Java Supermaket软件)-LMLPHP

在另一种方法中,您可以创建Role类的单例子类,分别称为CustomerRoleOwnerRole,然后让这些子类中的每一个调用操作。您可以将viewProducts()addProducts()操作放入这些单例中。



1考虑将此角色称为“经理”,这样超市的所有者可以雇用其他人来完成工作。

关于java - 客户和产品列表之间的UML关系(Java Supermaket软件),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59700252/

10-12 04:42