Принципы ООП
Объектно-ориентированное программирование (ООП) — это парадигма, основанная на четырёх принципах: инкапсуляции, наследовании, полиморфизме и абстракции. Эти принципы позволяют создавать гибкие, масштабируемые и легко поддерживаемые программные системы, структурируя код вокруг объектов, а не функций и логики.
Инкапсуляция
Инкапсуляция — это сокрытие внутреннего состояния объекта и деталей его реализации от внешнего мира. Доступ к состоянию возможен только через публичные методы, которые предоставляет объект. Это защищает данные от некорректного использования и упрощает изменение внутренней логики без влияния на внешний код.
В C# инкапсуляция реализуется с помощью модификаторов доступа: private, protected, internal, public. Поля обычно объявляются private, а доступ к ним предоставляется через методы или свойства.
public class BankAccount
{
private double balance; // Приватное поле, недоступное извне
public void Deposit(double amount)
{
if (amount > 0)
balance += amount;
}
public void Withdraw(double amount)
{
if (amount > 0 && balance >= amount)
balance -= amount;
}
public double GetBalance()
{
return balance;
}}
## Наследование
Наследование позволяет создавать новый класс на основе существующего. Производный класс наследует поля и методы базового класса, что способствует повторному использованию кода и иерархической организации. В 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# полиморфизм достигается через виртуальные методы и переопределение. Когда метод вызывается через ссылку на базовый класс, фактически выполняется реализация производного класса.
public class Animal
{
public virtual void MakeSound()
{
Console.WriteLine("Some sound");
}
}
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Woof");
}
}Полиморфизм позволяет писать код, который работает с базовым типом, но при этом использует конкретную реализацию, что упрощает расширение функциональности.
Абстракция
Абстракция — это выделение существенных характеристик объекта и игнорирование несущественных деталей. В ООП абстракция реализуется через абстрактные классы и интерфейсы. Абстрактный класс определяет общий контракт для производных классов, но не предоставляет полную реализацию.
public abstract class Vehicle // Абстрактный класс
{
public abstract void Move(); // Абстрактный метод
}
public class Car : Vehicle
{
public override void Move()
{
Console.WriteLine("Car is moving");
}
}Абстракция помогает управлять сложностью, предоставляя упрощённую модель реального объекта.
Коротко
- Инкапсуляция: скрытие внутреннего состояния, доступ через методы.
- Наследование: создание новых классов на основе существующих, повторное использование кода.
- Полиморфизм: единый интерфейс, разная реализация через
virtual/override. - Абстракция: выделение важных характеристик, использование абстрактных классов и интерфейсов.
