--- sidebar_position: 9 --- # ООП Принципы ООП (Объектно-ориентированного программирования) Объектно-ориентированное программирование (ООП) — это парадигма, основанная на концепции объектов, которые объединяют данные и методы для работы с ними. Основные принципы ООП: ## 1. Инкапсуляция **Смысл:** Объединение данных (свойств) и методов внутри объекта с контролем доступа. \ **Зачем?** Защита данных, предотвращение прямого изменения извне. ```ts 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. Наследование **Смысл:** Позволяет создавать новые классы на основе существующих. \ **Зачем?** Повторное использование кода и расширение функциональности. ```ts 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. Полиморфизм **Смысл:** Разные объекты могут иметь **одинаковый интерфейс**, но разное поведение. \ **Зачем?** Универсальный код, который работает с разными типами объектов. ```ts 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. Абстракция **Смысл:** Выделение **важных деталей**, скрытие реализации. \ **Зачем?** Упрощение работы с кодом, фокус только на важном. ```ts 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_**