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