У меня есть приложение со своим собственным классом, определенным пользователем, и я также использую библиотеки инфраструктуры Qt для инициации объектов других классов, которые являются встроенными. Итак, в моем классе давайте назовем его «myclass», я создаю экземпляры встроенных классов Qt и работаю с ними. ЭТО СДЕЛАНО … Теперь мне нужно создать диаграмму классов для этого. Мне было интересно, к какому из классификаций это может быть отнесено, исходя из ассоциации, агрегации, состава или обобщения?
Спасибо
Важно помнить о UML, поскольку при принятии решения о том, что использовать, часто нет правильного или неправильного ответа, но некоторые инструменты лучше других. UML — это просто инструмент для общения, и пока инструмент используется таким образом, что все понимают, что сообщается, он служит своей цели.
Для диаграммы классов, на самом базовом уровне, вы могли бы фактически смоделировать все с помощью только ассоциации и обобщения, но тогда в этом не хватило бы деталей, которые другие захотят увидеть.
Обобщение имеет отношение один к одному с наследованием, поэтому понятно, когда его использовать.
Ассоциация описывает любой класс, имеющий отношения или зависимость с другим классом; там довольно обобщение (!), поэтому его можно использовать вместо агрегации и композиции.
Агрегация используется, когда объект (B) составляет другой объект (A) и B может использоваться совместно с другими объектами. Например, библиотека состоит из книг, поэтому книга может быть смоделирована как совокупность библиотеки, потому что другие классы также могут объединять книгу, например, лицо, занимающее ее.
Используйте композицию, когда объект (B) используется непосредственно для создания объекта (A). В этом случае, если вы моделировали человеческое тело и имели классы органов, вы должны были бы моделировать класс сердца как составной объект класса тела.
Тот факт, что вы используете платформу Qt, не имеет отношения к тому, что вы используете для моделирования своих классов, и диаграмма не должна моделировать все, только то, что необходимо для передачи концепций другим.
Если, например, вы используете контейнерные классы, такие как QList и QMap, вы, вероятно, даже не хотите использовать их на диаграмме, но если вы должны использовать QTcpSocket и наследовать от него, то, возможно, будет лучше показать это.
Просто помните, это все о том, что вы пытаетесь общаться.
Это не обобщение, поскольку вы не наследуете здесь, поэтому оно не может рассматриваться как отношение «есть».
Что касается ассоциации, композиции или агрегации … здесь вы можете найти довольно хорошее объяснение, которое есть что. Невозможно сказать правильный для вас, не зная ваш вариант использования лучше. Тем не менее, чтение другой ссылки поможет вам понять различия и судить по вашему сценарию.
Разница между ассоциацией, агрегацией и составом
Надеюсь, это поможет.