ООП: инкапсуляция, наследование, полиморфизм

Три кита ООП с человеческими примерами, абстракция, отличие класса от объекта и как это формулировать на защите курсовой.

ООП — способ описывать программу как набор объектов, у каждого из которых есть состояние (поля) и поведение (методы). Класс — это чертёж, объект — конкретное изделие по этому чертежу.

Инкапсуляция

Данные прячутся внутри класса, наружу торчат только методы. Смысл не в секретности, а в контроле: нельзя записать в поле «возраст» число −5, если запись идёт через сеттер с проверкой.

class Student {
    private int _age;
    public int Age {
        get => _age;
        set {
            if (value < 0 || value > 120) throw new ArgumentException("Некорректный возраст");
            _age = value;
        }
    }
}

Наследование

Класс-наследник получает поля и методы родителя и добавляет своё. Правильный критерий — отношение «является»: Круг является Фигурой. Если отношение «состоит из» (Автомобиль состоит из Двигателя), нужно не наследование, а композиция.

На защите частая претензия: наследование ради переиспользования кода. Если наследник не может подставиться вместо родителя без сюрпризов, нарушен принцип подстановки Лисков — лучше вынести общее в отдельный класс.

Полиморфизм

Один и тот же вызов работает по-разному в зависимости от фактического типа объекта. Это то, ради чего вообще существует наследование.

abstract class Figure { public abstract double Area(); }
class Circle : Figure { public double R; public override double Area() => Math.PI * R * R; }
class Rect : Figure { public double A, B; public override double Area() => A * B; }

Figure[] figures = { new Circle { R = 2 }, new Rect { A = 3, B = 4 } };
foreach (var f in figures) Console.WriteLine(f.Area()); // каждый считает по-своему

Различают полиморфизм времени выполнения (виртуальные методы, переопределение) и времени компиляции (перегрузка методов, шаблоны/дженерики).

Абстракция — четвёртый принцип

Абстракция — выделение существенного и отбрасывание деталей. В коде это абстрактные классы и интерфейсы: они говорят, что объект умеет делать, не говоря, как именно.

Шпаргалка на защиту

ПринципФормулировка в одну строкуГде в моём коде
ИнкапсуляцияДанные закрыты, доступ через методы с проверкамиПриватные поля и свойства класса
НаследованиеОбщее поведение вынесено в базовый классИерархия классов
ПолиморфизмОдин интерфейс — разные реализацииВиртуальные/абстрактные методы
АбстракцияРаботаем с интерфейсом, а не с деталямиИнтерфейсы и абстрактные классы

Частые вопросы

Чем абстрактный класс отличается от интерфейса?

Абстрактный класс может содержать реализацию и поля, наследоваться от него можно только от одного. Интерфейс задаёт только контракт, и реализовать их можно много.

Что такое SOLID и надо ли его знать?

Это пять принципов проектирования (единственная ответственность, открытость/закрытость, подстановка Лисков, разделение интерфейсов, инверсия зависимостей). На защите курсовой достаточно уметь показать первый и третий на своём коде.

Читайте также

Сделаем работу по этой теме

Опишите задачу — ответим в течение 15 минут в личных сообщениях ВКонтакте, назовём срок и цену. Предоплаты за оценку нет.

  • Оценка заявки бесплатно
  • Правки по замечаниям преподавателя
  • Работы по всем техническим и IT-дисциплинам

Нажимая кнопку, вы соглашаетесь на обработку указанных данных для ответа на заявку.