Your comments

Спасибо вам за отзыв! Рад, что всё понравилось.

Hi Ali!

Thanks for taking the time to report this. I don't think it's a typo, although your version would still make sense in that context. I don't want to use "same" because the products, in the end, are not exactly the same.

Спасибо за развёрнутый фидбек! Подумаю над этим.

Хм, почему вы думаете, что это ошибка?

Yes, but be aware that this is a macOS-only piece of software.

Позволю себе процитировать абзац из книги:

Агрегация — это специализированная разновидность ассоциации, которая описывает отношения один-ко-многим, многие-ко-многим, часть-целое между несколькими объектами, тогда как ассоциация устанавливает связь только между двумя объектами.

Хочу отдельно сказать, что эти отношения в UML предназначены для того, чтобы в первую очередь описывать предназначение связи между объектами. По факту в коде у вас может быть одно и тоже как для ассоциации, так и для агрегации.

В этом случае разница действительно сильно размытая. Здесь я решил использовать агрегацию, чтобы подчеркнуть отношение часть-целое.

Здравствуйте!

> И там и там может быть отношение один к одному и один ко многим

Не уверен, почему у вас сложилось такое впечатление, но в книге указано, что:

Ассоциация — один к одному.

Агрегация — один к многим.

Здравствуйте, Александр!

Простите, у меня, вероятно, замылился глаз. В чём конкретно заключается ошибка?

Hi David!

To be honest with you, if I programmed such a thing myself, I wouldn't have a decent idea about whether or not a pattern can be applied there until later in the project: when I have a better understanding of how the actual GUI would look like, how this all be handled between requests, etc. I would probably implement the first version in a very straight-forward (e.g. fast and crappy) way to discover all hidden implications of the thing I'm building. Later, I would think about whether it makes sense to apply some of the patterns and refactor my existing code to that pattern.