Klasser och objekt

Klasser och objekt

I tidigare kapitel har vi som hastigast nämnt klasser, objekt och metoder. I detta kapitel går vi vidare och undersöker vad dessa saker innebär i objektorienterad programmering.

Objektorienterad programmering

Det finns flera sätt att programmera. I dagsläget är det vanligast att programmera objekt­orienterat. APL, C++, C#, Java, Objective-C och Swift är exempel på programmeringsspråk som lämpar sig för objektorienterad programmering. Fortran och Haskell är exempel på programmeringsspråk som används för "motsatsen", så kallad funktionell programmering. 

Några av fördelarna med objektorienterad programmering är att koden blir överblickbar och modulär. Koden blir också återanvändbar, så att inte samma kodrader måste skrivas flera gånger. Vi kommer att se exempel på detta i Klasser och bibliotek.

I objektorienterad programmering kretsar det mesta runt så kallade klasser. I Java är all kod uppdelad i olika klasser, men riktigt så klassfokuserat är inte APL. Vi har dock redan använt klasser ett flertal gånger.

Klasser och objekt

Ponera att det finns en förening som vill registrera nya medlemmar. Gemensamt för medlemmarna är att de har varsitt personnummer, varsitt namn och varsitt telefonnummer. För att förenkla registreringsprocessen tar föreningen fram en blankett vid namn Medlem som medlemmarna får fylla i.

Blanketten ”Medlem” för medlemsregistrering

Medlemmarna registrerar sig genom att fylla i Medlem-blanketten.

Medlemmar som har fyllt i varsin Medlem-blankett.

I denna liknelse motsvarar Medlem-blanketten det som i objektsorienterad programmering kallas en klass. En klass är kod som används för att samla flera sammanhörande variabler och funktioner. Den klassen kan sedan användas för att skapa ett eller flera så kallade objekt. Objekten motsvarar i samma liknelse de färdigifyllda blanketterna (medlemmarna).

Av en klass kan det skapas flera objekt.

I Funktioner fick vi ett tydligt exempel på hur vi kunde återanvända kod med hjälp av klasser och objekt. Vi ville inte använda koden för simpla brytare, eftersom vi behövde kod som fick brytarna att fungera likt tangenter. Vi drog därför nytta av klassen Button och skapade fyra nya Button-objekt.

// 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 skapade våra Button-objekt gav vi dem varsitt namn och varsitt attribut. Ett attribut är en variabel eller en konstant som beskriver en egenskap hos objektet. I vårt fall hade objekten bara ett attribut vardera (anslutet GPIO-stift), men andra objekt kan ha flera attribut.

Vi skapade fyra Button-objekt av Button-klassen.

Metoder

Button-klassen innehåller sex funktioner:

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

Den förstnämnda funktionen startar knappen utan att returnera något värde. Övriga funktioner returnerar boolean-värden som indikerar knappens läge, om knappens läge har ändrats, om knappens läge har ändrats sedan läget avlästes senast, om knappen är nedtryckt eller om knappen är uppsläppt. Det krävs ganska många rader kod för att få all denna funktionalitet. Som tur är behöver vi, tack vare klassuppbyggnaden, enbart skriva koden en gång i stället för en gång per knapp. Eftersom vi dessutom lånar klassen via ett bibliotek behöver vi inte skriva koden alls (det jobbet har klassens skapare redan gjort åt oss). 

När vi skapar ett nytt Button-objekt (t.ex. btnAddLittleBasketAlice) får objektet alla dessa funktioner. Vi använder dock inte termen ”funktion” för att beskriva dem. När en funktion hänger ihop med ett objekt kallar vi det i stället ”metod”. Metoder fungerar på precis samma sätt som funktioner, men de hör alltid ihop med objekt. När vi vill undersöka om en knapp är nedtryckt använder vi metoden btnAddLittleBasket­Alice.pressed. Lägg märke till att vi skriver objektnamnet följt av en punkt och metodnamnet. Det avslöjar både att pressed är en metod och att den hör ihop med objektet btnAddLittleBasketAlice

Jämför exemplet ovan med funktionen void setup. Den hör inte ihop med något objekt och är därför en helt vanlig funktion.  

Senast ändrad: 2017-01-19