我必须编写链接 2 个类的 UML:Product(不可见)和 ShoppingCart
我已经声明了 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) 和常见符号:
- 具体类
Product
(盒子夹在顶部) - 具体类
ShoppingCart
(底部方框) - 两者之间的聚合关联:从
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
}
命名注意事项:
我对改进属性名称的评论来自 cart
至products
不仅仅表达类型 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/