Objektorienterad programmering

Objektorienterad programmering (engelska: Object Oriented Programming, OOP) är en programmeringsmetod i vilken ett program kan innehålla en varierande uppsättning objekt som interagerar med varandra. De ursprungliga idéerna i metoden (objekt, inkapsling) uppstod i slutet av 1960-talet i programmeringsspråk för simulering. De byggdes sedan på med arv under mitten och slutet av 1980-talet. Denna metod att programmera anses av förespråkarna vara effektiv och kraftfull, speciellt vid konstruktion av större program, eftersom oönskad påverkan mellan programmets olika delar minimeras. Det är också oftare lättare att återanvända programdelar från ett program i ett annat, eftersom begreppen, objektklasserna, ofta blir generella och användbara i olika sammanhang.

Objekt 
Ett objekt är en instans av en klass, det vill säga ett slags simulering av en företeelse som används inom objektorienterad programmering för att samla data och kod som hör ihop. Ett objekt kan till exempel vara en bok i ett program som används på ett bibliotek för att hantera utlåning. Boken har ett antal egenskaper som beskrivs av dess attribut (författare, titel, antal sidor, egenskapen att vara utlånad eller tillgänglig till exempel) och ett antal metoder som kan användas för att hämta eller ändra information (man kanske vill veta författare till boken, eller ändra status som utlånad eller tillgänglig). Ett annat objekt skulle kunna vara en låntagare som då kan ha en samling böcker som den lånat som attribut och metoder för att låna och lämna tillbaka böcker. 

Objektorientering handlar mycket om att designa de objekttyper, så kallade klasser, som behövs. När ett program körs skapar det, ibland med hjälp av användaren, så många objekt av dessa klasser som behövs.

Attribut 
Ett attribut är en variabel eller konstant som beskriver en egenskap hos ett objekt. Ett attribut ges ett namn så att det kan anropas/användas i programmet. Beroende på programmeringsspråk så kan man också behöva ange typ för attributet (heltal, flyttal, en pekare eller en textsträng till exempel) och det är ofta också möjligt att ange olika sekretessnivåer för attribut. Detta för att hindra eller öppna upp för åtkomst av andra delar av programmet som vill veta vad attributet har för värde eller namn.

Metoder 

En metod är en funktion som kan hämta information från ett objekt eller manipulera objektets attribut. En metod som hämtar information benämns ofta getter (efter engelskans get, hämta) och en metod som ändrar ett attribut kallas setter (efter engelskans set, ställa in).

Nyckelkoncept 
Objektorienterad programmering betonar följande begrepp:
 Klass – Programmet byggs upp av delar, klasser, efter de begrepp som hanteras. Varje klass är en abstraktion av ett sådant begrepp, och innehåller både information och funktionalitet. Programmet kan ses som en uppsättning samverkande och interagerande objekt som vart och ett är av en viss typ/sort, de tillhör en viss klass.
 Inkapsling - Ett objekts exakta beteende och funktion är dold för omvärlden. Varje klass är en abstraktion och visar ett gränssnitt mot omvärlden som specificerar hur andra klasser får interagera med den. Detta garanterar att alla förändringar av ett objekt sker genom programkod som tillhör objektets klass. Ett visst objekt kan inte påverka ett annat objekt på annat sätt än genom detta objekts gränssnitt.
 Arv – Klasserna och begreppen är inte oberoende av varandra, utan kan i många fall ses som en kedja av sammanhängande begrepp, där vissa begrepp är allmänna och generella, medan andra är specialfall av de allmänna begreppen. Till exempel kan ett programsystem inom bankvärlden hantera det allmänna begreppet/klassen konto, men även specialfall som inlåningskonto, lönekonto, konto med kreditmöjlighet o.s.v. På så sätt tillhör ett visst objekt inte bara en klass utan en hierarki av klasser med ökande abstraktionsgrad. Funktionalitet som är gemensam för alla specialfallen, programmeras i den gemensamma "överklassen" och endast det som särskiljer specialfallet programmeras i den specialiserade "underklassen". En underklass ärver egenskaper och funktionalitet av den överklass den tillhör.
 Polymorfism – I en grupp av underklasser finns funktionalitet som har yttre likheter mellan klasserna, men som måste programmeras på olika sätt beroende på vilken av underklasserna det gäller. Gränssnittet blir gemensamt för alla underklasserna, och definieras i överklassen, men den verkställande programkoden finns i respektive underklass. Ett visst objekt som använder andra objekt behöver ofta inte bry sig om vilket specialfall av objekt det är fråga om utan använder endast det gemensamma gränssnittet definierat av överklassen, och är okänsligt för mängden av specialfall som råkar finnas.

Historia 
OOP-konceptet tillkom på slutet av 1960-talet genom norrmännen Kristen Nygaard och Ole-Johan Dahls arbete med programspråket Simula. För detta fick de båda Turingpriset 2001. 

Delvis har OOP inneburit ett paradigmskifte inom programmering, och kan på så sätt jämföras med till exempel strukturerad programmering, som lanserades i slutet av 1970-talet. Väsentligen innebär OOP ett ökat fokus på de data och begrepp som används, snarare än de processer som ska genomföras med dessa data.

OOP har tidvis använts, och missbrukats, som ett marknadsföringsbegrepp, och har då fått täcka flera olika metoder att modularisera och dela upp program. Beroende på vilket programmeringsspråk som har använts, har olika detaljer i och tolkningar av de grundläggande begreppen betonats och hävdats vara väsentliga. Det har till exempel förekommit diskussioner huruvida multipelt arv är nödvändigt för OOP, och om så kallad "dynamisk bindning" eller "sen binding" krävs för att uppnå de eftersträvade fördelarna med OOP. Begreppet Object-Based Programming (istället för Object-Oriented Programming, OOP) har myntats för programmeringsspråk som inte stöder alla delar i OOP-paradigmen t.ex. 1983 ISO-standarden av Ada (1995 blev Ada världens första ISO-standardiserade objektorienterade programmeringsspråk).

Programmeringsspråk 
Det går att programmera objektorienterat i en mängd olika programmeringsspråk. Nedan listas de mest välkända programmeringsspråken som stödjer objektorientering.

Källor 

Programmeringsparadigm
Objektorienterad programmering