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

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

В процессе обучения студенты выполняют проекты, позволяющие применить на практике полученные знания и потренировать навыки командной разработки.

Программа курса

Введение

Программа и программное обеспечение (ПО). Свойства хорошего программного обеспечения. Роль проектирования в производстве ПО. Примеры плохого проектирования.

Базовые принципы проектирования. Декомпозиция. Шаблон “Model-View-Controller”. Правила установления зависимостей между компонентами.

Объектно-ориентированный подход

Объектно-ориентированный подход. Состояние, поведение и идентичность объекта. Объекты как функциональные единицы. Интерфейсы. Инкапсуляция. Полиморфизм и наследование. Принцип замещения Лисков. Методы повторного использования. Наследование vs. композиция. Принципы объектно-ориентированного проектирования.

Моделирование c использованием UML

Модели в различных областях человеческой деятельности. Роль моделирования в процессе разработки. UML и его назначение. Базовые сущности UML.

Функциональные требования и диаграммы использования. Система, действующие лица и варианты использования. Включение и расширение.

Бизнес-процессы и диаграммы деятельности. Диаграммы состояний и их применение для описания поведения реактивных систем.

Диаграммы классов и моделирование предметной области. Способы моделирования свойств. Ассоциации. Обобщение. Зависимости.

Моделирование взаимодействия объектов. Диаграммы последовательности и взаимодействия. Диаграммы компонент и декомпозиция системы. UML в процессе разработки.

Проектирование с использованием шаблонов

Шаблоны проектирования и их назначение.

Порождающие шаблоны. Утилитные классы. Шаблон “singleton”. “Ленивая” инициализация. Клонирование объектов. Шаблон “prototype”. Фабрика. Шаблон “Abstract Factory”. Шаблон “Factory Method”. Поэтапное конструирование объекта. Шаблон “Builder”.

Структурные шаблоны. Сокрытие реализации. Шаблоны “wrapper” и “adapter”. Принципы обработки ошибок в приложениях. Использование полиморфизма и композиции при едином базовом интерфейсе. Шаблон “Composite”. Шаблон “Decorator”. Оптимизация числа объектов. Шаблон “Flyweight”. Проектирование удаленного и отложенного выполнения. Шаблон “Proxy”.

Поведенческие шаблоны. Шаблон “Chain of Responsibility”. Шаблон “Context”. Архитектуры, управляемые событиями. Шаблон “Listener”. Отложенное выполнение. Шаблон “Command”. Инкапсуляция поведения. Шаблон “Strategy”. Подходы к реализации поведения, основанного на модели конечного автомата. Шаблон “State”. Шаблон “Visitor”.

Качество программных продуктов

Свойства программного продукта с точек зрения потребителя и производителя. Тестирование и психология тестирования. Тестирование в процессе разработки. Принципы тестирования. Типы тестов. Test driven development. Unit-тесты.

Динамическое и статическое тестирование. Подходы к тестированию. Метод “черного” и “белого” ящика. Функциональное и структурное тестирование. Принципы функционального тестирования. Разбиение на классы эквивалентности. Анализ граничных условий. Отрицательное тестирование. Дефект. Управление дефектами. Составление плана тестирования.

Проектирование многопоточных приложений

Метрики производительности приложения. Потоки vs. процессы. Проблема параллельного доступа. Атомарные операции. Блокировка доступа к ресурсу. Модель памяти многопоточного приложения. Примитивы синхронизации. Монитор. Семафор. Барьер. Типовые задачи параллельного программирования. Производители и потребители. Читатели и писатели.

Ключевое слово volatile. “Облегченная” синхронизация. Проблема “ленивой” инициализации в случае нескольких потоков. Антишаблон Double-Checked Locking. Шаблоны проектирования многопоточных приложений. Шаблоны “Thread Local”, “Scheduler”, “Thread Pool”.

Проектирование сетевых приложений

Задача сетевого взаимодействия. Семиуровневая модель OSI. Internet Protocol (IP). Transport Control Protocol (TCP). Процедура открытия соединения в TCP. Состояния TCP соединения. Сокеты. Проектирование сетевого взаимодействия на основе TCP. Блокирующее и неблокирующее чтение. Кодирование сообщений в поток. Организация транспортных сессий. Контроль разрыва соединения. Контроль чтения и записи. Решение типовых проблем.