Vad är objektorienterad programmering?

Den hälsosamme ekonomisten, Sunday 31 March, 2019
Bild: 2017-09/dsc01062.jpg

Objektorienterad programmering är ett begrepp som ni kanske hört talas om. Men vad är det egentligen? Vet inte om jag som hobbyprogrammerare är rätt person att förklara det, men jag gör ett försök.

För länge sedan, när hemdatorer levererades med programspråket BASIC inbyggt använde man numrerade programrader. En programsnutt kunde se ut som följande:

10 PRINT "Den hälsosamme ekonomisten"
20 GOTO 10

Programmet kommer att skriva ut texten "Den hälsosamme ekonomisten" tills man på något sätt sätter stopp för det. Slår mig att jag faktiskt inte minns hur man avbryter programmet, men det kan nog vara genom att trycka på escape-tangenten eller ctrl+C.

Hur som helst, att skriva allting i rader och helt sekventiellt blir jobbigt. Om inte annat för att man måste komma ihåg vilka rader som saker och ting står på. Dessutom är det slöseri med minnesutrymme i datorn. I Basic fanns därför även kommandot GOSUB, som gjorde det möjligt att skriva några programrader som sedan kunde återanvändas på flera ställen. Det kunde se ut så här:

10 PRINT "Den hälsosamme ekonomisten"
20 GOSUB 40
30 END
40 PRINT "... är helt fantastisk"
50 RETURN

Men ett av de mer användbara kommandona var att det gick att definiera funktioner. Genom att använda funktioner kunde man kapsla in programkoden på ett bättre sätt och få den mer läsbar.

10 DEF FN A(X) = X + 7
20 PRINT FN A(9)

Som uppenbarligen skriver ut 16 om man kör programmet. Själv var jag en flitig användare av denna möjlighet och insåg väl inte då att detta var objektorienterad programmering.

Så fast forward till dagens programspråk. Ska nämna att det än i dag finns många språk som inte är objektorienterade. Jag använder exempelvis statistiksystemet SAS dagligen på jobbet och det liknar BASIC en hel del.

Men det gör inte programspråket RUBY, som uppfanns 1995 av den japanske programmeraren Yukihiro “Matz” Matsumoto. RUBY tar objektorienteringen så långt jag tror man kan komma - i och med att allting betraktas som ett objekt.

Som ni förstår av inledningen ovan börjar det med funktioner. I RUBY definieras en funktion exempelvis som följande

def funktionen
  variabel = "Den hälsosamme ekonomisten"
  return variabel
end

Till skillnad från i BASIC finns inga fasta programrader, men i editorn har varje rad ett nummer så att man lätt kan bläddra fram var något har gått snett. För att gör det tydligt att koden mellan def och end tillhör funktionen som kallas "funktionen" brukar man dra in texten några kolumner.

Funktionen kan sedan anropas med kommandot

puts funktionen

Bara genom att använda funktioner mer systematiskt blir det betydligt enklare än i BASIC. Funktionerna kan också ta argument, precis som i BASIC, och man kan förändra data för att sedan på slutet få fram något annat än det man stoppade in:

variabel = funktionen(x, y)
puts variabel

Jo, förresten. Ni undrar kanske vad "puts" står för? Det är bara "print" i RUBY, men med en radbrytning efteråt.

Funktionen är den minsta byggstenen i objektorienterad programmering. Det är i RUBY ingen skillnad mellan variabler, som "1.56" eller strängar som "Den hälsosamme ekonomisten". Allting kan refereras till med ett ord. Det enda viktiga är att "ordet" huvudsakligen består av alfanumeriska tecken.

Det kan kanske tyckas ologiskt att funktioner och numeriska variabler och strängar alla kan refereras med vanliga ord. Men det är fullt logiskt och följer av att allt i RUBY är ett objekt. Detta innebär att ett ord, exempelvis "variabel", kan referera till vilket slags objekt som helst - en sträng, ett tal, en bilmodell eller en funktion.

