Klasser og objekter
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.

Medlemmene registrerer seg ved Ă„ fylle ut medlemsskjemaet.

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).

Â
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.

Â
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.