Wanneer je een burrito eet, zingt al je smaakreceptor van vreugde. Elke hap brengt een combinatie van verschillende smaaktypes met zich mee, zoals zout, zoet, pittig en umami. Elke hap daarna smaakt iets anders, omdat een nieuwe verzameling ingrediënten hun smaken samenvoegt.

Je hebt misschien de ingrediënten van het menu gelezen, maar je weet niet precies hoe de salsa wordt gemaakt. De kruiden die ze voor hun groenten gebruiken, kunnen een geheime mix zijn. U hoeft echter niet elk exact ingrediënt te kennen. Het is genoeg om te weten dat het heerlijk is.

De ingrediënten die je kent, zoals witte rijst, zijn concreet. De andere elementen zijn abstract. Je weet dat het salsa is, maar wat voor soort? Of, als iemand je zomaar uit het niets een burrito overhandigt, dan is de hele burrito abstract.

Abstractie in het Abstract

Samen met erfenis, abstractie is een belangrijk concept in objectgeoriënteerd programmeren. De theorie is dat elk object eenvoudige en voorspelbare resultaten moet opleveren. Objecten mogen ook alleen delen wat gedeeld moet worden.

instagram viewer

Je kunt een burrito zien als een object. In de burrito heb je verschillende andere voorwerpen, zoals bonen, rijst, kaas en hete saus. Mogelijk zijn de bonen gekruid. De kaas kan een mengsel zijn. En de hete saus kan een combinatie zijn van in azijn gerijpte pepers.

Je hoeft niet te weten hoe alle ingrediënten in een burrito gemaakt zijn. En in het geval van hotdogs wil je het waarschijnlijk niet weten. Het enige dat telt is dat het niet uit elkaar valt als je het eet en dat het super lekker is.

Abstractie is nauw verbonden met inkapseling

Hetzelfde geldt voor programmeerobjecten. Wanneer je een object maakt (maak het vanuit een klasse), is het alsof je een burrito bestelt bij de balie van de foodtruck. U heeft toegang tot sommige gegevens, maar niet tot alle. U hoeft niet te weten hoe het object werkt, zolang de functies maar de juiste gegevens retourneren. Hier is een burrito in JavaScript/Typescript:

De opgegeven taal: tsx bestaat niet'
Code generatie mislukt!!
'

Jij kan speel met deze code in de TypeScript-sandbox.

In het bovenstaande voorbeeld zijn de ingrediënten voor salsa en kaas weggeabstraheerd. Ten eerste zijn ze ingekapseld om de speciale ingrediënten te verbergen. Vervolgens worden getters toegevoegd om toegang te krijgen tot de ingrediënten. Maar de ingrediënten geven slechts een abstracte weergave van wat ze werkelijk zijn.

Abstractie in het beton

Abstractie is echter meer dan een concept. Klassen kunnen ook abstract zijn. Dat betekent dat ze andere klassen kunnen definiëren. Maar ze kunnen niet zelf worden geïnstantieerd.

Waarom lessen soms abstract moeten zijn

Stel je voor dat je naar een restaurant gaat en gaat zitten. De ober overhandigt je een menu. Je opent het en ontdekt dat er maar één item is: eten.

Dat is nogal abstract. Zou je het bestellen? Zou je het eten? Waarschijnlijk niet. Zeggen dat iets eten is, is niet genoeg. Het moet worden afgebroken tot iets meer concreets.

Hoe zit het met pasta? Nou, dat is een meer specifiek soort voedsel. En we weten dat het waarschijnlijk noedels en saus heeft. Maar er zijn veel verschillende soorten pasta, dus het is nog steeds abstract.

Wat is abstract en wat is concreet?

Fettuccine Alfredo is een concreet voorbeeld van zowel eten als pasta. Hetzelfde geldt voor lessen. Niet elke klasse moet worden geïnstantieerd. Sommige klassen zouden alleen de structuur van andere klassen moeten definiëren.

Hier is een voorbeeld met een abstract Voedsel klas en een kind Macadamia noten klas:

De opgegeven taal: tsx bestaat niet'
Code generatie mislukt!!
'

Hier is de code.

Abstracte klassen vertellen andere klassen hoe ze zich moeten gedragen. Als je in het bovenstaande voorbeeld een voedingsklasse gaat volgen, moet je functies hebben die toegang geven tot je naam, smaak, beschrijving en calorieën.

Merk op dat de Macadamia noten klas strekt zich uitVoedsel. Dat wil zeggen Macadamia noten stemt ermee in de regels van Voedsel. Merk ook op dat constructor roept super. Dat commando instantieert de bovenliggende klasse voordat de constructor instantieert Macadamia noten.

Als u leert programmeren, kunt u: veel plezier met deze programmeergames.

Abstractie Praktijk

  • Bezoek de link hierboven en gebruik de sandbox om een ​​abstracte klasse te maken met de naam Soep.
  • Maak een concreet kind van de Soep klasse, genaamd Graan.
  • Gebruik console.log om uw code te testen. Wat gebeurt er als je Graan class mist een van de functies gedefinieerd in Soep?

Maar wat is het nut van een klas die u niet kunt instantiëren?

In eerste instantie lijken abstracte lessen misschien overbodig. Je kunt ze immers niet echt gebruiken om een ​​object te maken. En het is niet alsof ze hun functies doorgeven. Functies moeten in elke kindklasse worden herschreven.

Er zijn twee belangrijke redenen waarom je abstracte klassen nodig hebt. Ze houden je code consistent en zorgen ervoor dat andere ontwikkelaars ook consistente code schrijven. Je zult niet altijd alleen werken. Het hele team moet dezelfde regels volgen. U kunt meer leren van de TypeScript-documentatie over abstracte klassen.

Hoe u uw objectgeoriënteerde code kunt ordenen met overerving

Lees volgende

DelenTweetenDelenE-mail

Gerelateerde onderwerpen

  • Programmeren
  • Programmeren
  • Object georiënteerd programmeren

Over de auteur

Lee Nathan (19 artikelen gepubliceerd)

Lee is een fulltime nomade en een geleerde met veel passies en interesses. Sommige van die passies draaien om productiviteit, persoonlijke ontwikkeling en schrijven.

Meer van Lee Nathan

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren