Руководство для начинающих по абстракции в объектно-ориентированном программировании

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

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

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

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

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

Абстракция сохраняет код и данные скрытыми, когда это необходимо

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

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

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

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

  class CheeseBlend {
private _ingredients = ["Колби Джек", "Чеддер", "Манчего"];
получить ингредиенты () {
вернуть "плавленый сыр";
}
}
class SecretSalsa {
private _ingredients = [" лук »,« помидоры »,« кинза »,« Гватемальский перец безумия »];
получить ингредиенты () {
вернуть« это секрет »;
}
}
class Burrito {
private _beans = "beans";
private _rice = "ris";
private _cheese: CheeseBlend = new CheeseBlend ();
private _salsa: SecretSalsa = new SecretSalsa ();
получить сыр () {
вернуть this._cheese.ingredients;
}
получить сальсу ( ) {
вернуть this._salsa.ingredients;
}
}
let burro = new Burrito ();
console.log (burro. сыр);
console.log (burro.salsa);

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

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

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

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

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

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

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

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

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

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

Вот пример с абстрактным классом Food и дочерним классом MacadamiaNuts :

  абстрактный класс Food {
конструктор (публичное имя: String) {}
abstract totalCalories (): number;
abstract description (): string;
абстрактный аромат (): string;
}
class MacadamiaNuts extends Food {
constructor () {
super ("Одна чашка орехов макадамии") ;
}
totalCalories () {
return 962;
}
description () {
return "Орех с Гавайев . ";
}
flavour () {
return" богатый, маслянистый и ореховый ";
}
}
let nut = new MacadamiaNuts ();
console.log (nuts.name)
console.log (nuts.description ())

Вот код.

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

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

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

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

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

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

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

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

Оцените статью
oilgasindustry.ru
Добавить комментарий