Når du spiser en burrito, synger alle smaksreseptorene dine med glede. Hver bit bringer inn en kombinasjon av forskjellige smakstyper, som salt, søtt, krydret og umami. Hver bit etter det smaker litt annerledes ettersom en ny samling av ingredienser kombinerer smakene deres.
Du har kanskje lest ingrediensene fra menyen, men du vet ikke nøyaktig hvordan salsaen blir laget. Krydderet de bruker på grønnsakene kan være en hemmelig blanding. Du trenger imidlertid ikke å kjenne hver eksakte ingrediens. Det er nok å vite at det er deilig.
Ingrediensene du kjenner, som vanlig hvit ris, er betong. De andre elementene er abstrakte. Du vet at det er salsa, men hva slags? Eller, hvis noen bare gir deg en burrito fra ingensteds, så er hele burritoen abstrakt.
Abstraksjon i det abstrakte
Sammen med arv, er abstraksjon et viktig begrep i objektorientert programmering. Teorien er at hvert objekt skal levere enkle og forutsigbare resultater. Objekter skal også bare dele det som må deles.
Du kan tenke på en burrito som et objekt. Inne i burritoen har du flere andre gjenstander, som bønner, ris, ost og varm saus. Bønnene kan ha blitt krydret. Osten kan være en blanding. Og den varme sausen kan være en kombinasjon av paprika lagret i eddik.
Du trenger ikke vite hvordan alle ingrediensene i en burrito ble laget. Og når det gjelder pølser, vil du sannsynligvis ikke vite det. Alt som betyr noe er at den ikke faller fra hverandre når du spiser den og at den er supergod.
Abstraksjon er nært knyttet til innkapsling
Det er det samme med programmering av objekter. Når du instansierer et objekt (oppretter det fra en klasse), er det som å bestille en burrito fra food truck-disken. Du har tilgang til noen data, men ikke alle. Du trenger ikke vite hvordan objektet fungerer, så lenge funksjonene returnerer riktig data. Her er en burrito i JavaScript/Typescript:
Det angitte språket: tsx eksisterer ikke'Kodegenerering mislyktes!!
'
Du kan lek med denne koden i TypeScript-sandboksen.
I eksemplet ovenfor er salsa- og osteingrediensene abstrahert bort. Først er de innkapslet for å skjule de spesielle ingrediensene. Deretter tilsettes getters for å få tilgang til ingrediensene. Men ingrediensene gir bare en abstrakt representasjon av hva de egentlig er.
Abstraksjon i betongen
Abstraksjon er imidlertid mer enn et konsept. Klasser kan også være abstrakte. Det betyr at de kan definere andre klasser. Men de kan ikke instansieres selv.
Hvorfor klasser noen ganger bør være abstrakte
Tenk deg at du går på restaurant og setter deg ned. Servitøren gir deg en meny. Du åpner den for å finne at det bare er ett element: mat.
Det er ganske abstrakt. Ville du bestilt den? Ville du spist det? Det ville du sannsynligvis ikke. Det er ikke nok å si at noe er mat. Det må brytes ned til noe mer konkret.
Hva med pasta? Vel, det er en mer spesifikk type mat. Og vi vet at den sannsynligvis har nudler og saus. Men det finnes mange forskjellige typer pasta der ute, så det er fortsatt abstrakt.
Hva er abstrakt og hva er konkret?
Fettuccine Alfredo er et konkret eksempel på både mat og pasta. Det samme gjelder for klasser. Ikke hver klasse bør instansieres. Noen klasser skal bare definere strukturen til andre klasser.
Her er et eksempel med et abstrakt Mat klasse og et barn Macadamianøtter klasse:
Det angitte språket: tsx eksisterer ikke'Kodegenerering mislyktes!!
'
Her er koden.
Abstrakte klasser forteller andre klasser hvordan de skal oppføre seg. I eksemplet ovenfor, hvis du skal være en matklasse, må du ha funksjoner som gir tilgang til ditt navn, smak, beskrivelse og kalorier.
Legg merke til at Macadamianøtter klasse strekkerMat. Det er å si det Macadamianøtter godtar å følge reglene for Mat. Legg også merke til at konstruktøren kaller super. Den kommandoen instansierer den overordnede klassen før konstruktøren instansierer Macadamianøtter.
Hvis du lærer å programmere, kan du det ha mer moro med disse programmeringsspillene.
Abstraksjonspraksis
- Besøk lenken ovenfor og bruk sandkassen til å lage en abstrakt klasse kalt Suppe.
- Lag et konkret barn av Suppe klasse, kalt Korn.
- Bruk console.log for å teste koden din. Hva skjer hvis din Korn klasse mangler en av funksjonene definert i Suppe?
Men hva er poenget med en klasse du ikke kan instansiere?
I begynnelsen kan abstrakte klasser virke unødvendige. Tross alt kan du faktisk ikke bruke dem til å lage et objekt. Og det er ikke slik at de gir fra seg funksjonene sine. Funksjoner må skrives om i hver barneklasse.
Det er to hovedgrunner til at du trenger abstrakte klasser. De holder koden din konsistent, og de sørger for at andre utviklere også skriver konsistent kode. Du vil ikke alltid jobbe alene. Hele laget må følge de samme reglene. Du kan lære mer av TypeScript-dokumentasjonen om abstrakte klasser.
Hvordan organisere din objektorienterte kode med arv
Les Neste
Relaterte temaer
- Programmering
- Programmering
- Objektorientert programmering
Om forfatteren
Lee er en nomade på heltid og en polymat med mange lidenskaper og interesser. Noen av disse lidenskapene dreier seg om produktivitet, personlig utvikling og skriving.
Abonner på vårt nyhetsbrev
Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis e-bøker og eksklusive tilbud!
Klikk her for å abonnere