Man kan se ordet som en funktion som levererar ett objekt. Ordet är alltså inte objektet som sådant, utan en referens till objektet. En subtil skillnad som bara har betydelse i vissa specifika fall.

Då uppstår givetvis frågan om hur många typer av objekt det finns. Och svaret är att det kan finnas hur många som helst. I RUBY finns det från början bara ett begränsat antal typer av objekt, men programmeraren kan fritt utöka antalet - och förväntas också göra det. En objekttyp kallas klass (CLASS) och definieras ungefär på samma sätt som en funktion. Skillnaden är att en klass inte automatiskt levererar något värde och att det kan finnas många olika exemplar (INSTANCES)  av en klass.

Tänk på klassen som begreppet "bil" och exemplaret som din egen bil. En klass kan definieras på följande sätt

Class Bil
  def initialize
    @marke = "Volvo"
    @motortyp = "bensin"
  end
  def marke
    @marke
  end
  def motortyp
    @motortyp 
  end
  def marke=(marke)
    @marke = marke
  end
  def motortyp=(motortyp)
    @motortyp = motortyp
  end
end

När programkoden körs definieras klassen och bilen får grundegenskaperna att märket är "Volvo" och att den drivs av "bensin". En ny bil definieras genom koden

min_bil = Bil.new

När min bil väl existerar kan vi förändra den genom att skriva:

min_bil.marke = "Lexus"
min_bil.motortyp = "Hybrid"

Vill vi sedan ta reda på vilket märke och vilken motortyp bilen har skriver vi:

puts min_bil.marke
puts min_bil.motortyp

vilket ger utskriften:

Lexus
Hybrid

Glömde förklara vad "@"-tecknet före variablerna betyder. Det är ett tecken som inleder alla variabler som tillhör ett exemplar och de kallas "instance variables". Genom att inleda med "min_bil" vet programmet att det är ett exemplar av en bil, eftersom min_bil definierats som tillhörande klassen "bil", och dessutom att det är min bil. Variablerna tillhör alltså min bil och ingen annans.

Om man inte anger något särskilt, utan skriver variablerna med små bokstäver, antas att variablerna är lokala och de kommer då inte att vara tillgängliga utanför funktionen. Det finns även exemplarvariabler som har prefixet @ och klassvariabler som har prefixet @@ och högst upp globala variabler som inleds med tecknet $.

Om man vill att en funktion som tillhör en klass inte ska vara tillgänglig utanför koden som definierar klassen lägger man till ordet "private" före funktionen. Annars antas att funktionen ska kunna anropas på det sätt som vi gjorde, alltså exempelvis med min_bil.marke.

Så - varför bekymrar vi oss då med att definiera klasser, när vi skulle kunna skriva funktioner som tar hand om allt? Skälet är läsbarhet. Begreppet "klass" ligger nära vårt eget språk och gör det lättare att förstå logiken i koden. Begreppet "bil" kan lika gärna vara "bankkund" eller "butik" eller något annat någorlunda homogent begrepp som betecknar något som finns i många individuella exemplar. Vi vill kontrollera hur programmet kommer åt information och hur det kan lagra information om ett objekt av en viss typ - det gör vi med hjälp av funktioner i objektets klass.

I RUBY tillhör alla objekt en klass. Tal tillhör klassen "Fixnum" och strängar tillhör klassen "String". Oftast kan man få reda på ett objekts klass genom att skriva

puts min_bil.class

Vilket i det här fallet skulle ge oss klassen "Bil". Bland de inbyggda klasserna i RUBY finns även Array, Hash och Matrix (med tilläggsmodul). En Array är en lista av någon/några andra objekt som kan tillhöra andra klasser och en Hash är en lista som kan refereras med ett annat objekt. En Matrix är vad det låter som.

Ofta när man frågar programmerare vad den grundläggande skillnaden mellan klasser och funktioner är blir svaret svävande. Det är nog skälet till att jag skrev det här blogginlägget och försöker förklara för mig själv vilken skillnaden egentligen är. Min tolkning är att klasser finns därför att det finns programmerare. Det är ett konceptuellt begrepp som syftar till att föra programkoden närmare programmerarens bild av hur världen ser ut.

