java - 如何在Java中建立这个关联

标签 java

我必须编写链接 2 个类的 UML:Product(不可见)和 ShoppingCart

enter image description here

我已经声明了 2 个变量 clientName 和total,并开始创建构造函数。在练习的表述中提到“cart”必须声明为 List 类型(静态),并将使用默认的构造函数构建为 ArrayList(动态)。

我不知道如何声明它,也不知道如何创建 getCart() 方法。我不知道数组 ShoppingCart[] 来自哪里,因为我没有声明它。

这是我迄今为止创建的代码:

导入java.util.ArrayList; 导入java.util.List;

公共(public)类购物车{

private String clientName;
private double total;
private List<String> cart;

public ShoppingCart(String clientName){
    setClientName(clientName);
    List<String> cart = new ArrayList<String>();

}

public ShoppingCart[] getCart(){
    return cart;
}

提前致谢

最佳答案

UML 符号解释

解释给定图表中显示的视觉符号 (UML) 和常见符号:

  1. 具体类 Product (盒子夹在顶部)
  2. 具体类 ShoppingCart (底部方框)
  3. 两者之间的聚合关联:从 ShoppingCart 开始的有向连接,以白色填充的菱形开头。以空心箭头结尾Product .

UML 图为:a ShoppingCart由 1 Product 组成。该协会的角色由标签 -cart 表示。 。单Product (由箭头旁边的基数表示:1)可以包含在0个或多个中(由菱形旁边的基数表示:*)ShoppingCart s。但是一个ShoppingCart 可以访问(由箭头方向表示)Product ,反之则不然。

另请参阅:

用Java实现

class Product {
}

class ShoppingCart {
    private List<Product> cart;  // the role interpreted as private member because minus before

    public ShoppingCart(String clientName){
        // omitted initializations
        this.cart = new ArrayList<>();
    }

    public ShoppingCart[] getCart(){
        final ShoppingCart[] self = new ShoppingCart[1]; // with one element
        self[0] = this; // only a self-reference, i.e. this object
        return self; // purpose unclear, but as in UML: an array of type ShoppingCart
    }

    public boolean add(Product product) {
        return this.cart.add(product);
    }

    public boolean remove(Product product) {
        return this.cart.remove(product);
    }
}

我不明白 getter 的意义、用处或目的 getCart及其返回类型(ShoppingCart 的数组),但至少我们可以返回一个包含自引用的单元素数组。

另请参阅: Java array of constants


更新

根据作者的评论,问题的 UML 发生了变化:

UML was too generic, it was changed into +getCart(): List <Product> which makes more sense

因此应该调整访问器操作(getter)以反射(reflect)这一点:

    public List<Product> getCart() {  // more intent-revealing to name it: getProducts()
        return this.cart; // consider a more scoped/expressive name: this.products
    }

命名注意事项: 我对改进属性名称的评论来自 cartproducts不仅仅表达类型 List<Products>但传达内容(产品集合)并避免重复上下文(例如 ShopingCart.prodcuts 而不是 ShoppingCart.cart )。对于来自购物车外部的调用者来说,表示为产品,但来自ShoppingCart内部的调用者则表示为产品。包含/具有产品(用 UML 绘制的聚合)。成员的解释和命名应反射(reflect)其范围内的目的。

关于getter命名约定: 在 Java 中(特别是对于 bean),通常在它们返回的属性之后(模式 get<property>() )或它们的返回值(例如谓词模式 is<Attribute>()isCheckedOut() )命名 getter。 )。

关于java - 如何在Java中建立这个关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70088400/

相关文章:

java - 如何将弧度转换为度数

java - 我可以使这个 java pluck() 方法更安全吗?

java - 如何为检查 RadioButton 分配数值并将其传递到下一个 Activity (类似于问卷应用程序)

java - 注释掉 "@Override"是否安全?

java - 对象引用数组

java - 在 Windows 上运行 Java 独立应用程序(作为服务)

java - 返回数组与填充数组

java - 如何使用 Java3D API 在 Java 中绘制简单的 3D 点(x,y,z)?

java - Java 中非常奇怪的 PreparedStatement?

java - Servlet 异常 - servlet.init()(UnsupportedClassVersion)