我正在尝试创建一个超级市场软件,该软件允许客户或所有者通过Java中基于swing的GUI登录并使用我的系统。客户登录后,便可以查看产品。所有者登录后,他们可以查看产品并添加新产品。
我想要Customer
类中的方法:ViewProducts()
和Owner
类中的方法:ViewProducts()
,AddProducts()
。
这些方法是否错误,因为它们不特定于客户/所有者(它们与产品有关)。
我的关系是Customer
类与ProductList
具有1到1的关系,而Owner
与ProductList
具有1对1的关系,并且这两个类可以以自己的方式操纵数据。我要解决这个错误吗?
这种方式没有意义,因为Customer
和Owner
不能具有与它们无关的属性,例如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系统中的这些角色和功能。在一种方法中,可以将customer
的Role
实例配置为允许分别访问queryInventory()
和purchaseProduct()
类上的Supermarket
和InventoryItem
操作。 owner
1的Role
实例可能被配置为允许访问addInventoryItem()
类上的removeInventoryItem()
和Inventory
操作。
这是一个UML模型的示例:
在另一种方法中,您可以创建Role
类的单例子类,分别称为CustomerRole
和OwnerRole
,然后让这些子类中的每一个调用操作。您可以将viewProducts()
和addProducts()
操作放入这些单例中。
1考虑将此角色称为“经理”,这样超市的所有者可以雇用其他人来完成工作。
关于java - 客户和产品列表之间的UML关系(Java Supermaket软件),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59700252/