UML 类图关系和字段可见性的问题

问题描述 投票:0回答:1

在查看了一些信息源后,我对我的设计有几个问题。

我决定将

User
UserSettings
类与组合关系联系起来(因为没有特定用户,用户设置就没有意义)。我在
UserSettings
类中定义了一个允许更改
password
的方法,但我想知道我是否可以访问
User
类中的私有字段?还是应该公开?也许受到保护?

我也看过,聚合和组合是冗余关系,主要用来表示多重性。但是我可以结合使用多重性。那么对于

AddressPoints
UserSettings
类的关系指定什么样的关系才是正确的呢?因为我无法决定哪个更适合这里,聚合或关联。

我也想知道是否有必要在类中指定constructors、setters和getters?还是可以省略?

uml visibility composition class-diagram class-design
1个回答
1
投票

我决定将 User 和 UserSettings 类与组合关系链接起来(因为没有特定用户,用户设置就没有意义)。

这是对构图的正确使用。


我是否可以访问 User 类中的私有字段?还是应该公开?也许受到保护?

不,您不能从另一个班级访问

private
字段。您不能从另一个类访问
protected
字段,除非它是从
User
继承的。无论如何,鉴于 Liskov 替换原则(更准确地说是“历史约束”),这不是一个安全的做法,所以如果可能的话最好避免
protected

不,你不应该做到

public
。这会在类之间产生耦合,并使软件更难发展。每次你需要从另一个类访问一个字段时,你应该挑战自己,鉴于告诉,不要问原则(即告诉一个方法做某事,让类自己管理,不要问班级并在其他地方做一些事情)。


我也看过,聚合和组合是冗余关系,主要用来表示多重性。但是我可以在关联中使用多重性。

它们不是多余的。事实上,您已经发现了组合的合理使用(UML 中的复合聚合)。

但你是完全正确的:聚合(更准确地说是 共享聚合,在 UML 中)不会在 UML 中添加任何语义。所以,最好不要使用它。具有正确多重性的简单关联应该绰绰有余,

AddressPoint
的关联正是您所需要的。


是否需要在类中指定构造函数、setters和getters?还是可以省略?

图表不需要详尽无遗。您决定要显示什么以及焦点在哪里。不显示构造函数、setter 和 getter,并不排除它们存在。放置所有的 getter 和 setter 可能会使图表看起来比需要的更复杂,而不会增加很多价值。

© www.soinside.com 2019 - 2024. All rights reserved.