När du äter en burrito, sjunger alla dina smakreceptorer av glädje. Varje tugga ger en kombination av olika smaktyper, som salt, sött, kryddigt och umami. Varje tugga efter det smakar lite annorlunda eftersom en ny samling ingredienser förenar deras smaker.

Du kanske har läst ingredienserna från menyn, men du vet inte exakt hur salsan blir gjord. Kryddor som de använder på sina grönsaker kan vara en hemlig blandning. Du behöver dock inte känna till varje exakt ingrediens. Det räcker att veta att det är gott.

Ingredienserna du känner, som vanligt vitt ris, är betong. De andra elementen är abstrakta. Du vet att det är salsa, men vilken sort? Eller, om någon bara ger dig en burrito från ingenstans, då är hela burriton abstrakt.

Abstraktion i det abstrakta

Tillsammans med arv, är abstraktion ett viktigt begrepp inom objektorienterad programmering. Teorin är att varje objekt ska leverera enkla och förutsägbara resultat. Objekt ska också bara dela det som behöver delas.

Du kan tänka på en burrito som ett objekt. Inuti burriton har du flera andra föremål, som bönor, ris, ost och varm sås. Bönorna kan ha kryddats. Osten kan vara en blandning. Och den heta såsen kan vara en kombination av paprika lagrad i vinäger.

instagram viewer

Du behöver inte veta hur alla ingredienser i en burrito gjordes. Och när det gäller korv vill du förmodligen inte veta. Allt som spelar roll är att det inte faller sönder när du äter det och att det är supergott.

Abstraktion är nära knuten till inkapsling

Det är samma sak med att programmera objekt. När du instansierar ett objekt (skapar det från en klass), är det som att beställa en burrito från matbilsdisken. Du har tillgång till vissa data, men inte alla. Du behöver inte veta hur objektet fungerar, så länge funktionerna returnerar rätt data. Här är en burrito i JavaScript/Typescript:

Det angivna språket: tsx existerar inte'
Kodgenerering misslyckades!!
'

Du kan spela med den här koden i TypeScript-sandlådan.

I exemplet ovan abstraheras ingredienserna till salsa och ost bort. Först är de inkapslade för att dölja de speciella ingredienserna. Sedan tillsätts getters för att komma åt ingredienserna. Men ingredienserna ger bara en abstrakt representation av vad de verkligen är.

Abstraktion i betongen

Abstraktion är dock mer än ett koncept. Klasser kan också vara abstrakta. Det betyder att de kan definiera andra klasser. Men de kan inte instansieras själva.

Varför klasser ibland bör vara abstrakta

Föreställ dig att du går till en restaurang och sätter dig ner. Servitören ger dig en meny. Du öppnar den för att se att det bara finns ett föremål: mat.

Det är ganska abstrakt. Skulle du beställa den? Skulle du äta det? Det skulle du förmodligen inte. Det räcker inte att säga att något är mat. Det måste brytas ner till något mer konkret.

Vad sägs om pasta? Tja, det är en mer specifik typ av mat. Och vi vet att den förmodligen har nudlar och sås. Men det finns många olika sorters pasta där ute, så det är fortfarande abstrakt.

Vad är abstrakt och vad är konkret?

Fettuccine Alfredo är ett konkret exempel på både mat och pasta. Samma sak gäller klasser. Inte varje klass bör instansieras. Vissa klasser bör bara definiera strukturen för andra klasser.

Här är ett exempel med ett abstrakt Mat klass och ett barn Macadamianötter klass:

Det angivna språket: tsx existerar inte'
Kodgenerering misslyckades!!
'

Här är koden.

Abstrakta klasser berättar för andra klasser hur de ska bete sig. I exemplet ovan, om du ska vara en matklass, måste du ha funktioner som ger tillgång till ditt namn, smak, beskrivning och kalorier.

Lägg märke till att Macadamianötter klass sträcker sigMat. Det är att säga det Macadamianötter går med på att följa reglerna för Mat. Lägg också märke till att konstruktorn anropar super. Det kommandot instansierar den överordnade klassen innan konstruktorn instansierar Macadamianötter.

Om du lär dig att programmera kan du det ha roligare med dessa programmeringsspel.

Abstraktionsövning

  • Besök länken ovan och använd sandlådan för att skapa en abstrakt klass som heter Soppa.
  • Skapa ett konkret barn av Soppa klass, kallad Flingor.
  • Använda sig av console.log för att testa din kod. Vad händer om din Flingor klass saknar en av funktionerna som definieras i Soppa?

Men vad är poängen med en klass du inte kan instansiera?

Till en början kan abstrakta klasser verka onödiga. När allt kommer omkring kan du faktiskt inte använda dem för att göra ett objekt. Och det är inte så att de överlåter sina funktioner. Funktioner måste skrivas om i varje barnklass.

Det finns två huvudsakliga anledningar till att du behöver abstrakta klasser. De håller din kod konsekvent och de ser till att andra utvecklare också skriver konsekvent kod. Du kommer inte alltid att arbeta ensam. Hela laget måste följa samma regler. Du kan lära dig mer av TypeScript-dokumentationen om abstrakta klasser.

Hur du organiserar din objektorienterade kod med arv

Läs Nästa

Dela med sigTweetDela med sigE-post

Relaterade ämnen

  • Programmering
  • Programmering
  • Objektorienterad programmering

Om författaren

Lee Nathan (19 publicerade artiklar)

Lee är en nomad på heltid och en polymat med många passioner och intressen. Några av dessa passioner kretsar kring produktivitet, personlig utveckling och skrivande.

Mer från Lee Nathan

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera