强文本我正在对我的项目进行建模,随后我将使用 UML 在 Java 中实现该项目。我的项目涉及管理健身房,更具体地说,我目前正在建模一个类图,该图允许我组织锻炼程序。我将锻炼程序解释为列表的列表:锻炼程序是“workoutDay”类的列表(从 1 到 7),而这些类又是“exercisesForTheWorkoutRoutine”类的列表(我通过两个组合来模拟这种情况) 。然而,workoutRoutines 中的 'exercisesForTheWorkoutRoutine' 与 'exercise' 类不同(它只有一个 String 类型的名称和一个枚举类型的状态),因为它们还具有恢复时间、重复次数和套数。我的疑问涉及如何连接这两个类:“exercisesForTheWorkoutRoutine”和“exercise”。我问这个问题是因为我需要当一个练习从“练习”列表中删除时(例如,健身房不再有某种设备),与删除的练习同名的所有“exercisesForTheWorkoutRoutine”实例也将被删除。被淘汰了。
我不知道它是泛化、简单关联(在本例中,我认为基数为 1..1)还是聚合。
当有疑问时,优先选择组合而不是继承。这个流行建议中的“组合”指的是 OOP 对象组合,即在 UML 中表示为关联。
事实上,
Exercise
似乎是一种模板或参考,很可能具有其他属性(例如状态)和与ExerciseForWorkout
完全不同的行为。例如,您可以想象 Exercise
稍后可以通过视频链接来丰富或与作者相关联以进行数字版权管理,而这些信息可能与 ExerciseForWorkout
中不相关。
仅当
ExerciseForWorkout
对象始终可以替换 Exercise
对象时,才应考虑继承。而这里的情况似乎并非如此。
尽管如此,从建模的角度来看,您可能想知道
ExerciseForWorkout
是否始终与 Exercise
相关,这是您的(模糊的)多重性所暗示的。在这种情况下,您应该问问自己是否真的需要重复引用的名称
锻炼。您还可以将 ExerceForWorkout 视为 Exercise
和 DailyWorkout
之间的关联类。
一些不相关的评论: