Встречается на 55% собеседований по C#

Принципы ООП

Объектно-ориентированное программирование (ООП) — это парадигма, основанная на четырёх принципах: инкапсуляции, наследовании, полиморфизме и абстракции. Эти принципы позволяют создавать гибкие, масштабируемые и легко поддерживаемые программные системы, структурируя код вокруг объектов, а не функций и логики.

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

Инкапсуляция — это сокрытие внутреннего состояния объекта и деталей его реализации от внешнего мира. Доступ к состоянию возможен только через публичные методы, которые предоставляет объект. Это защищает данные от некорректного использования и упрощает изменение внутренней логики без влияния на внешний код.

В C# инкапсуляция реализуется с помощью модификаторов доступа: private, protected, internal, public. Поля обычно объявляются private, а доступ к ним предоставляется через методы или свойства.

csharp
public class BankAccount
{
    private double balance;  // Приватное поле, недоступное извне

    public void Deposit(double amount)
    {
        if (amount > 0)
            balance += amount;
    }
text
public void Withdraw(double amount)
{
    if (amount > 0 && balance >= amount)
        balance -= amount;
}

public double GetBalance()
{
    return balance;
}

}

text

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

Наследование позволяет создавать новый класс на основе существующего. Производный класс наследует поля и методы базового класса, что способствует повторному использованию кода и иерархической организации. В C# наследование обозначается двоеточием (`:`) после имени класса.

```csharp
public class Animal
{
    public void Eat()
    {
        Console.WriteLine("Eating");
    }
}

public class Dog : Animal  // Класс Dog наследует от Animal
{
    public void Bark()
    {
        Console.WriteLine("Barking");
    }
}

Наследование также позволяет переопределять методы базового класса с помощью virtual и override, что тесно связано с полиморфизмом.

Полиморфизм

Полиморфизм — это способность объектов разных классов по-разному реагировать на одни и те же вызовы методов. В C# полиморфизм достигается через виртуальные методы и переопределение. Когда метод вызывается через ссылку на базовый класс, фактически выполняется реализация производного класса.

csharp
public class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("Some sound");
    }
}

public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("Woof");
    }
}

Полиморфизм позволяет писать код, который работает с базовым типом, но при этом использует конкретную реализацию, что упрощает расширение функциональности.

Абстракция

Абстракция — это выделение существенных характеристик объекта и игнорирование несущественных деталей. В ООП абстракция реализуется через абстрактные классы и интерфейсы. Абстрактный класс определяет общий контракт для производных классов, но не предоставляет полную реализацию.

csharp
public abstract class Vehicle  // Абстрактный класс
{
    public abstract void Move();  // Абстрактный метод
}

public class Car : Vehicle
{
    public override void Move()
    {
        Console.WriteLine("Car is moving");
    }
}

Абстракция помогает управлять сложностью, предоставляя упрощённую модель реального объекта.

Коротко

  • Инкапсуляция: скрытие внутреннего состояния, доступ через методы.
  • Наследование: создание новых классов на основе существующих, повторное использование кода.
  • Полиморфизм: единый интерфейс, разная реализация через virtual/override.
  • Абстракция: выделение важных характеристик, использование абстрактных классов и интерфейсов.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы