Перейти к содержимому

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).