OOP är ett programmeringsparadigm som organiserar kod runt objekt — instanser av klasser — istället för funktioner och procedurer. Målet är att modellera verklighetens entiteter och relationer på ett sätt som gör koden mer intuitiv, återanvändbar och underhållbar.
Varför OOP?
Innan OOP blev vanligt skrevs de flesta program med procedurell programmering — kod organiserades i funktioner som anropade varandra, och data låg ofta i globala strukturer. Detta fungerar bra för små program, men blir snabbt svårhanterligt när koden växer.
| Procedurellt | Objektorienterat |
|---|---|
| Data och funktioner separerade | Data och beteende samlade i objekt |
| Globalt tillstånd | Varje objekt hanterar sitt eget tillstånd |
struct + fristående funktioner | class med metoder |
| Svårt att utöka utan att ändra | Lätt att utöka via arv och polymorfism |
De fyra grundprinciperna
OOP bygger på fyra pelare som tillsammans möjliggör flexibel och underhållbar kod:
| Princip | Kärnidé |
|---|---|
| Inkapsling | Dölj interna detaljer, exponera bara nödvändiga gränssnitt |
| Arv | Låt en klass ärva egenskaper och beteenden från en annan |
| Polymorfism | Samma gränssnitt, olika implementationer |
| Abstraktion | Fokusera på vad något gör, inte hur |
Dessa principer är inte bara teoretiska — de är grunden för nästan alla designmönster och moderna ramverk.
Ett enkelt exempel
// En klass beskriver vad ett objekt är och kan göra
public class Bok {
private String titel;
private String forfattare;
public Bok(String titel, String forfattare) {
this.titel = titel;
this.forfattare = forfattare;
}
public String beskrivning() {
return titel + " av " + forfattare;
}
}
// Objekt är konkreta instanser av klassen
Bok minBok = new Bok(
"Harry Potter and the Philosopher's Stone",
"J. K. Rowling"
);
System.out.println(minBok.beskrivning()); // "Harry Potter and the Philosopher's Stone av J. K. Rowling"
Här ser vi inkapsling (private-fält, publik metod) och abstraktion (vi anropar beskrivning() utan att veta hur den implementeras internt).
OOP i olika språk
OOP-stödet varierar mellan språk men grundkoncepten är desamma:
| Språk | Klasser | Arv | Interface |
|---|---|---|---|
| Java | class | extends (enkelarv) | interface / implements |
| TypeScript | class | extends | interface / implements |
| PHP | class | extends | interface / implements |
| C# (.NET) | class | : (enkelarv) | interface / : |
| Python | class | (ParentClass) (flerarv) | ABC / @abstractmethod |
| C++ | class | : public Base (flerarv) | Rena abstrakta klasser |
När ska man använda OOP?
OOP passar bäst när du har:
- System med tydliga entiteter (kund, order, produkt)
- Komplexa relationer mellan objekt
- Behov av återanvändbar och utbyggbar kod
- Flera utvecklare som samarbetar
OOP är inte alltid rätt verktyg — enkla script och ren databearbetning blir ofta onödigt komplicerade med klasser och arv.
Fortsätt till Klasser och Objekt för att lära dig mer.
Av Victor Hernandez från Bytebase.se