Модификатор private

Тренажер по TypeScript для пользователей с начальным уровнем подготовки.

Тренажер по TypeScript

В объектно-ориентированном программировании важную роль играет инкапсуляция — сокрытие внутреннего состояния объекта. В TypeScript для этого используется модификатор доступа private.

Если свойство или метод помечены как private, они доступны только внутри самого класса. Попытка обратиться к ним снаружи (через экземпляр класса или в наследниках) приведет к ошибке компиляции. Это позволяет защитить данные от некорректного изменения извне.

В этом уроке вы научитесь объявлять приватные поля, отличать их от публичных и правильно организовывать доступ к данным внутри классов.

Список тем

1. Поиск приватных свойств

id: 40701_ts_classes_private_highlight_01

В приведённом коде класса Wallet найдите и отметьте все свойства, помеченные модификатором private. Для каждого выделенного фрагмента укажите, является ли свойство приватным (private) или публичным (public).

Кликните по каждому выделенному фрагменту и выберите для него подходящий тип из списка под текстом.
class Wallet {
  {{private balance~|~t1}}: number;
  {{public owner~|~t2}}: string;
  {{private id~|~t3}}: number;
  {{public currency~|~t4}}: string;
}
Приватное свойство
Публичное свойство
Сообщения
Проверить
Показать подсказку

2. Выбор модификатора

id: 40701_ts_classes_private_select_02

В данном фрагменте кода TypeScript представлен класс 'ServerConfig', который содержит конфигурационные данные сервера. В коде пропущены модификаторы доступа перед полями 'secretKey' и 'port'. Вам необходимо выбрать подходящие модификаторы из выпадающего списка для каждого пропуска, чтобы правильно определить уровень доступа к полям класса. Обратите внимание, что секретный ключ должен быть скрыт от внешнего доступа, а порт — доступен для чтения извне.

Нужно правильно расставить в пропуски предложенные варианты
class ServerConfig {
    input1S secretKey: string = 'my-secret-key';
    input2S port: number = 8080;

    getSecretKey(): string {
        return this.secretKey;
    }

    getPort(): number {
        return this.port;
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

3. Синтаксис private

id: 40701_ts_classes_private_replace_03

В этом задании вам нужно дополнить фрагмент кода на TypeScript, сделав свойство класса приватным. В классе BankAccount есть свойство balance, которое сейчас публично доступно извне. Чтобы ограничить прямой доступ к этому свойству и обеспечить инкапсуляцию, необходимо добавить соответствующий модификатор доступа. Впишите нужное ключевое слово в отмеченное место, чтобы код соответствовал принципам инкапсуляции и компилировался без ошибок.

Заполните пропуски
class BankAccount {
    input1S balance: number;

    constructor(initialBalance: number) {
        this.balance = initialBalance;
    }

    public getBalance(): number {
        return this.balance;
    }
}
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

4. Области видимости

id: 40701_ts_classes_private_sort_05

Перед вами фрагменты кода TypeScript, связанные с использованием модификаторов доступа в классах. Распределите их по двум категориям: 'Доступно везде' (public) и 'Доступно только в классе' (private). Public члены класса видны из любого места в коде, включая внешние вызовы, тогда как private члены защищены и доступны исключительно внутри методов того же класса. Это упражнение поможет закрепить понимание областей видимости в TypeScript и правильно применять модификаторы.

Перетяните элементы в соответствующие блоки
Доступно везде
Доступно только в классе
public name: string;
private secret: number;
this.name = 'John';
this.secret = 123;
let obj = new MyClass(); obj.name;
let obj = new MyClass(); obj.secret;
public greet() { console.log('Hello'); }
Сообщения
Проверить
Показать подсказку

5. Исправление доступа

id: 40701_ts_classes_private_error_06

В данном фрагменте кода TypeScript допущена ошибка, связанная с нарушением инкапсуляции. Внешний код пытается напрямую изменить приватное свойство класса. Найдите строку с некорректным доступом и исправьте её, используя предусмотренный классом публичный интерфейс для изменения состояния объекта.

Найдите ошибку и исправьте
class Task {
  private _status: string = 'pending';
 
  public getStatus(): string {
    return this._status;
  }
 
  public setStatus(newStatus: string): void {
    this._status = newStatus;
  }
}
 
const myTask = new Task();
myTask._status = 'completed'; // Ошибка: прямое изменение приватного поля
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

6. Сборка класса с инкапсуляцией

id: 40701_ts_classes_private_build_07

Из предложенных строк соберите корректный класс `User` на TypeScript, реализующий инкапсуляцию с помощью модификатора `private`. Класс должен содержать приватное свойство для хранения пароля, конструктор для его инициализации и публичный метод для проверки соответствия переданного пароля. При сборке придерживайтесь общепринятого порядка: объявление класса, приватное свойство, конструктор, а затем метод. Некоторые строки лишние и не должны входить в решение.

Перетяните в правильном порядке строки из одного блока в другой
class User {
    private password: string;
    constructor(password: string) {
        this.password = password;
    }
    public checkPassword(inputPassword: string): boolean {
        return this.password === inputPassword;
    }
}
    public name: string;
    public changePassword(newPassword: string) { this.password = newPassword; }
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

TypeScript: компиляция и запуск

id: 40701_compiler

Изучите основы инкапсуляции с модификатором `private`! В этом примере мы создаем класс банковского счета, где баланс надежно защищен от прямого изменения извне. Попробуйте раскомментировать строку с прямой правкой баланса, чтобы увидеть ошибку компиляции, или добавьте свой метод, например, для снятия наличных. Экспериментируйте: измените логику пополнения или создайте несколько разных счетов, чтобы понять, как `private` свойства остаются уникальными и защищенными внутри каждого объекта.

TS
Запустить тренажёр (TypeScript)
НайтиКурс.Ру