Översikt objektorientering
Objekt
Ett objekt är en samling variabler, metoder och algoritmer som "hör ihop" och motsvarar en "sak" i programmet.
Exempel på objekt: Ett svärd, en fiende, en bok, en bana, ett päron, en kund.
Klass
En klass är en ritning, eller en mall, för en kategori av objekt. En klass är inte i sig ett objekt, utan bara en instruktion för hur ett objekt ska se ut och fungera.
Exempel på klasser: Svärd, fiende, bok, bana, päron, kund.
En klass fungerar också som en datatyp, så varje gång kod förväntar sig en datatyp (t.ex. string eller int) kan man istället skriva dit en klass.
Instans
En instans är ett objekt man skapat utifrån en klass.
Klassvariabler och klassmetoder
En klassvariabel är en variabel som ingår i en klass, och en klassmetod är en metod som ingår i en klass.
Alla instanser av en klass får tillgång till alla klassens metoder och egen kopia av alla klassens variabler.
Exempel:
Arv
En klass kan ärva från en annan klass. Det betyder att subklassen får basklassens alla metoder och variabler, men den kan också lägga till egna.
Man brukar också beskriva det som att subklassen är en mer specialiserad version av basklassen – ett exempel på basklass kan vara Weapon
och en subklass till Weapon kan då vara Sword
. Sedan kan Sword agera basklass till LongSword
och ShortSword
. Relationen mellan subklass och basklass är att [subklassen] är en sorts [basklassen], så att ShortWord är en sorts Weapon till exempel.
Alla svärd är då vapen, och har alla metoder etc som ingår i vapen – fast de kan ha egna tillägg, och de kan också delvis fungera annorlunda (se Polymorfism).
Komposition
Man kan också lägga in instanser av en klass i instanser av en annan klass. Detta kallas komposition.
Man brukar också beskriva det som att klassernas relation blir en har-en-relation. En hjälte har ett vapen (klassen Hero har en Weapon-variabel som innehåller instanser av den klassen eller dess subklasser).
Inkapsling
Inkapsling är principen att varje objekt – varje klass – ska sköta sin egen logik. Det innebär att man samlar all kod som hör ihop med ett objekt inuti metoder i objektets klass.
Det innebär också att man har så få variabler, properties och metoder som är publika. Man vill visa upp ett så litet "gränssnitt" mot resten av världen som möjligt.
Framför allt bör man, om man jobbar med inkapsling, inte ha några publika variabler. Istället används properties och metoder för att ändra på variablernas värde.
Anledningen till att man gör detta är dels för att skapa en tydlig struktur, dels minska risken att man gör fel när man skriver kod. Om det inte går att ändra på de privata variablerna direkt så kan man heller inte råka t.ex. ge dem ett felaktigt värde.
Interaktion mellan objekt
När två objekt interagerar direkt med varandra, till exempel när data från ett objekt förs över till ett annat, eller när ett objekt stoppas in som parametervärde in i ett annat objekts metod.
Polymorfism
Polymorfism i objektorientering är när en instans av en subklass lagras i en variabel eller t.ex. en lista vars datatyp är subklassens basklass. Så om man har subklassen Goomba som ärver från Monster, och lagrar en Goomba-instans i en Monster-variabel eller lägger in den i en Monster-lista så använder man polymorfism.
Generiska klasser
Generiska klasser är klasser där datatypen för en eller flera variabler eller metoder inte bestämts, utan avgörs när man skapar en instans av klassen. Ett exempel på färdig generisk klass är List.
Last updated