Вопрос по ООПООП? Пишу приложение и не могу понять как правильно сделать.
Есть классы Page и PageHandler.class Page {
int x,y,height, width;
...
}class PageHandler {
vector pages;
...
}
Собственно PageHandler инкапсулирует набор страниц.
Как правильно реализовать изменение размеров одной страницы, с условием что страницы всегда должны быть размещены вертикально, то есть все страницы соприкасаются границами.
А значит, если уменьшаем высоту страницы на 50 px, то все нижестоящие страницы нужно подвинуть вверх на 50 px.
Вопрос: кто должен отвечать за такой функционал?
Если PageHandler, тогда нужно запретить прямой доступ к Page и делать все операции только через PageHandler?
Или как логичней?П.С.
Пришел в голову еще вариант. Если нужно — просто меняем размер страницы. А дальше запускаем метод PageHandler::updatePositions() который пробежится по всем страницам и пересчитает x, y координаты.
Только и тут вопрос — в каком методе это делать — PageHandler::setSize(int page,int width,int height) или Page::setSize(int width, int height). Во втором придется хранить ссылку на PageHandler что бы запустить updatePositions().

21 Авг 2019 в 07:10
143 +1
1
Ответы
1

Это действительно интересный вопрос, и ответ на него может зависеть от конкретной реализации вашего приложения и его архитектуры.

Если вы хотите, чтобы все изменения размеров страниц происходили через PageHandler, то вариант с методом PageHandler::setSize(int page, int width, int height) может быть логичным. В этом случае PageHandler будет отвечать за координацию изменений размеров страниц и обновление их позиций.

Однако, если вам необходимо, чтобы Page имел некоторую свободу и независимость, вы можете добавить метод Page::setSize(int width, int height), который будет отвечать за изменение размеров страницы. После того, как размер страницы изменен, Page может запускать метод PageHandler::updatePositions() для пересчета координат.

Оба варианта имеют свои плюсы и минусы, поэтому выберите тот, который лучше подходит для вашей конкретной ситуации и принципов проектирования вашего приложения. Кроме того, не забудьте учесть принцип единственной ответственности и разграничить функциональность классов так, чтобы каждый класс отвечал только за свою область ответственности.

20 Апр в 13:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 471 автору
Первые отклики появятся уже в течение 10 минут
Прямой эфир