Sådan gør du din kode mere læselig med abstraktion

Mens du lærer at programmere, er det almindeligt at se folk bruge et udtryk kaldet abstraktion. Du begynder at stille spørgsmålstegn ved dig selv: hvad er abstraktion, og hvorfor er det vigtigt?

I denne artikel vil jeg forklare dig begrebet abstraktion og hvordan man bruger det, og jeg vil give nogle eksempler i Python.

Første ting først: Hvad er abstraktion?

Ifølge min Foundations of Programming-lærer:

“Abstraktion er en forenklet specifikation af en enhed”

Hvad dette betyder er, at en abstraktion er en repræsentation af en beregningsenhed. Det er en måde at skjule de særlige oplysninger på og kun give programmøren den mest relevante information.

En abstraktion er også situationsbestemt: hver enkelt passer til et behov, så du kan forbinde god abstraktion med den særlige brug af denne enhed.

Lad os se på Binary Search Tree's (hvis du ikke ved, hvad de er, se min artikel om dem). Vi kan definere en node som en enhed med følgende egenskaber:

A Node has: Node * left Node * right int val

Her vil vi sige, at en node har to markører til andre noder og en int-værdi. Men hvor nyttigt er det for nogen i forhold til en funktion, insert(node, value)og det ville bare indsætte det korrekt? På den måde skulle du bare ringe til det, og det blev gjort. Enkel.

Sådan er abstraktion nyttig. Alle biblioteker, du bruger i dine programmer, bruger det, så det bliver virkelig enkelt at bruge et bibliotek.

Ok, men hvor god er data abstraktion?

Dataabstraktion giver os mulighed for at omdanne en kompleks datastruktur til en, der er enkel og nem at bruge. Effekten af ​​dette er, at et program med et højt kodekompleksitetsniveau kan omdannes til et program, der ser tæt på engelsk (lad os kalde det kode på højt niveau ).

En datatype er lavet af to ting: egenskaber og metoder, som kan være offentlige eller private. Offentlige er den eneste måde at bruge dataene på. De skal dække alle de funktioner, du ønsker, at dataene skal kunne.

Hvad sker der så, hvis du bruger din abstrakte kode? Det betyder ikke rigtig, om dine interne egenskaber ændres, så længe metoderne stadig modtager de samme argumenter og gør det samme som før. Hvis noget er galt, skal du kun ændre det en gang.

Lad os vælge et eksempel og arbejde med det: Vektorer

Vi antager, at vektorer er:

  • Objekter med 2 værdier, x og y
  • x og y er begge ikke-negative tal

På denne måde er vektorer noget som (2, 5), (0, 19) osv.

En god måde at skabe abstraktioner på er at bruge Objekter. De giver skjult information og anonymitet af repræsentation. Dette giver brugeren mulighed for at beholde abstraktionen.

Lad os starte med at definere vores klasse (jeg definerer ikke typevalidering for at holde koden renere, men du skal gøre det):

Så vi definerede flere metoder, og vi har mange ting nu, som vi kan gøre:

For en 2D-vektor kan dette virke simpelt. Hvis du begynder at implementere dette i større og mere komplekse programmer, vil du bemærke, at de kommer rigtig godt.

Lad os nu foretage en anden implementering af klassevektoren (ændre dens interne tilstand) til noget med de samme metoder, men med en anden kode:

Hvis vi kører de samme kommandoer, vil outputen stadig være den samme. Dette skyldes den abstraktion, vi brugte, selvom koden ændrede sig fuldstændigt. Derfor er det meget vigtigt at bruge abstraktion. Det giver mulighed for fleksibilitet i din kode og uafhængighed af andres kode.

Lad os nu bruge et andet eksempel, denne gang med 2 klasser: By og borger.

Og vi får følgende:

### OUTPUT ###City population is 1000, random: Citizen is a female 20 years oldCity population is 1000, random: Citizen is a male 74 years old

Men forestil dig nu, at vi vil ændre, hvordan Citizen-klassen fungerer indeni. Hvis vi ikke brugte abstraktion, ville vi skulle ændre hele koden! Det er meget arbejde!

Hvis koden nu køres igen, ved vi, at den fungerer, selvom resultaterne er forskellige. Som du kan se, ændrede vi en hel klasse, men alt fungerer!

Afslutter

Ved første abstraktion kan det se ud som om det ikke er nødvendigt. Jo lavere niveauet på det sprog, du bruger, jo vigtigere er det at bruge abstraktion. Dette undgår at have kompleks kode og holder det hele simpelt. På sprog som C er det virkelig virkelig nyttigt. Hvis du tvivler på det, skal du kontrollere dette projekt, jeg lavede, hvor jeg implementerede abstraktion, og det var virkelig let at forstå, hvad der foregik.

Hvis du har spørgsmål eller noget, du vil tale om eller diskutere, skriv en kommentar nedenfor!

Glem ikke at følge mig på Instagram og Twitter!