У меня вопрос о моделировании ассоциаций между классами и интерфейсами. Насколько мне известно, интерфейс определяет, что может делать объект; без указания состояния или функциональности (Когда использовать интерфейс вместо абстрактного класса и наоборот?). Кроме того, в моей книге по OOAD (объектно-ориентированное моделирование и дизайн Джеймса Рубо) говорится, что ассоциация описывает группу связей с общей структурой и общей семантикой между экземплярами объектов.
Теперь предположим, что у меня есть следующие объекты:
1) Интерфейс ICar: определяет операции, которые может выполнять автомобиль.
2) BMW: класс, реализующий интерфейс ICar.
3) IWheel: интерфейс, определяющий возможности колеса.
4) LuxuryWheel: класс, реализующий интерфейс IWheel.
Теперь, чтобы смоделировать отношения между BMW и LuuryWheel, что из перечисленного вы считаете правильным с точки зрения дизайна? Я поделился своими мыслями по каждому из них
A) Создайте связь между ICar и Iwheel. Класс BMW может создавать конкретные экземпляры класса LuxuryWheel. Это очень гибкий вариант, но он сочетает в себе возможности автомобиля с возможностями Wheel. Кроме того, в определении ассоциации говорится, что существует связь между экземплярами.
Б) Создайте ассоциацию между классом BMW и классом LuxuryWheel. Решает конкретную проблему; но крепко соединяет BMW с роскошными колесами
C) Создайте связь между классом BMW и интерфейсом Iwheel. Таким образом, BMW может использовать любой тип, реализующий интерфейс IWheel.
Вариант C) мне кажется лучше. Пожалуйста, поделитесь своими мыслями.