Целью курса является изучение студентами теории и практики разработки в объектно-ориентированной парадигме, знакомство их со стандартными практиками и паттернами проектирования и формирование четкого понимания структуры и оснований ООП.
В результате прохождения курса студенты должны приобрести инженерные компетенции в области проектирования сложных информационных систем.
Курс включает семь лабораторных работ, каждая из которых направлена на последовательное освоение ключевых концепций ООП и построения архитектуры программного обеспечения – от базовых понятий и до создания собственного продукта.
- Лабораторная работа 1. Понятие инкапсуляции. Углубленное освоение базовых принципов ООП, теоретическое изучение инкапсуляции и полиморфизма, а также примеров их реализаций в ООП-языках.
Результат: получены базовые навыки абстрактного описания предметных областей. - Лабораторная работа 2. Понятия полиморфизма, наследования и объектной композиции. Продвинутая работа с наследованием. Сравнение подходов объектной композиции и наследования. Практическое применение данных концепций для решения инженерных задач.
Результат: получены углубленные навыки абстрактного описания предметных областей. - Лабораторная работа 3. Рефакторинг и качество кода. Знакомство с принципами из акронима SOLID. Применение их для оценки качества кода и его рефакторинга.
Результат: выработан навык оценки качества кода на основе формализованных практик. - Лабораторная работа 4. GRASP и GoF паттерны. Порождающие паттерны. Знакомство с паттернами системного дизайна (в частности GoF). Практическое освоение порождающих паттернов.
Результат: изучены GRASP принципы и получен опыт практического применения порождающих паттернов проектирования. - Лабораторная работа 5. GRASP и GoF паттерны. Структурные и поведенческие паттерны. Расширение набора известных паттернов проектирования. Применение структурных и порождающих паттернов через реальные инженерные задачи.
Результат: получен опыт практического применения структурных и поведенческих паттернов проектирования. - Лабораторная работа 6. Продвинутое ООП. Знакомство с принципами построения усложненных связей между объектами (Dependency Injection). Взаимодействие паттернов проектирования между собой, создание интерфейсов для программных модулей. Изучение понятия юнит-тестирования и подхода TDD.
Результат: освоен подход Dependency Injection в частности на примере создания модульных тестов. - Лабораторная работа 7. Проект. Освоение комплексных архитектурных паттернов. Знакомство с Clean Architecture. Применение всех предыдущих знаний для проектирование и разработки серверного приложения на одном из ООП-языков.
Результат: спроектировано и реализовано полноценное backend приложение, освоено практическое применение лучших практик в построении архитектуры таких приложений.
Каждая лабораторная работа будет иметь несколько пунктов.
- Цель: формулировка цели работы. Краткая информация о теме и основных задачах.
- Теоретическая часть: теоретические сведения и методические указания.
- Задание: формулировка задания работы.
- Definition of Done: чек-лист критериев, позволяющий объективно определить завершённость работы.
Сдача лабораторных работ осуществляется в формате устного собеседования. Критерии сдачи в общем виде представляют собой:
- выполнение всех пунктов из Definition of Done;
- владение теоретическим материалом, относящимся к теме;
- умение аргументировать выбранные архитектурные решения;
- готовность продемонстрировать владение кодом (через выполнение дополнительных «лайв»-заданий). Также необходимо помнить, что все лабораторные необходимо сохранять в удаленный git-репозиторий (подойдет любой провайдер) со всей историей коммитов.
Курс рассчитан на три контрольные точки. Каждая контрольная точка включает сдачу двух лабораторных работ:
- до 1 марта: 1 и 2 лабораторные;
- до 1 апреля: 3, 4 и 5 лабораторные
- до 1 мая: 6 и 7 лабораторные.
Стоит отметить, что распределение может быть не слишком эффективным, так как сложность работ сильно отличается. Поэтому рекомендуется выстраивать график в соответствие с фактической сложностью и уровнем трудозатрат, установленный дедлайн – лишь крайний срок.