Skip to main content

ООП

Принципы ООП (Объектно-ориентированного программирования)

Объектно-ориентированное программирование (ООП) — это парадигма, основанная на концепции объектов, которые объединяют данные и методы для работы с ними. Основные принципы ООП:

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

Смысл: Объединение данных (свойств) и методов внутри объекта с контролем доступа.
Зачем? Защита данных, предотвращение прямого изменения извне.

class User {
private password: string;

constructor(public name: string, password: string) {
this.password = password;
}

checkPassword(input: string): boolean {
return this.password === input;
}
}

const user = new User("Alice", "secret123");
console.log(user.checkPassword("wrong")); // false
console.log(user.checkPassword("secret123")); // true

📌 private скрывает password, и его нельзя изменить напрямую.

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

Смысл: Позволяет создавать новые классы на основе существующих.
Зачем? Повторное использование кода и расширение функциональности.

class Animal {
constructor(public name: string) {}
makeSound() {
console.log("Some sound...");
}
}

class Dog extends Animal {
makeSound() {
console.log("Woof!");
}
}

const dog = new Dog("Buddy");
dog.makeSound(); // Woof!

📌 Dog наследует Animal, но переопределяет метод makeSound().

3. Полиморфизм

Смысл: Разные объекты могут иметь одинаковый интерфейс, но разное поведение.
Зачем? Универсальный код, который работает с разными типами объектов.

class Animal {
constructor(public name: string) {}
makeSound() {
console.log("Some sound...");
}
}

class Dog extends Animal {
makeSound() {
console.log("Woof!");
}
}

const dog = new Dog("Buddy");
dog.makeSound(); // Woof!

📌 Penguin изменяет логику fly(), но всё ещё является Bird.

4. Абстракция

Смысл: Выделение важных деталей, скрытие реализации.
Зачем? Упрощение работы с кодом, фокус только на важном.

abstract class Transport {
constructor(public speed: number) {}

abstract move(): void;
}

class Car extends Transport {
move() {
console.log(`Driving at ${this.speed} km/h`);
}
}

const car = new Car(100);
car.move(); // Driving at 100 km/h

📌 abstract запрещает создавать Transport, но заставляет Car реализовать move().

Итог

  • Инкапсуляция — скрываем детали и контролируем доступ.
  • Наследование — создаём новые классы на основе существующих.
  • Полиморфизм — разные классы могут вести себя по-разному.
  • Абстракция — скрываем сложные детали, оставляем главное.

🚀 ООП помогает писать гибкий, переиспользуемый и читаемый код!

🚀 Источник: ChatGPT