Какие принципы ООП поддерживаются TypeScript?
TypeScript — это строго типизированный язык программирования, основанный на JavaScript, который поддерживает объектно-ориентированное программирование (ООП). В этом ответе мы рассмотрим некоторые важные термины ООП, поддерживаемые TypeScript, а также приведем примеры кода для лучшего понимания.
1. Классы (Classes)
Класс в TypeScript является шаблоном для создания объектов. Он позволяет определять свойства и методы, которые должны быть у созданных объектов.
Пример:
class Animal {
name: string;
constructor(name: string) {
this.name = name;
}
speak(): void {
console.log(`${this.name} издает звук.`);
}
}
const dog = new Animal("Собака");
dog.speak(); // Собака издает звук.
2. Наследование (Inheritance)
Наследование позволяет создавать новые классы на основе уже существующих. Новый класс наследует свойства и методы родительского класса.
Пример:
class Dog extends Animal {
speak(): void {
console.log(`${this.name} лает.`);
}
}
const dog = new Dog("Бобик");
dog.speak(); // Бобик лает.
3. Абстракция (Abstraction)
Абстракция позволяет скрывать реализацию и показывать только функциональность. В TypeScript это может реализовываться с помощью абстрактных классов и интерфейсов.
Пример с абстрактным классом:
abstract class Shape {
abstract area(): number;
}
class Circle extends Shape {
constructor(private radius: number) {
super();
}
area(): number {
return Math.PI * this.radius * this.radius;
}
}
const circle = new Circle(5);
console.log(circle.area()); // 78.53981633974483
4. Инкапсуляция (Encapsulation)
Инкапсуляция — это механизм, который ограничивает доступ к некоторым компонентам объекта. В TypeScript можно использовать модификаторы доступа: public, private, protected.
Пример:
class BankAccount {
private balance: number;
constructor(initialBalance: number) {
this.balance = initialBalance;
}
deposit(amount: number): void {
this.balance += amount;
}
getBalance(): number {
return this.balance;
}
}
const account = new BankAccount(100);
account.deposit(50);
console.log(account.getBalance()); // 150
5. Полиморфизм (Polymorphism)
Полиморфизм позволяет использовать один интерфейс для представления различных типов данных. В TypeScript это может быть реализовано через интерфейсы и переопределение методов.
Пример:
interface Movie {
title: string;
play(): void;
}
class ActionMovie implements Movie {
constructor(public title: string) {
}
play(): void {
console.log(`Играем в экшн-фильм: ${this.title}`);
}
}
class ComedyMovie implements Movie {
constructor(public title: string) {
}
play(): void {
console.log(`Играем в комедию: ${this.title}`);
}
}
function watchMovie(movie: Movie) {
movie.play();
}
const action = new ActionMovie("Миссия невыполнима");
const comedy = new ComedyMovie("Друзья");
watchMovie(action); // Играем в экшн-фильм: Миссия невыполнима
watchMovie(comedy); // Играем в комедию: Друзья
Заключение
TypeScript предоставляет мощные средства для работы с объектно-ориентированным программированием, в том числе классы, наследование, абстракцию, инкапсуляцию и полиморфизм. Используя эти концепции, вы можете создавать более структурированные и поддерживаемые приложения. Надеюсь, этот материал поможет вам лучше понять основы ООП в TypeScript!