Hade människan inte uppfunnit talsystemet hade det antagligen inte funnits numeriska variabler och hade man inte uppfunnit skriftspråket hade det inte funnits strängar. Klasser finns därför att människan uppfunnit begrepp som "bilar" eller "kunder" eller "butiker". Objektorienterad programmering handlar därför om att översätta koncept som skapats av neurala nätverk (alltså hjärnan) så att de kan behandlas sekventiellt av en eller flera programtrådar i en dator.

Man expanderar alltså hjärnans kapacitet på bredden genom att kopiera redan befintliga strukturer för databearbetning. Den trånga sektorn i den här översättningen är själva programmeringen, som i någon mening handlar om introspektion och om att försöka förstå hur vi själva betraktar världen omkring oss. När datorerna en dag kan skapa egna begrepp - via deep learning - lär vi slippa den här jobbiga omvägen, men ännu är vi inte där.

Koldioxidfokuseringen skadar miljön

Den hälsosamme ekonomisten
Bild: 2017-09/dsc01062.jpg

Preems tänkta utbyggnad i Lysekil är pricipiellt intressant eftersom det illustrerar att bättre miljö kan kräva ökade koldioxidutsläpp. Koldioxid är som bekant ingen förorening, utan en naturlig del i växternas fotosyntes. Mer koldioxid innebär bättre förutsättningar för växtligheten och därmed en grönare planet. Meningarna är delade om huruvida mänskliga utsläpp av koldioxid utgör ett hot. Det kan vara så, men utvecklingen så här långt tyder på att det krävs minst en tredubbling av …

Läs mer!

USA skadar sina egna framgångsrika företag

Den hälsosamme ekonomisten
Bild: 2017-09/dsc01062.jpg

Så noterar vi en begynnande handelspolitisk osämja mellan Indien och USA . Konsekvensen kan bli att amerikanska företag som Amazon och Flipcart får svårt att etablera sig där. Det är intressant att många av de största amerikanska företagen är beroende av skalfördelar. Deras teknik är ofta både möjlig och tillåten att kopiera, så om de inte etablerar sig i ett land finns det alternativ. I Sverige möter Amazon hård konkurrens av exempelvis Zalando och andra e-handelsföretag, …

Läs mer!

Den svenska synen på hemundervisning intressant

Den hälsosamme ekonomisten

Lyssnar på Godmorgon Världen som tar upp den svenska restriktiva inställningen till hemundervisning. Har tidigare ställt frågan om huruvida skolans uppgift är att lära ut kunskap eller om det är att skapa social sammanhållning . Själv tror jag att syftet alltid varit det senare. Och det gör att man ställer sig frågan hur staten kan tillåta ett … Läs mer!

Spanska La Liga hackade 10 miljoner mobiltelefoner

Den hälsosamme ekonomisten

Spanska La Liga har hackat 10 miljoner mobiltelefoner via en app . Syftet var att genom telefonernas mikrofon lyssna på sportutsändningar och sedan via telefonernas geopositioneringsfunktion ta reda på var någonstans fotbollsmatcher sänds olagligt. Nu har La Liga fått böta 250 000 euro för tilltaget, som lagförts av spanska datainspektionen… Läs mer!

Extremt få svenskar är bidragsberoende

Den hälsosamme ekonomisten

De senaste siffrorna för utanförskapet eller bidragsberoendet kom precis in från SCB. Vi kan glädja oss åt nya rekord. Man ska förstås aldrig jämföra olika månader så jag jämför med maj månad 2006. Då var 1 043 633 helårspersoner beroende av ersättningar och bidrag för sin försörjning. I maj 2019 var motsvarande siffra 723 852.  Det är ett … Läs mer!

Besöker rangen på Ågesta GK

Den hälsosamme ekonomisten

