Курс

ООП и принципы проектирования (SOLID)

Язык, на котором обсуждают проектные решения: четыре принципа ООП и виды полиморфизма, пять принципов SOLID (SRP, OCP, LSP, ISP, DIP) на конкретных примерах, а также KISS, DRY и YAGNI и грань, за которой принципы начинают вредить. Цель — не заучить определения, а понимать, какую проблему решает каждый принцип и какой ценой. Примеры на C#, но сами принципы языко-нейтральны.

1модуль8уроков

Программа

Что внутри курса

  1. 01

    ООП и SOLID

    8 уроков

    Принципы, на которых стоит объектно-ориентированное проектирование: четыре столпа ООП и виды полиморфизма, пять принципов SOLID на примерах и набор KISS/DRY/YAGNI. Каждый принцип разбирается как решение конкретной проблемы поддерживаемости — и как компромисс, у которого есть цена и граница применимости.

    1. Четыре столпа ООП: инкапсуляция, наследование, полиморфизм, абстракцияЧетыре столпа ООП — не термины для зубрёжки, а инструменты управления сложностью: инкапсуляция прячет состояние за контрактом и держит инварианты, абстракция отделяет «что» от «как», наследование переиспользует ценой сильной связи, полиморфизм делает реализации взаимозаменяемыми. Центр — инкапсуляция и абстракция, не наследование.
    2. Виды полиморфизма и замена switch-по-типуПолиморфизм бывает трёх видов — подтипный (virtual/override, выбор по runtime-типу), ad-hoc (перегрузка) и параметрический (generics). Урок разбирает их различие и ключевое применение подтипного: замену разрастающегося switch-по-типу виртуальным методом, где добавление типа становится новым классом, а не правкой всех ветвлений.
    3. SRP: единственная ответственностьSRP — у класса одна ответственность и одна причина для изменения, где «причина» — это ось изменения или заинтересованная сторона, а не строка кода. Урок показывает, как класс, который считает, форматирует и сохраняет, разделяют по сторонам, и почему SRP — про когезию, а не про размер класса.
    4. OCP: открыт для расширения, закрыт для измененияOCP — модуль открыт для расширения, но закрыт для изменения: новое поведение добавляют, не правя существующий код. Урок показывает, как контракт и полиморфизм превращают добавление варианта в новый класс вместо правки switch, почему «закрыт» не значит «заморожен» и где граница, за которой абстракция вводится впрок и вредит.
    5. LSP: подстановка ЛисковLSP — объект подтипа должен подставляться вместо базового без нарушения корректности, и проверяет это не компилятор, а поведенческий контракт. Урок разбирает классический Square/Rectangle, где «is-a» по словарю ломает клиента, и показывает, что нарушение LSP — признак неверной иерархии наследования.
    6. ISP: разделение интерфейсовISP — клиента нельзя заставлять зависеть от методов, которыми он не пользуется: толстый интерфейс навязывает реализациям заглушки (заодно нарушая LSP) и связывает несвязанных клиентов. Урок дробит fat interface на узкие ролевые контракты и показывает, что ISP — это SRP на уровне интерфейсов и подготовка к DIP.
    7. DIP: инверсия зависимостейDIP — высокоуровневые модули и детали зависят от абстракций, а не друг от друга: высокий уровень объявляет интерфейс, деталь его реализует, и направление зависимости инвертируется. Урок показывает, почему new внутри класса приклеивает его к детали, как подстановка реализации снаружи лечит это и чем DIP отличается от DI.
    8. KISS, DRY, YAGNI и грань over-engineeringKISS, DRY и YAGNI уравновешивают догматичный SOLID: простейшее работающее решение, один источник истины (но дублирование лучше неверной абстракции) и отказ строить под воображаемое будущее. Урок закрывает модуль мыслью, что все принципы служат поддерживаемости, а применённые впрок дают over-engineering.

Готовьтесь по структуре, а не вслепую

Откройте курс в приложении и закрепляйте темы в тренажёре вопросов с AI-разбором.

ООП и принципы проектирования (SOLID): подготовка к собеседованию — JobJump