1. Объектно-ориентированное проектирование: введение | OOD 2026
Алексей Малов (лекции по программированию)
0:00 / 0:00
1. Объектно-ориентированное проектирование: введение | OOD 2026
1 130 просмотров · 9 дней назад
Алексей Малов (лекции по программированию)
6,31 тыс. подписчиков
1 130 просмотров · 9 дней назад
Курс "Объектно-ориентированное проектирование" специальность 09.03.04 "Программная инженерия", 3 курс.
Про подготовку программистов в Институте iSpring здесь: https://ispring.institute/software-en...
Что отличает хорошо написанные классы от хорошо спроектированной системы?
Это вводная лекция курса «Объектно-ориентированное проектирование». Она продолжает курс ООП и переносит внимание с отдельных классов на систему объектов, их ответственности, зависимости и способность программы развиваться при изменении требований.
В качестве сквозного примера мы шаг за шагом проектируем небольшой графический редактор. Начинаем с простой версии с прямоугольниками и эллипсами, а затем последовательно меняем требования: добавляем новые фигуры, экспорт в SVG и PDF, возможность менять геометрию существующей фигуры и выбирать объекты мышью.
На этом примере разбираем, почему одни изменения остаются локальными, а другие неожиданно затрагивают множество классов, как находить независимо изменяющиеся части системы и когда новая абстракция действительно помогает. Постепенно приходим к интерфейсу ICanvas, отделяем фигуру от её геометрии и естественным образом встречаем паттерн Strategy — не начиная с названия паттерна, а приходя к нему из задачи проектирования.
В лекции обсуждаются:
переход от ООП к объектно-ориентированному проектированию;
диаграммы классов и последовательности как инструменты мышления;
влияние новых требований на архитектуру;
локализация изменений;
независимые направления развития системы;
цена гибкости и дополнительных абстракций;
почему не всякое различающееся поведение нужно отделять;
KISS, YAGNI и опасность overengineering;
почему невозможно спроектировать систему на все будущие случаи;
роль паттернов как словаря решений, а не набора рецептов.
Главная мысль лекции:
Архитектура — это не попытка сделать всё гибким. Это осознанный выбор того, какие изменения сделать дешёвыми.
И главный вопрос, к которому мы будем возвращаться на протяжении курса: что произойдёт с этим дизайном, когда изменятся требования?
Полезные ссылки:
Примеры кода, конспекты, практические задания по курсу Object-Oriented Design: https://github.com/alexey-malov/ood
Мой канал в Telegram, чтобы оставаться на связи: https://t.me/vivid_coding
Поддержать меня на Boosty: https://boosty.to/vivid-bw
Тайм-коды:
0:00 — От классов к системе объектов
7:24 — Визуализация архитектуры программы
16:23 — Как добавить новую фигур в графический редактор
26:20 — Легко ли добавить новую операцию в иерархию классов?
31:10 — Чем больше иерархия, тем сложнее добавлять операции
34:41 — Выделяем независимые оси изменений в программе
36:31 — Выделяем Холст как абстракцию поверхности рисования
42:37 — Отделяем фигуру от её геометрии и изобретаем паттерн "Стратегия"
53:05 — Любая ли гибкость полезна?
1:00:25 — Архитектура — выбор того, какие изменения сделать дешёвыми
1:04:15 — Можно ли всё спроектировать заранее?
1:12:07 — Для чего нужны паттерны проектирования?
1:16:12 — О чём будет курс Object-Oriented Design?
В заставке использована композиция "Папа может в Си" музыкального коллектива "Научно-технический рэп" (https://vk.com/nii_rap).