107 lines
3.8 KiB
Markdown
107 lines
3.8 KiB
Markdown
---
|
||
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_** |