在查看了一些信息源后,我对我的设计有几个问题。
我决定将
User
和 UserSettings
类与组合关系联系起来(因为没有特定用户,用户设置就没有意义)。我在UserSettings
类中定义了一个允许更改password
的方法,但我想知道我是否可以访问User
类中的私有字段?还是应该公开?也许受到保护?
我也看过,聚合和组合是冗余关系,主要用来表示多重性。但是我可以结合使用多重性。那么对于
AddressPoints
和UserSettings
类的关系指定什么样的关系才是正确的呢?因为我无法决定哪个更适合这里,聚合或关联。
我也想知道是否有必要在类中指定constructors、setters和getters?还是可以省略?
我决定将 User 和 UserSettings 类与组合关系链接起来(因为没有特定用户,用户设置就没有意义)。
这是对构图的正确使用。
我是否可以访问 User 类中的私有字段?还是应该公开?也许受到保护?
不,您不能从另一个班级访问
private
字段。您不能从另一个类访问 protected
字段,除非它是从 User
继承的。无论如何,鉴于 Liskov 替换原则(更准确地说是“历史约束”),这不是一个安全的做法,所以如果可能的话最好避免 protected
。
不,你不应该做到
public
。这会在类之间产生耦合,并使软件更难发展。每次你需要从另一个类访问一个字段时,你应该挑战自己,鉴于告诉,不要问原则(即告诉一个方法做某事,让类自己管理,不要问班级并在其他地方做一些事情)。
我也看过,聚合和组合是冗余关系,主要用来表示多重性。但是我可以在关联中使用多重性。
它们不是多余的。事实上,您已经发现了组合的合理使用(UML 中的复合聚合)。
但你是完全正确的:聚合(更准确地说是 共享聚合,在 UML 中)不会在 UML 中添加任何语义。所以,最好不要使用它。具有正确多重性的简单关联应该绰绰有余,
AddressPoint
的关联正是您所需要的。
是否需要在类中指定构造函数、setters和getters?还是可以省略?
图表不需要详尽无遗。您决定要显示什么以及焦点在哪里。不显示构造函数、setter 和 getter,并不排除它们存在。放置所有的 getter 和 setter 可能会使图表看起来比需要的更复杂,而不会增加很多价值。