Когда вы едите буррито, каждый из ваших вкусовых рецепторов поет от радости. Каждый укус сочетает в себе различные типы вкуса, такие как соленый, сладкий, острый и умами. После этого вкус каждого кусочка немного отличается, так как новая коллекция ингредиентов объединяет их ароматы.

Возможно, вы читали ингредиенты в меню, но точно не знаете, как готовится сальса. Приправа, которую они используют для своих овощей, может быть секретной смесью. Однако вам не нужно точно знать каждый ингредиент. Достаточно знать, что это вкусно.

Ингредиенты, которые вы знаете, такие как обычный белый рис, являются конкретными. Остальные элементы являются абстрактными. Вы знаете, что это сальса, но какая? Или, если кто-то просто даст вам буррито из ниоткуда, то весь буррито абстрактен.

Абстракция в абстракции

Вместе с наследством, абстракция является важным понятием в объектно-ориентированном программировании. Теоретически каждый объект должен давать простые и предсказуемые результаты. Объекты также должны делиться только тем, что необходимо.

instagram viewer

Вы можете думать о буррито как об объекте. Внутри буррито у вас есть несколько других предметов, таких как бобы, рис, сыр и острый соус. Фасоль, возможно, была приправлена. Сыр может быть смесью. А острый соус может быть комбинацией перцев, выдержанных в уксусе.

Вам не нужно знать, как были сделаны все ингредиенты буррито. А в случае с хот-догами вы, наверное, и не хотите знать. Важно только то, что он не разваливается, когда вы его едите, и очень вкусный.

Абстракция тесно связана с инкапсуляцией

То же самое и с объектами программирования. Когда вы создаете экземпляр объекта (создаете его из класса), это похоже на заказ буррито на прилавке фудтрака. У вас есть доступ к некоторым данным, но не ко всем. Вам не нужно знать, как работает объект, пока функции возвращают правильные данные. Вот буррито в JavaScript/Typescript:

Указанный язык: tsx не существует'
Генерация кода не удалась!!
'

Ты сможешь поиграйте с этим кодом в песочнице TypeScript.

В приведенном выше примере ингредиенты сальсы и сыра абстрагируются. Во-первых, они инкапсулированы, чтобы скрыть специальные ингредиенты. Затем добавляются геттеры для доступа к ингредиентам. Но ингредиенты возвращают только абстрактное представление о том, чем они являются на самом деле.

Абстракция в бетоне

Однако абстракция — это больше, чем концепция. Классы также могут быть абстрактными. Это означает, что они могут определять другие классы. Но они не могут быть созданы сами.

Почему классы иногда должны быть абстрактными

Представьте, что вы идете в ресторан и садитесь. Официант протягивает вам меню. Вы открываете его и обнаруживаете, что там только один предмет: еда.

Это довольно абстрактно. Вы бы его заказали? Вы бы съели это? Вы, вероятно, не стали бы. Сказать что-то о еде недостаточно. Его нужно разбить на что-то более конкретное.

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

Что такое абстрактное и что такое конкретное?

Феттучини Альфредо — это конкретный пример как еды, так и пасты. То же самое относится и к классам. Не каждый класс должен быть создан. Некоторые классы должны определять только структуру других классов.

Вот пример с аннотацией Еда класс и ребенок Орехи макадамии класс:

Указанный язык: tsx не существует'
Генерация кода не удалась!!
'

Вот код.

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

Обратите внимание, что Орехи макадамии класс расширяетЕда. Это говорит о том, что Орехи макадамии обязуется соблюдать правила Еда. Также обратите внимание, что конструктор вызывает супер. Эта команда создает экземпляр родительского класса до того, как конструктор создает экземпляр Орехи макадамии.

Если вы учитесь программировать, вы можете получайте больше удовольствия от этих программных игр.

Практика абстракции

  • Перейдите по ссылке выше и используйте песочницу для создания абстрактного класса с именем Суп.
  • Создайте конкретный дочерний элемент Суп класс, называемый Злак.
  • Использовать console.log для проверки вашего кода. Что произойдет, если ваш Злак class отсутствует одна из функций, определенных в Суп?

Но в чем смысл класса, который вы не можете создать?

Поначалу абстрактные классы могут показаться ненужными. В конце концов, вы не можете использовать их для создания объекта. И дело не в том, что они передают свои функции. Функции должны быть переписаны в каждом дочернем классе.

Есть две основные причины, по которым вам нужны абстрактные классы. Они поддерживают согласованность вашего кода и следят за тем, чтобы другие разработчики также писали последовательный код. Вы не всегда будете работать в одиночку. Вся команда должна следовать одним и тем же правилам. Вы можете узнать больше из документация TypeScript по абстрактным классам.

Как организовать ваш объектно-ориентированный код с помощью наследования

Читать далее

ДелитьсяТвитнутьДелитьсяЭл. адрес

Похожие темы

  • Программирование
  • Программирование
  • Объектно-ориентированного программирования

Об авторе

Ли Натан (опубликовано 19 статей)

Ли — кочевник и эрудит со множеством увлечений и интересов. Некоторые из этих увлечений связаны с продуктивностью, личным развитием и писательством.

Еще от Ли Натана

Подпишитесь на нашу рассылку

Подпишитесь на нашу рассылку технических советов, обзоров, бесплатных электронных книг и эксклюзивных предложений!

Нажмите здесь, чтобы подписаться