Your comments
Большое спасибо вам за отзыв, Михаил! Если у вас появятся какие-нибудь вопросы, идеи и предложения — пишите!
Hi Bruno!
Thanks a lot for taking the time to report this issue. I'll address it soon and upload the fix with the next update. Thanks again!
Здравствуйте!
Спасибо за вашу идею! Так как я сам не владею Kotlin, то такой раздел появится на сайте тогда, когда найдётся доброволец, который согласится написать на нём примеры. Если вы или кто-то другой, кто увидит ответ, захотите этим заняться — пишите мне на почту support@refactoring.guru.
Hi!
Sure, there you go:
Mac
1. Connect your iPad to Mac/PC via USB cable.
2. Open Finder. Your iPad should appear in the left sidebar. Select it.
3. In the main section of the Finder window you should now see your iPad information. There's a tab bar on top (General, Music, Films, ...). Find the "Files" tab and select it.
4. You should now see the list of apps. If you have the Kindle app installed on your iPad, the app should be in the list. Now, simply drag-n-drop your kfx book file into the Kindle app.
5. The book should now appear in Kindle app on iPad.
PC/Windows
1. Download and install iTunes (https://support.apple.com/en-us/HT210384).
2. Connect your iPad to Mac/PC via USB cable.
3. Open iTunes. Your iPad should appear in the left sidebar. Select it.
4. In the main section of the Finder window you should now see your iPad information. There's a tab bar on top (General, Music, Films, ...). Find the "Files" tab and select it.
5. You should now see the list of apps. If you have the Kindle app installed on your iPad, the app should be in the list. Now, simply drag-n-drop your kfx book file into the Kindle app.
6. The book should now appear in Kindle app on iPad.
Please let me know if you have any further questions.
Hi!
Thanks for the good question! Frankly, I don't see a big difference. I would ask myself whether the added bloat really adds anything valuable, be that regular comments or Doxygen.
If you use Doxygen for marking out typing info in a language that lacks it (earlier versions of PHP, for example) then this is probably okay. If you mark types that are already obvious, then it's just bloat. I have seen projects where the Doxygen documentation became an obsessive thing, where people were adding Doxygen comments to everything, important or not, just for the sake of consistency.
Здравствуйте!
Большое спасибо за баг репорт! Ошибку уже исправил, залью исправление на сайт в течение дня. Ещё раз спасибо!
Да, верно.
Ассоциация — связь между объектами.
Агрегация — связь между объектами И один из объектов — контейнер, а второй — компонент.
Композиция — связь между объектами И один из объектов — контейнер, а второй — компонент И контейнер управляет жизненным циклом компонента.
Здравствуйте!
Прошу прощения за задержку с ответом! Давайте я попробую расставить точки над «і» и убрать все неточности. Сперва, что касается этого абзаца:
“Агрегация — это специализированная разновидность ассоциации, которая описывает отношения один-ко-многим, многие-ко-многим, часть-целое между несколькими объектами, тогда как ассоциация устанавливает связь только между двумя объектами.”
Думаю, я совершил ошибку, формулируя конец абзаца таким образом. В последней редакции книги я уберу окончание этого абзаца. Я добавил этот фрагмент с целью продемонстрировать смысловую разницу между двумя типами связей, не найдя мысленно примеров множественной ассоциации. Сейчас задался вопросом и нашёл (пример).
Итак, если все три типа отношений — ассоциация, агрегация и композиция — могут быть базово реализованы полем в классе. Как понять что перед вами?
Перед тем как отвечу, хочу сказать, что обычно такой вопрос не возникает, когда вы смотрите на код. Обычно, код создаётся на основании UML диаграммы или другой спецификации, в которой указан тип связи, а не наоборот. Тип связи определяется при проектировании класса, а код пишется уже позже. К примеру, вы получаете на входе спецификацию, в которой кто-то потрудился нарисовать UML-диаграмму, видите там "композицию" и понимаете, что вам нужно сделать "контейнер с управлением жизненным циклом компонентов". Возможно, определение типа связи пост-фактум, как-то может помочь при обсуждении кода, если спеки утеряны или устарели.
Итак, как понять что перед вами, если у вас есть класс, в нём поле-ссылка на другой класс?
1. По-умолчанию, мы думаем что это ассоциация, но делаем несколько проверок, которые могут уточнить тип связи.
2. Если мы можем с определённостью сказать, что один класс выступает контейнером, а второй компонентом, то эту связь можно считать агрегацией. Как это понять? В большинстве случаев, это очевидно. Вы видите класс PageCollection и класс Page – явный контейнер-коллекция и явный для него компонент. В менее очевидных случаях, пытаетесь понять, есть ли между классами здесь отношение часть-целое. При этом, как "часть", так и "целое" могут вполне нормально существовать в программе сами по себе (пустой список страниц vs страница в отрыве от списка). Если определить не выходит, то двигаетесь к следующему шагу, может он это прояснит.
3. Если ли в "контейнере" (класс, который содержит ссылку) мы нашли код управления жизненным циклом компонента, то это связь-композиция.
Надеюсь, этот ответ прояснит для вас вопрос с отношениями. Если что, задавайте вопросы :)
Customer support service by UserEcho
Thank you for such high praise!