Поиск по сайту
Ctrl + K
Вопросы по TS

Какие принципы ООП поддерживаются 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!