Objektorienterad programmering
Från Wikipedia
Objektorienterad programmering (Object Oriented Programming, OOP) är en programmeringsmetod i vilken ett program är uppbyggt av en uppsättning objekt som interagerar med varandra. De ursprungliga idéerna i metoden uppstod i slutet av 1960-talet i programspråk för simulering (objekt, inkapsling), och byggdes på under mitten och slutet av 1980-talet (arv). 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 |
[redigera] 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.
[redigera] 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.
[redigera] 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.
[redigera] 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 modifera koden. I praktiken väljer man ofta ett mellanting mellan "renlärig" objektorienterad programmering och enklare traditionell programmering.

