Рубрика «проектирование»

Вопросы проектирования ПО: UML, паттерны и т.п.

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

iconix

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

Диаграммы классов UML

Введение Диаграмма классов занимает центральное место в проектировании объектно-ориентированной системы. Нотация классов используется на разных этапах проектирования и строится с различной степенью детализации. Язык UML применяется не только для проектирования, но и с целью документирования, а также эскизирования проекта. Я (в отличии от Гради Буча) не являюсь сторонником разработки проекта с использованием всех видов UML …

Основы UML. Диаграммы последовательности

sequence-erlang-process-example

Диаграммы последовательности (sequence diagram) являются видом диаграмм взаимодействия языка UML, которые описывают отношения объектов в различных условиях. Условия взаимодействия задаются сценарием, полученным на этапе разработки диаграмм вариантов использования [1]. Существуют различные взгляды на применение этого вида диаграмм: Фаулер предлагает строить диаграммы последовательности для визуализации наиболее сложных отношений на диаграмме классов [2]; Буч рассматривает их в …

Процесс ICONIX. Диаграммы пригодности

robustness_use_case_1

После построения диаграмм вариантов использования и их согласования с заказчиком, процесс ICONIX предлагает приступить к разработке диаграмм пригодности (робастности, rubustness diagrams) [1, 2]. Гради Буч не использует этот вид диаграмм, однако он все равно просматривает каждый вариант использования и пытается выделить объекты, после чего переходит сразу к построению диаграмм взаимодействия [3]. Назначение диаграмм робастности: идентификация …

Основы UML — диаграммы использования (use-case)

use-case-include-example

Это первая статья из цикла про методологию ICONIX, посвящена UML-диаграммам вариантов использования. В публикациях и книгах по ICONIX, use-case диаграммы обычно описываются очень бегло, а в книгах по UML — слишком подробно. Я постараюсь сделать это настолько подробно, чтобы можно было приступить к использованию диаграмм, но при этом не было скучно. Важно, что до тех …

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

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

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

Dependency_Inversion_Principle_example

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

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

Singleton-example-UML

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

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

рис. 3 decorator implementation

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

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

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

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