Objektorientering

De centrala begreppen inom objektorientering är klass och objekt.

En klass definierar en datatyp i C++.

Man kan efter att en klass definierats skapa variabler av denna datatyp.

 

Klasser innehåller data (medlemmar) och funktioner (metoder), men en klass i sig kan inte göra något, den endast definierar hur variablerna skall se ut, på samma sätt som struct.

 

Variabler som har en viss klass som datatyp kallas objekt. Objekten innehåller egentlig data, och man kan kalla på metoder som objekt har. Man säger att ett objekt är en instans av en viss klass.

Då man skapar ett objekt instantierar man en klass.

 

Abstraktion

Ett av de centrala målen med objektorientering är abstraktion. Man vill dölja komplexitet hos någonting genom att kapsla in fenomenet i en klass. Vi vill t.ex. inte se på en hand som en samling blod, ben, senor

och kött, inte heller som en enorm samling celler av olika typ och allra minst som en ofantlig samling atomer.

På samma sätt är vi nöjda över att slippa bry oss om våra program på disken som är en samling data,

som är en samling bytes som är en samling bitar som är en samling magnetfält på en skiva.

Klasser i C++ skall göra något komplext enkelt att förstå och använda.

 

Klasser är den mest avancerade abstraktionen i C++. Klasser låter oss abstrahera mycket komplex data på ett intuitivt sätt. Man kan bygga upp logiska arvshierarkier och kapsla in klasser i varandra. Traditionellt i C har programmeraren alltid vetat vad som finns "bakom" en datatyp, men i C++ behöver inte användaren längre veta detta. Tvärtom kan man totalt abstrahera bort implementationsdetaljer så att programmeraren inte ens kan se dessa, utan endast har ett väl definierat gränssnitt att jobba med. Ett gränssnitt definierar hur objekten kan användas.

 

Förutom endast abstraktion av data kan klasser även tillhandahålla metoder som opererar på det data ett objekt innehåller. På detta sätt abstraheras programmeraren från interna implementationsdetaljer angående data ett objekt innehåller, samt för hur denna data skall manipuleras för att åstadkomma ett önskat resultat.

 

Abstraktionen fungerar även åt andra hållet. Istället för att endast skydda programmeraren från implementationsdetaljer används abstraktion även för att skydda objekt från programmeraren.

På detta sätt kan man garantera att ett objekt alltid uppfyller vissa invarianter, eftersom programmeraren inte kan göra något annat med ett objekt än vad dess gränssnitt tillåter. Programmeraren ges inte tillträde till data inom ett objekt om det inte explicit tillåts. Man kan t.ex. tänka sig ett objekt som innehåller interna datastrukturer för ett användargränssnitt. Om programmeraren ges tillträde till alla dessa datastrukturer kan han/hon i misstag göra något fatalt som påverkar även andra programs funktioner negativt.

 

Återanvändning av kod

Ett av de andra centrala begreppen inom objektorientering är återanvändning av kod. C++ gör det lättare att skriva kod som kan återanvändas senare i andra projekt. Tack vare att implementationen är inkapslad behöver man inte veta hur någonting görs, utan det räcker med att veta att det görs korrekt för att klassen skall kunna återanvändas. En bra skapad klass är gjord så att dess funktionalitet kan modifieras via arv Det kan kännas svårt för en nybörjare att skapa klasser som är "bra", men det är en teknik som man lär sig med tiden.