Files
frontend-docs/docs/architecture/08-oop.md

107 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
sidebar_position: 8
---
# ООП
Принципы ООП (Объектно-ориентированного программирования)
Объектно-ориентированное программирование (ООП) — это парадигма, основанная на концепции объектов, которые объединяют данные и методы для работы с ними. Основные принципы ООП:
## 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_**