ООП в TypeScript: инкапсуляция классов, наследование и реа... | Вопросы для собеседования | Skilio
ООП в TypeScript: инкапсуляция классов, наследование и реализация модификаторов доступа
Вопрос:

Для чего используются классы в TypeScript? Как они поддерживают принципы объектно-ориентированного программирования?

Подсказки:

  • Какова роль классов в инкапсуляции данных и поведения.
  • Подумайте о том, как наследование позволяет классам расширять и повторно использовать код.
  • Поразмышляйте об использовании модификаторов доступа, таких как public, private и protected в классах.

Превосходя ожидания:

  • Концепцию полиморфизма и то, как классы TypeScript могут реализовывать интерфейсы.
  • Как статическая типизация TypeScript может повысить надёжность проектов, основанных на классах.
  • Роль абстрактных классов и то, как они предоставляют шаблон для других классов.
Ответ:

Мы можем использовать классы в TypeScript для инкапсуляции данных и поведения, поддерживая ключевые принципы объектно-ориентированного программирования, такие как инкапсуляция, наследование и полиморфизм. Классы в TypeScript предоставляют структурированный способ определения свойств и методов, которые будет иметь объект, тем самым предлагая шаблон для создания объектов.

Инкапсуляция

Инкапсуляция подразумевает объединение данных (свойств) и методов (функций), которые работают с данными, в единый блок — класс. Этот подход помогает управлять сложностью и повышать повторное использование кода. В TypeScript инкапсуляция усиливается с помощью модификаторов доступа:

  • public: Члены, объявленные как public, доступны из любой точки. По умолчанию все члены класса являются public.

    class Person {
      public name: string;
      constructor(name: string) {
        this.name = name;
      }
    }
    
  • private: Члены, объявленные как private, могут быть доступны только внутри класса, в котором они объявлены. Это ограничивает доступ к чувствительным данным или методам, которые не должны быть раскрыты.

    class Person {
      private age: number;
      constructor(age: number) {
        this.age = age;
      }
    }
    
  • protected: Члены, объявленные как protected, доступны внутри класса и его подклассах. Это полезно, когда нужно разрешить доступ к члену в производных классах, но не извне.

    class Person {
      protected gender: string;
      constructor(gender: string) {
        this.gender = gender;
      }
    }
    

Наследование

Наследование — это механизм, в котором новый класс (подкласс) наследует свойства и поведение от существующего класса (суперкласса). Это позволяет повторно использовать код и создавать иерархическую структуру классов. Используйте ключевое слово extends, чтобы реализовать наследование в TypeScript:

class Animal {
  public name: string;
  constructor(name: string) {
    this.name = name;
  }
  
  public speak(): void {
    console.log(`${this.name} издает звук.`);
  }
}

class Dog extends Animal {
  constructor(name: string) {
    super(name);
  }

  public speak(): void {
    console.log(`${this.name} лает.`);
  }
}

Полиморфизм

Полиморфизм позволяет обращаться к объектам как к экземплярам их родительского класса, что позволяет одному интерфейсу представлять различные базовые формы (типы данных). Реализуйте полиморфизм в TypeScript, используя классы и интерфейсы:

interface Shape {
  area(): number;
}

class Circle implements Shape {
  public radius: number;
  constructor(radius: number) {
    this.radius = radius;
  }
  public area(): number {
    return Math.PI * this.radius * this.radius;
  }
}

class Rectangle implements Shape {
  public width: number;
  public height: number;
  constructor(width: number, height: number) {
    this.width = width;
    this.height = height;
  }
  public area(): number {
    return this.width * this.height;
  }
}

Абстрактные классы

Абстрактные классы не могут быть инстанцированы и используются для определения шаблона для других классов. Они могут содержать абстрактные методы, которые должны быть реализованы производными классами:

abstract class Vehicle {
  public abstract move(): void;
  
  public start(): void {
    console.log("Транспортное средство запущено.");
  }
}

class Car extends Vehicle {
  public move(): void {
    console.log("Автомобиль движется.");
  }
}

Статическая типизация

Статическая типизация TypeScript повышает надежность конструкций на основе классов, обеспечивая проверку типов на этапе компиляции. Это уменьшает ошибки во время выполнения и улучшает качество кода:

class Product {
  public price: number;
  
  constructor(price: number) {
    this.price = price;
  }
  
  public getPriceWithTax(taxRate: number): number {
    return this.price * (1 + taxRate);
  }
}
0
TypeScript Новичок Опубликовано
© Skilio, 2025
Условия использования
Политика конфиденциальности
Мы используем файлы cookie, для персонализации сервисов и повышения удобства пользования сайтом. Если вы не согласны на их использование, поменяйте настройки браузера.