0

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

我想要一个类中的方法CustomerViewProducts()
和类中的方法OwnerViewProducts()AddProducts()
这些方法是否错误,因为它们不是特定于客户/所有者(它们与产品相关)。

我的关系将是与 具有 1 对 1 关系的CustomerProductList和与Owner具有 1 对 1 关系ProductList的类,并且这两个类可以以自己的方式操作数据。我要解决这个问题了吗?

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

4

2 回答 2

2

您应该始终致力于捕捉现实中存在的东西。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考虑称这个角色为“经理”,这样超市的老板就可以雇佣其他人来做这项工作。

于 2020-01-12T06:28:46.313 回答
0

您需要考虑的第一件事是 IS-A 与 HAS-A。如果你的类是一个特定的东西,它应该是一个超类的孩子。如果它有一些东西,那么它就是一个组合。如果我正在设计这个,我会将 productList 设为一个类,然后将 store employee 作为超类,将 owner 和 worker 作为子类,两者都将产品列表作为一个组合。描述设计类的逻辑

于 2020-01-12T02:11:45.090 回答