Добавил:
выбрасываю тут свой мусор, надеюсь, что он кому-то может пригодится... Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka.docx
Скачиваний:
5
Добавлен:
03.12.2023
Размер:
4.7 Mб
Скачать

Создание класса

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

Для определения нового класса применяется ключевое слово class:

class User {

id: number;

name: string;

getInfo(): string {

return "id:" + this.id + " name:" + this.name;

}

}

Класс называется User, он представляет пользователя и имеет два свойства id и name, которые хранят состояние объекта. И также класс определяет одну функцию getInfo(), которая представляет поведение объекта.

После определения класса создаём его объекты:

let tom: User = new User();

tom.id = 1;

tom.name = "Tom";

console.log(tom.getInfo());

let alice: User = new User();

alice.id = 2;

alice.name = "Alice";

console.log(alice.getInfo());

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

Например, добавим в класс User конструктор:

class User {

id: number;

name: string;

constructor(userId: number, userName: string) {

this.id = userId;

this.name = userName;

}

getInfo(): string {

return "id:" + this.id + " name:" + this.name;

}

}

Модификаторы доступа в TypeScript

В TypeScript три модификатора: public, protected и private.

Если к свойствам и функциям классов не применяется модификатор, то такие свойства и функции расцениваются как с модификатором public.

Вариант 1

class User {

name: string;

year: number;

}

Вариант 2

class User {

public name: string;

public year: number;

}

Если к свойствам и методам применяется модификатор private, то к ним нельзя будет обратиться извне при создании объекта данного класса.

Модификатор protected - свойства и методы с данным модификатором не видны из вне, но к ним можно обратиться из классов-наследников.

Для уменьшения объёма кода предпочтительнее определять свойства класса через конструктор:

class User {

constructor(private name: string, private age: number) {

}

public displayInfo(): void {

console.log("name: " + this.name + "; age: " + this.age);

}

}

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

Одним из ключевых моментов объектно-ориентированной парадигмы является наследование. В TypeScript наследование реализуется с помощью ключевого слова extends.

Созадаим класс user c полем age и параметрами в конструкторе name и job.

Также создадим публичный метод getAge, возвращающий age. Далее создадим класс наследник Student.

Задача – создать объект student, который является наследником класса Student, в который будем передавать профессию студента.

Для получения в данном классе полей, которые принимает родительский конструктор, мы переопределяем его с использованием ключевого слова super. После этого передаём в созданный конструктор имя студента (оно будет статично для экземпляров данного класса) и поле job.

class User {

protected age: number = 20;

constructor(public name: string, public job: string) {

}

public getAge(): string {

return this.age + '';

}

}

class Student extends User {

constructor(job: string) {

super('Сергей', job);

}

}

const user = new User('Student', 'Frontend');

const student = new Student('Frontend');

console.log(student)

Скомпилировав приложение получаем наследника класса User – класс Student и у него есть поле name со значением Сергей.

Из класса Student мы также можем переопределить значение age, т.к. оно имеет модификатор protected. Зададим ему значение 35.

class User {

protected age: number = 20;

constructor(public name: string, public job: string) {

}

public getAge(): string {

return this.age + '';

}

}

class Student extends User {

constructor(job: string) {

super('Сергей', job);

this.age = 35;

}

}

const user = new User('Student', 'Frontend');

const student = new Student('Frontend');

console.log(student)

Аналогично можно вызывать методы класса User из класса Student.

Если вызвать метод getAge таким образом:

console.log(student.getAge())

То на выходе получим значение 35.

Кроме вызова метода, его можно переопределить в классе Student не изменяя тип возвращаемых данных.

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

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

Абстрактный метод не определяет никакой реализации. Если класс содержит абстрактные методы, то такой класс должен быть абстрактным. Кроме того, при наследовании производные классы обязаны реализовать все абстрактные методы.

Создадим абстрактный класс Group с полями номер и год, и метод, возвращающий год.

Внутри класса создадим абстрактный метод Info, который будет принимать в себя определённую информацию. В абстрактных методах описывается только интерфейс, мы не пишем в них тело метода, указываем только возвращаемый тип (в нашем случае void).

abstract class Group {

number: string;

year: number;

abstract Info(info: string): void;

getGroupyear(): number {

return this.year;

}

}

Создадим класс c называнием конкретной группы, наследуемый от класса Group. В данном классе мы должны реализовать метод Info.

Далее создаём объект группы

class Ist extends Group {

Info(info: string): void {

console.log(info);

}

}

const group = new Ist();

console.log(group);

После компиляции получим объект класса Ist, у которого есть публичное поле year со значением 2019 (которое мы прописали в абстрактном классе).

Соседние файлы в предмете Web технологии