Вопрос по ООПООП? Пишу приложение и не могу понять как правильно сделать. Есть классы 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().
Это действительно интересный вопрос, и ответ на него может зависеть от конкретной реализации вашего приложения и его архитектуры.
Если вы хотите, чтобы все изменения размеров страниц происходили через PageHandler, то вариант с методом PageHandler::setSize(int page, int width, int height) может быть логичным. В этом случае PageHandler будет отвечать за координацию изменений размеров страниц и обновление их позиций.
Однако, если вам необходимо, чтобы Page имел некоторую свободу и независимость, вы можете добавить метод Page::setSize(int width, int height), который будет отвечать за изменение размеров страницы. После того, как размер страницы изменен, Page может запускать метод PageHandler::updatePositions() для пересчета координат.
Оба варианта имеют свои плюсы и минусы, поэтому выберите тот, который лучше подходит для вашей конкретной ситуации и принципов проектирования вашего приложения. Кроме того, не забудьте учесть принцип единственной ответственности и разграничить функциональность классов так, чтобы каждый класс отвечал только за свою область ответственности.
Это действительно интересный вопрос, и ответ на него может зависеть от конкретной реализации вашего приложения и его архитектуры.
Если вы хотите, чтобы все изменения размеров страниц происходили через PageHandler, то вариант с методом PageHandler::setSize(int page, int width, int height) может быть логичным. В этом случае PageHandler будет отвечать за координацию изменений размеров страниц и обновление их позиций.
Однако, если вам необходимо, чтобы Page имел некоторую свободу и независимость, вы можете добавить метод Page::setSize(int width, int height), который будет отвечать за изменение размеров страницы. После того, как размер страницы изменен, Page может запускать метод PageHandler::updatePositions() для пересчета координат.
Оба варианта имеют свои плюсы и минусы, поэтому выберите тот, который лучше подходит для вашей конкретной ситуации и принципов проектирования вашего приложения. Кроме того, не забудьте учесть принцип единственной ответственности и разграничить функциональность классов так, чтобы каждый класс отвечал только за свою область ответственности.