【发布时间】:2021-01-19 20:40:14
【问题描述】:
我有几个关于 Java 中的 UML 关系的问题。
以下类和接口是指 Java 中的类和接口(无论是创建的还是现有的)。
设置:
假设我有一个GenericLinkedList<T> implements Iterable<I> 类(带有私有Node<T> head)。这个类还有一个静态内部类Node<D>。
GenericLinkedList<T> 实现了抽象方法iterator()(来自Iterable<I>),它返回一个Iterator<T>。
实现Iterator<T>、GLLIterator<T> 的类将GenericLinkedList<T> 对象作为参数(在其构造函数中),但只是将此列表的头部存储在私有cur 变量中。
-
GLLIterator<T>和GenericLinkedList<T>之间的关系是否会是组合(黑色菱形指向列表),即使后者不包含前者?我认为会是因为没有“列表”,“迭代器”就毫无意义。或者它只是一个依赖,因为迭代器只是“使用”列表来获取head? -
Node<D>和GLLIterator<T>之间的关系是聚合还是组合?我认为这将是聚合,因为我们可以在同一个节点上有多个迭代器。但是,另一方面,当cur节点死亡时,迭代器就没有意义了。 - 我会在列表类和迭代器接口或实现该接口的类之间绘制依赖关系吗?
编辑:我试图通过 (1) 进行如下推理: 所以,链表有节点,迭代器有节点。 如果Java有析构函数,如果我销毁链表,我是否需要调用迭代器的析构函数? 如果我销毁链表,则应该调用节点的析构函数。 但是迭代器存在于列表之外,它(1)只是指向列表中的一个节点,(2)可以用作另一个列表的迭代器。 我问是因为我想知道迭代器类和链表类之间的 UML 关系:组合(拥有)或聚合(拥有)。
谢谢。
【问题讨论】:
-
@bruno 抱歉,最近比较忙,没时间看。再次抱歉。不过谢谢你的回答。
-
没问题,我只是很惊讶没有反应;)