Примеры инкапсуляции, абстракции, наследования и полиморфизма

TypeScript оказал значительное влияние на реализацию объектно-ориентированного программирования в JavaScript. Сегодня я хочу поговорить об ООП в TypeScript, представив вам несколько примеров.

Кстати, все примеры я выложил на Гитхаб. Проверьте это и дайте мне знать, если у вас есть вопросы.

Прежде всего, поговорим о самом TypeScript.

Что такое TypeScript?

TypeScript — это строго типизированный язык программирования, основанный на JavaScript, предоставляющий вам лучшие инструменты в любом масштабе.

Это так называемый «супернабор» JavaScript. Можно сказать, что TypeScript — это JavaScript, но JavaScript — это не TypeScript. Потому что TypeScript компилируется в JavaScript, а JavaScript компилируется в машинный код.

Чтобы продемонстрировать его визуальное отличие от JavaScript, давайте создадим класс с именем Car. Когда-то написанный на JavaScript, а когда-то написанный на TypeScript.

Класс автомобиля в JavaScript

Класс автомобиля в TypeScript

Как видите, очень похоже. Единственные различия, которые вы можете увидеть, — это аннотации типов повсюду во фрагменте кода TypeScript. Я надеюсь, что у меня сложилось хорошее впечатление о TypeScript.

Четыре столпа ООП

Есть четыре основных понятия для определения ООП. Это инкапсуляция, абстракция, наследование и полиморфизм. Я знаю, что ты думаешь. Когда я начал программировать, я понятия не имел, что они означают, но позвольте мне объяснить.

Абстракция

Первая концепция ООП — абстракция. Абстракция в ООП означает предоставление пользователю класса только необходимых деталей. Все, что лежит в основе, не имеет значения. Чтобы достичь абстракции в TypeScript, у вас есть несколько способов: абстрактный класс/метод, интерфейсы и типы.

Я покажу вам пример, основанный на абстрактном классе, так как абстрактный класс — это путь, поскольку вы можете определить public в частных свойствах и методах, что невозможно в интерфейсах и типах.

Как видите, помимо конструктора, в котором мы присваиваем переменные нашим свойствам, наш абстрактный класс с именем Character является просто классом определения. В этом случае наш класс Goblin полагается на этот абстрактный класс.

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

Второй концепцией ООП является инкапсуляция. Инкапсуляция построена на идее сокрытия данных. Здесь мы ограничиваем доступ к определенным свойствам или методам.

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

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

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

В следующем примере вы увидите, что наш класс Orc будет наследоваться от класса Character, расширяясь от него.

Полиморфизм

Полиморфизм — это возможность создать класс с более чем одной формой. Или, другими словами, классы имеют одни и те же методы, но разные реализации.

В нашем примере у нас есть один родительский класс (Character) и один дочерний класс (Orc). Дочерний класс перезаписывает свойства и методы своего родительского класса. Вот что такое полиморфизм.

Спасибо, что прочитали мою статью об ООП в TypeScript. Надеюсь, я смог освежить ваши знания. Не забывайте, все примеры я выложил на GitHub.

Ваше здоровье!

Надеюсь, вам понравилось это читать. Если вы хотите поддержать меня как писателя, рассмотрите возможность подписки стать участником Medium. Всего 5 долларов в месяц, и вы получаете неограниченный доступ к Medium.

Хотите поддержать меня? Купи мне кофе.

Читать дальше