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

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

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

sequence-erlang-process-example

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

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

robustness_use_case_1

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

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

use-case-include-example

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

Введение в логическое программирование (Prolog)

prolog backtracking example

На блоге я публиковал ряд статей по логическому программированию, а также разбирал решения задач на языке Prolog. Недавно я заметил, что из всего этого могла бы получиться полноценная методичка если добавить введение. Введение написано так, чтобы после его прочтения Вы смогли начать программировать на Prolog, более строгой с математической точки зрения материал стоит искать в …

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

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

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

Dependency_Inversion_Principle_example

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

Рекурсия в программировании. Анализ алгоритмов

merge-sort_flowchart

Рекурсия — это свойство объекта подражать самому себе. Объект является рекурсивным если его части выглядят также как весь объект. Рекурсия очень широко применяется в математике и программировании: структуры данных: граф (в частности деревья и списки) можно рассматривать как совокупность отдельного узла и подграфа (меньшего графа); строка состоит из первого символа и подстроки (меньшей строки); шаблоны …

Анализ сложности алгоритмов. Примеры

asymptotic notation_Omega

Алгоритм — это точное предписание, однозначно определяющее вычислительный процесс, ведущий от варьируемых начальных данных к искомому результату [1]. При разработке алгоритмов очень важно иметь возможность оценить ресурсы, необходимые для проведения вычислений, результатом оценки является функция сложности (трудоемкости). Оцениваемым ресурсом чаще всего является процессорное время (вычислительная сложность) и память (сложность алгоритма по памяти). Оценка позволяет предсказать …

Юнит-тестирование. Пример. Boost Unit Test

Test_Driven_Developing_model

Разработка и поддержка программ невозможна без внесения изменений в существующий код. Однако, всякое изменение сопряжено с возможным внесением ошибок. Чем больше и сложнее проект — тем более нетривиальным образом изменения могут сказываться на работе подсистем. В связи с этим, любое изменение кода требует проведения тестирования. В статье описываются: Цели тестирования Организация тестирования boost test framework …