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