UML类图设计咨询:关系类型、字段可见性及类成员规范
UML类图设计疑问解答

1. User与UserSettings组合关系下的字段访问权限问题
- 绝对不要让UserSettings直接访问User的私有字段,这会破坏封装性,违背面向对象设计原则。
- 正确做法是在User类中提供public级别的密码修改方法(例如
changePassword(String newPassword)),UserSettings通过调用该方法完成密码修改操作,而非直接操作User的私有字段。 - 不要为了图方便把User的password字段设为public;protected权限仅适用于继承场景,和组合关系不匹配,完全没必要用。
2. AddressPoints与UserSettings的关系选择
- 核心判断标准是生命周期依赖,而非multiplicity:
- 如果AddressPoints可以独立于UserSettings存在(比如多个UserSettings可复用同一个AddressPoints,或UserSettings销毁后AddressPoints仍能保留),选聚合关系;
- 如果AddressPoints完全依附于UserSettings,UserSettings销毁时它也必须随之销毁,选组合关系;
- 如果只是业务逻辑上的交互,没有明确的归属/生命周期绑定,选普通关联即可。
- 聚合、组合和普通关联都支持设置multiplicity,不要把multiplicity作为关系选择的核心依据,重点看类之间的依赖强度。
3. UML类图中构造函数、setter/getter的省略规则
- 不是必须全部明确标注:
- 常规的无参构造函数、标准getter/setter(仅做字段读写,无额外逻辑)可以省略,业内默认类会包含这类基础方法;
- 带有特殊逻辑的构造函数(比如参数校验、初始化复杂依赖)、自定义的getter/setter(比如getter中包含计算逻辑、setter中加数据校验)必须明确标注,避免看图者误解为常规方法。
内容的提问来源于stack exchange,提问作者Smth_Unknown
相关产品推荐
相关产品推荐

