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

Може да сте чели съставките от менюто, но не знаете как точно се прави салсата. Подправката, която използват за зеленчуците си, може да бъде тайна смес. Не е нужно обаче да знаете всяка точна съставка. Достатъчно е да знаете, че е вкусно.

Съставките, които познавате, като обикновен бял ориз, са бетонни. Останалите елементи са абстрактни. Знаеш, че е салса, но какъв вид? Или, ако някой просто ви подаде бурито от нищото, тогава цялото бурито е абстрактно.

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

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

Можете да мислите за бурито като за предмет. Вътре в бурито имате няколко други предмета, като боб, ориз, сирене и лют сос. Бобът може да е бил подправен. Сиренето може да бъде смесено. А лютият сос може да е комбинация от чушки, отлежали в оцет.

instagram viewer

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

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

Същото е и с програмните обекти. Когато инстанциирате обект (създайте го от клас), това е като да поръчате бурито от гишето на камиона за храна. Имате достъп до някои данни, но не всички. Не е необходимо да знаете как работи обектът, стига функциите да връщат правилните данни. Ето бурито в JavaScript/Typescript:

Посоченият език: tsx не съществува'
Генерирането на код не бе успешно!!
'

Можеш играйте с този код в пясъчната кутия на TypeScript.

В горния пример съставките на салса и сирене се абстрахират. Първо, те са капсулирани, за да скрият специалните съставки. След това се добавят гетерите за достъп до съставките. Но съставките връщат само абстрактно представяне на това какво всъщност са.

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

Абстракцията обаче е нещо повече от концепция. Класовете могат да бъдат и абстрактни. Това означава, че те могат да дефинират други класове. Но те не могат да бъдат инстанцирани сами.

Защо часовете понякога трябва да са абстрактни

Представете си, че отивате на ресторант и сядате. Сервитьорът ви подава меню. Отваряте го и откривате, че има само един елемент: храна.

Това е доста абстрактно. Бихте ли го поръчали? Бихте ли го изяли? Вероятно не бихте. Не е достатъчно да се каже, че нещо е храна. Трябва да се разбие до нещо по-конкретно.

Какво ще кажете за пастата? Е, това е по-специфичен вид храна. И знаем, че вероятно има юфка и сос. Но има много различни видове паста, така че все още е абстрактно.

Какво е абстрактно и какво е конкретно?

Fettuccine Alfredo е конкретен пример както за храна, така и за паста. Същото важи и за класовете. Не всеки клас трябва да бъде инстанциран. Някои класове трябва да дефинират само структурата на други класове.

Ето един пример с резюме Храна клас и дете макадамски ядки клас:

Посоченият език: tsx не съществува'
Генерирането на код не бе успешно!!
'

Ето кода.

Абстрактните класове казват на другите класове как трябва да се държат. В примера по-горе, ако ще бъдете хранителен клас, трябва да имате функции, които позволяват достъп до вашето име, вкус, описание и калории.

Забележете, че макадамски ядки клас удължаваХрана. Това казва това макадамски ядки се съгласява да спазва правилата на Храна. Също така забележете, че конструкторът се обажда супер. Тази команда създава копия на родителския клас, преди конструкторът да инстанцира макадамски ядки.

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

Абстракционна практика

  • Посетете връзката по-горе и използвайте пясъчната кутия, за да създадете абстрактен клас, наречен супа.
  • Създайте конкретно дете на супа клас, наречен Зърнена закуска.
  • Използвайте console.log за да тествате кода си. Какво се случва, ако вашият Зърнена закуска клас липсва една от функциите, дефинирани в супа?

Но какъв е смисълът на клас, който не можете да създадете?

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

Има две основни причини, поради които имате нужда от абстрактни класове. Те поддържат кода ви последователен и се уверяват, че други разработчици също пишат последователен код. Не винаги ще работиш сам. Целият екип трябва да спазва едни и същи правила. Можете да научите повече от документацията на TypeScript за абстрактните класове.

Как да организирате своя обектно-ориентиран код с наследяване

Прочетете Следващото

ДялтуитДялелектронна поща

Свързани теми

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

За автора

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

Лий е номад на пълен работен ден и много ерудит с много страсти и интереси. Някои от тези страсти се въртят около производителността, личностното развитие и писането.

Още от Лий Нейтън

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, ревюта, безплатни електронни книги и ексклузивни оферти!

Щракнете тук, за да се абонирате