Category Archives: паттерны

Процесс разработки программного обеспечения ICONIX

iconix

В предыдущих статьях я рассказывал про некоторые диаграммы UML – все эти статьи были из одного цикла, целью которого является описание полноценного процесса проектирования ICONIX: диаграммы использования (use-case) [UML_use-case]; диаграммы пригодности (rubustness) [UML_rubustness]; диаграммы последовательности (sequence) [UML_sequence]; диаграммы классов (class) [UML_class]. На этот раз я хочу показать как выглядит этот… Read more »

Паттерны MVC и Publish-Subscriber

Про шаблон проектирования MVC (Model-View-Controller, Модель-Представление-Контроллер) написано множество статей. Однако, периодически я все равно встречаю непонимание и вопросы: “зачем это надо и для чего все так усложнять?”. Попробую ответить на них. Кроме того, в статье описан паттерн Observer (Publish-Subscribe, наблюдатель, издатель-подписчик), часто применяющийся для организации взаимодействия модели и представления в… Read more »

SOLID принципы. Рефакторинг

Dependency_Inversion_Principle_example

Любая полезная программа постепенно изменяется, в нее вносятся новые возможности. Очевидно, что с кодом что-то не так, если для небольшого изменения приходится переписывать значительную часть системы. Под чистым кодом понимают код, который обеспечивает удобство сопровождения и безболезненность внесения изменений. Чистый код должен быть не только оформлен определенным образом [1], но… Read more »

Паттерн Singleton. Описание. Пример использования

Singleton-example-UML

В статье описывается паттерн Singleton (Одиночка), рассмотрены 2 реализации и некоторые возможные модификации. Проанализированы сильные и слабые стороны шаблона. Приведен пример использования. Статья состоит из двух частей: описание шаблона, варианты реализации, проблемы. Часть должна быть понятна программистам на любых языках, хотя примеры приведены на С++; более сложный пример – решается… Read more »

Многопоточный сервер Qt. Пул потоков. Паттерн Decorator

рис. 3 decorator implementation

В предыдущей статье [1] была рассмотрена работа с сокетами в библиотеке Qt. Наш сервер сетевого чата работал в одном потоке. Задача текущей статьи – описание многопоточного сервера. Однако, если сервер просто принимает сообщение и передает его всем подключенным клиентам – распараллеливать нечего и потоки не особо нужны. В связи с… Read more »

Работа с сетью в Qt. Сокеты. Паттерн Adapter

рис. 5 диаграмма классов сетевого чата

В статье показана работа с сетью на примере очень простого сетевого чата, а также описан никак не связанный с сетью шаблон проектирования адаптер (adapter, wrapper, обертка). Несмотря на то, что наш чат максимально прост (он не позволяет передавать файлы и оффлайн-сообщения, не хранит историю, передает сообщения не шифрованными и т.д.),… Read more »

Шаблон проектирования Prototype. Примеры

рис. 3 диаграмма классов после имплементации шаблона "Прототип"

Напомню, что в прошлый раз мы написали программу, которая содержала тулбар с геометрическими фигурами и поле, на которое эти фигуры добавлялись. Для каждой фигуры был определен отдельный класс, поэтому для добавления нового типа фигуры требовалось бы перекомпилировать программу. Шаблон проектирования “Прототип” решает эту проблему, позволяя порождать новые типы объектов во… Read more »

Паттерн шаблонный метод (template method)

рис. 2 шаблон проектирования template method

Template method представляет собой поведенческий шаблон проектирования. Вспоминать про него стоит всякий раз, когда в вашем проекте появляется дублирующийся код (именно с таким, плохим кодом он иногда может справиться). Суть шаблонного метода заключается в том, что алгоритм поведения объектов выносится в базовый класс, а реализация отдельных шагов падает на плечи… Read more »

Получение данных с сайта. Шаблон Producer/Consumer [Qt, C++]

producer-consumer-pattern

В последнее время часто встречал вопросы о получении данных с сайта на С++, поэтому решил написать статью, посвященную этой теме. В качестве примера статьи рассмотрена задача получения бесплатных проектов с одного фриланс-сайта [1]. На этом сайте, есть страница со списком проектов, на которой есть их (проектов) частичное описание и ссылка… Read more »

Использование БД SQL. Шаблон проектирования “Фасад” (Facade) [C++, Qt]

рис. 1 использование паттерна Facade

Статья состоит из трёх частей, в которых: описаны средства библиотеки Qt, предназначенные для работы с базами данных; рассмотрен паттерн проектирования “Facade”. Описано каким образом его можно использовать для определения интерфейса базы данных; приведён и описан пример приложения, использующего базу данных и шаблон проектирования”Фасад”. Если Вы совсем не знаете что такое… Read more »

Игра Сапер. Паттерн Mediator. Использование doxygen

рис. 1 окно игры "Сапер"

Недавно помогал какому-то студенту писать лабораторную – игру “Сапер”, и получилась вполне вменяемая штука, которую решил описать на блоге. В статье рассмотрены: паттерн проектирования Mediator (посредник); цифровой таймер с использованием QLCDNumber (в нашей игре будут отображаться часики); автоматическая генерация документации с использованием doxygen. В результате получится игрушка, снимок окна которой… Read more »