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

Цели и задачи дисциплины

В результате изучения дисциплины слушатели должны познакомиться с основными принципами и приемами объектно-ориентированного проектирования и программирования.

В результате изучения дисциплины слушатели должны знать

уметь

Содержание разделов дисциплины

  1. Введение. О чем этот курс. Критерии качества программ. Надежность, производительность, простота поддержки и развития, безопасность, удобство для пользователя.
  2. Основные принципы дизайна. Разделение данных и кода. Защита данных от случайного изменения. Единство дизайна внутри программы. Повторное использование кода.
  3. Разные подходы к дизайну программы. Процедурно-ориентированный дизайн. Обектно-ориентированный дизайн.
  4. Архитектура программы. Разделение программы на части (слои). Разные типы общения между слоями. Компонентный дизайн.
  5. Простой пример полезной техники — assert. assert в Java.
  6. Рефакторинг. Понятие рефакторинга. Ситуации, в которых полезен рефакторинг. Примеры плохого кода, нуждающегося в рефакторинге.
  7. Рефакторинг и unit-тестирование. Опасности рефакторинга. Важность внутренних тестов. Unit-тесты.
  8. Junit.
  9. Конкретные приемы рефакторинга. Введение/удаление временной переменной. Extract/inline method. Перемещение метода/поля. Расщепление/слияние классов. Замена наследования включением и обратно. Композиция рефакторингов.
  10. Шаблоны проектирования. Общая идея. Полезность знания конкретных шаблонов.
  11. Простые примеры. Interface. Delegation. Immutable. Proxy.
  12. Структурные шаблоны. Adapter. Decorator. Iterator. Facade.
  13. Генерирующие шаблоны. Factory Method. Factory. Builder. Singleton. Object Pool.
  14. Шаблоны поведения. Command. Mediator. State. Null Object. Observer. Visitor.

Рекомендуемая литература