update typescript, update docs
This commit is contained in:
107
docs/architecture/09-oop.md
Normal file
107
docs/architecture/09-oop.md
Normal file
@@ -0,0 +1,107 @@
|
||||
---
|
||||
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_**
|
||||
Reference in New Issue
Block a user