Objektorienterad programmering
Från Rilpedia
Den här artikeln saknar källhänvisningar. Förbättra gärna artikeln genom att lägga till pålitliga källor (helst fotnoter). Material som inte kan verifieras kan ifrågasättas eller tas bort. (juni 2009) |
Objektorienterad programmering (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 programsprå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.
Innehåll |
Objekt
Ett objekt är en instans av en klass, det vill säga en slags simulering av en företeelse som används inom objektorienterad programmering för att samla data och kod som hör i hop. 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 för 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. T.ex. 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änsnittet 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
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 programsprå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.k. "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 programspråk som Ada som inte stöder alla delar i OOP-paradigmen.
Programspråk
OOP är en metod som kan användas i alla programspråk, men de flesta moderna och populära programspråk har numera inbyggt stöd för konstruktioner som underlättar. Det omvända fungerar dock också; det går utmärkt att programmera icke-objektorienterat i ett OO-språk.
Lista över objektorienterade programspråk:
När OOP inte lämpar sig
Att använda OOP kan vara överdåd. I fallet med ett system för hantering av konton kan OOP vara onödigt om:
- programmet är enkelt
- programmet bara behöver en typ (klass) av "konto" (även om kontona och funktionerna är många)
- typerna är för olika för att utgöra en meningsfull klasshierarki, t.ex. inlåningskonto (pengar), erfarenhetskonto (kompetens), användarkonto (inloggning)
- typerna tvärtom är så pass lika att det räcker med en enda flagga eller tillståndsvariabel för att hantera specialfallen.
I sådana fall kan traditionell strukturerad programmering vara mera kostnadseffektiv. Stora klasshierarkier, med arv i flera nivåer, kan vara svåra att förstå för den som inte skapat hierarkin. Detta medför svårigheten för andra att läsa och modifiera koden. I praktiken väljer man ofta ett mellanting mellan "renlärig" objektorienterad programmering och enklare traditionell programmering.
Se även