Klasser og objekter

Klasser og objekter

I tidligere kapitler har vi så vidt nevnt klasser, objekter og metoder. I dette kapittelet går vi videre og undersøker hva disse tingene innebærer i objektorientert programmering.

Objektorientert programmering

Det er flere måter å programmere på. Nå for tiden er det vanligst å programmere objektorientert. APL, C++, C#, Java, Objective-C og Swift er eksempler på programmeringsspråk som egner seg for objektorientert programmering. Fortran og Haskell er eksempler på programmeringsspråk som brukes til "motsetningen", såkalt funksjonell programmering.

Noen av fordelene med objektorientert programmering er at koden blir oversiktlig og modulær. Koden blir også gjenbrukbar, slik at samme kodelinjer ikke må skrives flere ganger. Vi skal se eksempler på dette i Klasser og biblioteker.

I objektorientert programmering dreier det meste seg om såkalte klasser. I Java er all kode oppdelt i ulike klasser, men så klassefokusert er ikke APL. Vi har imidlertid brukt klasser flere ganger.

Klasser og objekter

Sett at det finnes en forening som vil registrere nye medlemmer. Felles for medlemmene er at de har hvert sitt medlemsnummer, hvert sitt navn og hvert sitt telefonnummer. For å forenkle registreringsprosessen lager foreningen et skjema med navnet Medlem, som medlemmene skal fylle ut.

Blanketten ”Medlem” for medlemsregistrering

Medlemmene registrerer seg ved å fylle ut medlemsskjemaet.

Medlemmer som har fylt ut hvert sitt medlemsskjema.

I denne lignelsen tilsvarer medlemsskjemaet det som i objektorientert programmering kalles en klasse. En klasse er kode som brukes til å samle flere tilhørende variabler og funksjoner. Den klassen kan deretter brukes til å lage ett eller flere såkalte objekter. Objektet tilsvarer i samme lignelse de ferdigutfylte skjemaene (medlemmene).

Av en klasse kan det lages flere objekter.

I Funksjoner fikk vi et godt eksempel på hvordan vi kan gjenbruke kode ved hjelp av klasser og objekter. Vi ville ikke bruke koden til enkle brytere, fordi vi trengte en kode som fikk bryterne til å fungere som taster. Vi brukte derfor klassen Button og laget fire nye Button-objekter.

// Create a button object for each GPIO pin in use
Button btnAddLittleBasketAlice(5);
Button btnAddLittleBasketBob(4);
Button btnAddBigBasketAlice(3);
Button btnAddBigBasketBob(2);


Når vi laget Button-objektene, ga vi dem hvert sitt navn og hvert sitt attributt. Et attributt er en variabel eller en konstant som beskriver en egenskap hos objektet. I vårt tilfelle hadde objektene bare ett attributt hver (tilkoblet GPIO-pinne), men andre objekter kan ha flere attributter.

Vi laget fire Button-objekter av Button-klassen.

Metoder

Button-klassen inneholder seks funksjoner:

  • begin()
  • read()
  • toogled()
  • has_changed()
  • pressed()
  • released().

Den førstnevnte funksjonen starter knappen uten å returnere noen verdi. De andre funksjonene returnerer boolean-verdiene som indikerer knappens status, om knappens status er endret, om knappens status er endret etter at den ble avlest sist, om knappen er trykket ned, eller om knappen er sluppet opp. Det kreves mye kode for å få all denne funksjonaliteten. Heldigvis trenger vi, takket være klasseoppbyggingen, bare skrive koden én gang i stedet for én gang per knapp. Siden vi dessuten låner klassen via et bibliotek, trenger vi ikke skrive koden i det hele tatt (den jobben har utvikleren av klassen allerede gjort for oss).

Når vi lager et nytt Button-objekt (for eksempel btnAddLittleBasketAlice), får objektet alle disse funksjonene. Vi bruker imidlertid ikke termen "funksjon" for å beskrive dem. Når en funksjon henger sammen med et objekt, kaller vi det i stedet "metode". Metoder fungerer på samme måte som funksjoner, men de tilhører alltid et objekt. Når vi vil undersøke om en knapp er trykket ned, bruker vi metoden btnAddLittleBasketAlice.pressed. Legg merke til at vi skriver objektnavnet etterfulgt av en punktum og metodenavnet. Det innebærer både at pressed er en metode, og at den tilhører objektet btnAddLittleBasketAlice.

Sammenlign eksempelet ovenfor med funksjonen void setup. Den hører ikke sammen med noe objekt og er derfor en helt vanlig funksjon.

Sist endret: 2017-09-08