Har tagit en tur till Ågesta Golfklubb och slagit iväg några bollar på rangen. Fungerar rätt bra, trots jag inte spelat så mycket. Nu sitter jag i golfrestaurangen, tar en latte och kollar hur man enklast monterar en cykelhållare på en bilpoolsbil - om man får. Jag har mailat Sunfleet och frågat hur man kan lösa saken. Tydligen finns det … Läs mer!

Så sparar vi 100 miljarder i offentlig sektor

Den hälsosamme ekonomisten

Sveriges Kommuner och Landsting konstaterade nyligen att ökande demografiska behov innebär att de offentliga utgifterna måste öka med 100 miljarder i reala termer de kommande tio åren. Den primära metoden för att möta dessa utmaningar blir som brukligt att höja skatten. Danderyd tvingades nyligen bita i det sura äpplet och kommer framgent att … Läs mer!

Till molnet och tillbaka igen

Den hälsosamme ekonomisten

Är lite obeslutsam angående var bloggen ska ligga. För tillfället ligger den på en virtuell server hos Google - en så kallad Compute engine . Det är en server som är väldigt snabb, men också hyfsat dyr. Egentligen onödigt då jag har en snabb server hemma i lägenheten som jag lika gärna kan använda. Äger också en Synology NAS av typen 1515+. … Läs mer!

Slack värderas till 17 miljarder

Den hälsosamme ekonomisten

Läser att Slack värderas till 17 miljarder. Det är väldigt mycket pengar för lite programkod. Betänk att man för den summan kan få 25 JAS-plan. Nu är Slack förstås en bra produkt, den bästa i sitt slag, och det är detta som värderas. Hade Slack varit näst bäst hade det varit värt 200 miljoner och hade det varit tionde bästa lösningen hade … Läs mer!

Om bloggen

Den hälsosamme ekonomisten är en blogg som handlar om sjukvårdens organisation, incitament och klassisk liberalism - allt skrivet ur ett ekonomistiskt perspektiv. Webbplatsen använder tredjepartskakor (cookies) från Disqus, Piwik, Facebook, Google och Twitter för att anpassa innehållet och annonserna till användarna, tillhandahålla funktioner för sociala medier och analysera vår trafik. Vi vidarebefordrar information om din användning av vår webbplats till de sociala medier och annons- och analysföretag som vi samarbetar med. Du kan läsa mer om webbplatsens kakpolicy här. Denna sida drivs med webbverktyget Bolt. Av Mattias Lundbäck.

VR och Vårdvalssidan

Den hälsosamme ekonomisten finns även tillgänglig i VR. Har man HTC Vive eller Occulus Rift når man hifi://ekonomism genom att först installera appen High Fidelity som ger tillgång till en stor mängd olika virtuella världar. Sedan skriver man bara "ekonomism" i Goto-fältet i HiFi. Fältet motsvarar adressraden i en vanlig webbläsare.

Besök gärna www.vårdval.se - det enklaste sättet att hitta och jämföra vårdgivare.

Läs bloggkollegor

Anybodys Place Carl-Johan Westholm Cornucopia Danne Nordling Eskil Ullberg Fnordspottning Fredrik Malm Fredrik Segerfeldt Gustav Nipe Henrik Alexandersson Janerik Larsson Jonas Grafström Lennart Grundel Maria Abrahamsson Markus Uvell Mina Moderata Karameller Mattias Svensson Niclas Berggren Opassande Per Gudmundson Sjätte Mannen Tanja Bergkvist The Market Monetarist


Creative Commons-licens
Den hälsosamme ekonomisten av Mattias Lundbäck är licensierad under en Creative Commons Erkännande 4.0 Internationell licens.
Based on a work at https://www.ekonomism.us.

Sociala medier

Den hälsosamme ekonomisten är en blogg för dig som är intresserad av ekonomi, politik och teknik. Följ mig på Twitter för regelbundna uppdateringar. Läs mer om Den hälsosamme ekonomisten och Mattias Lundbäck här.


Linkonomism
Googelkonomism
Feedkonomism