Nyckelord: objektorienterad programmering, klasser, objekt, konstruktor, arv, interface
Vi ska i den här artikeln försöka ge en sammanfattning och överblick av de delar av objektorienterad programmering som vi har gått igenom i det här kapitlet.
Vad är objektorienterad programmering?
Objektorienterad programmering, även känt som OOP, är en programmeringsmetod baserad på en hierarki av klasser och samarbetande objekt. Klasser och objekt utgör grunden när man utvecklar stora program eftersom ett program i själva verket består av flera små byggstenar (objekt) som tillsammans bygger upp programmet.
De delar vi har gått igenom i det här kapitlet är:
Vid det här laget har du säkert redan förstått varför objektorienterad programmering är så kraftfullt. Varje objekt (instans av klass) lagrar enbart information som är relevant för sitt eget användningsområde. Det gör att oönskad påverkan emellan två objekt är mycket liten. Du har i detta kapitel sett hur vi kan återanvända kod (arv) som medför möjligheten att göra mer generella klasser.
Klasser i Java
En klass i Java beskriver de attribut och egenskaper som ett objekt ska ha. Klassen fungerar som enmall som beskriver hur någonting är (attribut) och vad den gör (egenskaper).
Objekt har egna instansvärden men kan dela referenser och bero på andra objekt. Inkapsling döljer interna detaljer och styr hur tillstånd får ändras; den garanterar inte oberoende.
Syntax: Deklarera en klass i Java
Syntaxmall: ersätt platshållarna med konkreta namn, typer och värden.
class KlassNamn {
// Attribut - Ange en eller flera som klassen ska ha
Datatyp namn;
// Egenskaper - Definiera alla metoder som klassen ska ha
void metodnamn(){
// operation/operationer
}
}
Kom ihåg att programmets fil måste ha samma namn som klassen och att det är god syntax att klassnamnet börjar med stor bokstav. Vill du läsa mer om klasser i Java kan du göra det här.
Objekt i Java
Objekt har egna instansvärden men kan dela referenser och bero på andra objekt. Inkapsling döljer interna detaljer och styr hur tillstånd får ändras; den garanterar inte oberoende.
Praxis när man instansierar ett objekt är att namnet på objektet börjar med liten bokstav.
Syntax: Deklarera ett objekt i Java
Syntax för att skapa ett objekt
Syntaxmall: byt ut platshållarna mot konkreta namn, typer och värden.
// Syntax för objekt
KlassNamn objektNamn = new KlassNamn(datatyp parameter1, …);
Innanför parentesen så anger vi de inparametrar som konstruktorn behöver. Detta är alltså de attributen som objektet ska få. Om den konstruktor som klassen har inte kräver några inparametrar för att skapa ett objekt lämnar man helt enkelt parentesen tom. Vill du läsa mer om objekt i Java kan du göra det här.
Konstruktor i Java
När man har en klass som man vill skapa ett objekt från så anropar man den klassens konstruktor, så det är alltså med andra ord konstruktorn som används för att instansiera ett objekt från en klass. Vi skapar en konstruktor genom att ange klassens namn – eftersom en konstruktor alltid måste ha samma namn som klassen – följt av de inparametrar vi vill att konstruktorn ska ha. Vidare, det är viktigt att komma ihåg att en konstruktor inte kan returnera något. Avslutningsvis, nyckelordet this hänvisar till det aktuella objektet i en metod eller konstruktor. Vad det innebär är att om man använder this så tilldelar man instansvariablerna de värdena som kommer från konstruktorn.
Syntax: Deklarera en konstruktor i Java
Viktigt att komma ihåg att konstruktorn måste ha samma namn som klassen.
Syntaxmall: ersätt platshållarna med konkreta namn, typer och värden.
class KonstruktorEx {
// Konstruktorn. namn1 och namn2 är inparametrarna av en viss datatyp
KonstruktorEx(datatyp namn1, datatyp namn2){
// "this" syftar till nuvarande objektets klassvariabel
this.namn1 = namn1;
this.namn2 = namn2;
// osv..
}
}
Vill vi skapa en konstruktor utan några inparametrar så lämnar vi helt enkelt parentesen efter konstruktorns namn tom. Om du vill läsa mer om hur en konstruktor i Java fungerar och hur man använder den kan du göra det här.
Arv i Java
Arv (engelska: inheritance) använder man i Java för att återanvända kod från andra klasser. När man arbetar med arv i Java brukar man dela in det i två typer av klasser. Det första är en så kallad subklass, eller child, som är en klass som ärver från en annan klass. Det andra är vad som kallas för en superklass, eller parent, och är den klass som arvet sker från.
Det som sker vid ett arv är att subklassen får samma uppsättning av instansvariabler och metoder som superklassen, men det är även möjligt att lägga till nya metoder och instansvariabler om så önskas.
Syntax: Deklarera arv i Java
För att skapa ett arv i Java använder man nyckelordet extends följt av namnet på den klass som du vill ärva ifrån. Nyckelordet extends anger att du skapar en ny klass som härrör från en befintlig klass.
Syntaxmall: ersätt platshållarna med konkreta namn, typer och värden.
class SubClassNamn extends SuperClassNamn
{
// Kod som tillhör klassen
}
Nyckelordet super
Avslutningsvis, vi använder nyckelordet super för att kalla på konstruktorn i superklassen och det är med hjälp av nyckelordet super som vi kan referera till variabler i superklassen från subklassen.
För att läsa mer om arv i Java, klicka här.
Interface i Java
Ett interface är en separat referenstyp som beskriver ett kontrakt. Det kan deklarera abstrakta metoder som en konkret klass måste implementera, men kan även ha default- och statiska metoder med implementation samt privata hjälpmetoder.
Vanliga metoddeklarationer utan kropp i ett interface är publika och abstrakta. Moderna interface kan också ha metoder med implementation. Ett interface har inga konstruktorer.
Syntax: Skapa ett interface i Java
Man skapar ett interface genom att använda det reserverade ordet interface.
interface NamnInterface {
// Metoder tillhörande interface
}
Syntax: Skapa en klass från ett interface i Java
För att sedan skapa en klass från ett interface skriver man klassens namn följt av det reserverade ordet implements och slutligen namnet på det interface som klassen ska hämta sina egenskaper från.
interface NameInterface {
// Metoder tillhörande interface
}
class NameOfClass implements NameInterface {
// Kod tillhörande klassen
}
Fördelar med Objektorienterad programmering
Låt oss avsluta det här kapitlet med att titta på några av de fördelarna som vi anser att objektorienterad programmering har
- Återanvända kod. Med hjälp av Arv i Java kan vi återanvända kod från andra klasser. Många gånger vill man återanvända kod från klasser man redan har programmerat. Istället för att programmera liknande klasser flera gånger, kan man ärva kod från en annan klass.
- Flexibilitet. Tack vare att olika objekt kan använda samma funktioner så kan objekt i olika klasser använda samma metoder. Exempelvis, en metod för att mäta distans så kan den metoden användas för en bil, men också för en människa som promenerar.
- Enklare felsökning. När vi arbetar med objektorienterad programmering så blir det i de flesta fallen enklare att hitta var felet har uppstått. Objekt är fristående, och varje del av funktionalitet gör sin egen sak medan de lämnar de andra delarna ensamma. Till exempel, vi har ett problem med vårt objekt för en bil. Det är mest troligt att felet ligger i, eller kopplat till, klassen vi skapat för bilen.
- Effektivare problemlösning. Tack vare att vi kan dela upp våra program i objekt och klasser så kan vi bryta ned problemet i mindre delar (objekt). Vi kan sedan lösa de mindre problemen, ett objekt i taget. Har vi ett stort komplext problem kan vi bryta ned det i mindre delar och lösa dem var för sig.
Avslutningsvis, för att läsa ännu mer om objektorienterad programmering i Java så finns det rikligt med information på Oracle hemsida.