FJS26 · V46 · KURSSTART

Programmerings-
paradigm
och OOP

Första passet i Avancerad frontendutveckling och TypeScript.

Chas Academy · Tisdag 10 november 2026


Idag

00Kursstart01Varför OOP, och varför nu?02Vad är ett paradigm?03Objekt och klasser04OOP:s fyra principer05Klasser i JavaScript06Efter passet
PROGRAMMERINGSPARADIGM OCH OOP2 / 41
00

Kursstart

Avancerad frontendutveckling och TypeScript, 9 november – 3 januari.

KURSSTART


Kursen i fyra delar

  • v46–48: JavaScript på djupet. Paradigm, OOP och funktionell stil, verktygen (Node, npm, Vite, ESLint) och asynkron JavaScript.
  • v49–50: TypeScript. Typer, unions och narrowing, type guards, generics och data utifrån.
  • v51: Projektarkitektur. Lager, beroenden, klient och server, och projektstart.
  • Jul och nyår: projektet i grupp. Distansföreläsning och handledning finns. Redovisning måndag 4 januari.
PROGRAMMERINGSPARADIGM OCH OOP4 / 41

KURSSTART


Examinationer

u04 · 26 nov

Skriftlig tentamen och praktiskt prov i JavaScript. Quiz kl. 10.00, praktiskt prov 13.00–16.00. Kursmål 1, 2, 3 och 6.

u05 · 10 dec

Bedömd kodgranskning. Granska och refaktorera TypeScript-kod på plats. Kursmål 10.

u06 · 3 JAN

Individuell uppgift i TypeScript. Släpps 3 december. Kursmål 4 och 9.

u07 · Projekt · 4 jan

Projektarbete i grupp med muntlig presentation. [kursmål]

PROGRAMMERINGSPARADIGM OCH OOP5 / 41
”

Idag och i morgon: kursmål 3. Redogöra för programmeringsparadigm, funktionell och objektorienterad programmering, och när varje paradigm är lämpligt.

Prövas på quizet 26 november

01

Varför OOP,
och varför nu?

VARFÖR NU?


Har vi bytt fot?

Förra veckan skulle vi inte ändra arrayer på plats. Idag skriver vi en klass som gör just det.

Förra veckan: immutable

const addTodo = (todos, todo) =>
  [...todos, todo];

const next = addTodo(todos, 'Handla');
// todos är orörd

Idag: ett objekt som ändrar sig själv

class TodoList {
  #todos = [];

  add(todo) {
    this.#todos.push(todo);
  }
}

list.add('Handla');
PROGRAMMERINGSPARADIGM OCH OOP8 / 41
”

Det är inte ett nytt regelbyte. Det är två svar på samma fråga: var bor datan, och vem får ändra den?

VARFÖR NU?


Två sätt att hantera förändring

Funktionell stildatan skickas in, en ny kopia kommer utabtodosadd()abtodos är orördabcny arrayObjektorienteratdatan bor i objektet, metoderna ändrar denlistabc#todosadd()remove()list.add('c')
PROGRAMMERINGSPARADIGM OCH OOP10 / 41

VARFÖR NU?


Ni använder redan objekt från klasser

Varje gång ni skriver new skapar ni en instans av en klass.

  • new Date() för datum och tid
  • new Error('...') när något går fel, och throw
  • new URLSearchParams() och new URL() för adresser
  • new AbortController() för att avbryta en fetch
  • new Map() och new Set()
  • document.createElement('li') ger en instans av HTMLLIElement
PROGRAMMERINGSPARADIGM OCH OOP11 / 41

VARFÖR NU?


Varför lära sig OOP när JavaScript går mot funktionell stil?

  • Det är ett kursmål (3 och 6) och prövas på u04.
  • Ni kommer att läsa klasser: webbläsarens API:er, bibliotek i Node, Angular och NestJS.
  • Ni förstår this och new, som annars är mystiska.
  • TypeScript har mer stöd för klasser än JavaScript, till exempel private och implements.
  • Det ger bredd: många språk ni kan möta senare, som Java och C#, är byggda kring klasser.
PROGRAMMERINGSPARADIGM OCH OOP12 / 41
02

Vad är ett
paradigm?

Programmeringsparadigm

Ett sätt att tänka kring och strukturera kod: en uppsättning principer för hur ett problem delas upp och var datan bor.

  • Det finns alltid flera sätt att lösa ett problem.
  • Inget paradigm är bättre i sig. De har olika fördelar, och man resonerar och felsöker på olika sätt.
  • Två av de stora är objektorienterad och funktionell programmering, OOP och FP.
PROGRAMMERINGSPARADIGM OCH OOP14 / 41

PARADIGM


JavaScript är ett multiparadigmspråk

Samma uppgift tre gånger: summera priset på varorna som finns i lager.

Imperativt

Steg för steg: hur det ska göras.

let total = 0;
for (const p of products) {
  if (p.inStock) {
    total += p.price;
  }
}

Funktionellt

Beskriv vad du vill ha.

const total = products
  .filter((p) => p.inStock)
  .reduce(
    (sum, p) => sum + p.price,
    0,
  );

Objektorienterat

Data och beteende i ett objekt.

const cart = new Cart(products);

cart.total();
PROGRAMMERINGSPARADIGM OCH OOP15 / 41

PARADIGM


Varför finns paradigm?

  • Ostrukturerad kod → strukturerade principer (OOP, FP) → fler mönster och principer.
  • Varje paradigm inför begränsningar, och de finns till för att minska buggar, göra koden lättare att underhålla och strukturera komplexitet.
  • Det handlar om designval, inte om rätt eller fel sätt att koda.
PROGRAMMERINGSPARADIGM OCH OOP16 / 41

PARADIGM


När passar vad?

OOP

Saker med eget tillstånd som lever en stund och ändras: en spelare, en kortlek, en varukorg, en anslutning.

Funktionell stil

Data som omvandlas: listor som filtreras, sorteras och räknas om. Lätt att testa, eftersom samma indata alltid ger samma utdata.

Imperativt

Korta, enkla steg, och när du behöver full kontroll över hur något görs, till exempel en loop som ska avbrytas i förtid.

PROGRAMMERINGSPARADIGM OCH OOP17 / 41
”

De flesta moderna JavaScript-projekt är en hybrid av OOP och funktionell stil, men trenden har gått mot mer funktionell stil.

Funktionell stil tar vi i morgon

03

Objekt och
klasser

OOP oavsett programspråk.

Objektorienterad programmering

Ett paradigm där koden byggs av objekt som efterliknar saker i verkligheten. Varje objekt har egenskaper (data) och beteenden (metoder).

  • Precis som verkligheten består av objekt, används objekt för att bygga en förenklad modell av den.
  • En klass är mallen. Ett objekt skapas utifrån klassen.
PROGRAMMERINGSPARADIGM OCH OOP20 / 41

OBJEKT OCH KLASSER


Tänk dig en katt

Egenskaper: vad katten harsvansfluffigbra balansBeteenden: vad den görhoppa()jama()I OOP: egenskaper = data i objektet, beteenden = metoder
PROGRAMMERINGSPARADIGM OCH OOP21 / 41

OBJEKT OCH KLASSER


En klass, många instanser

class Kattfärgsvansjama()hoppa()mallennewinstansinstansinstansinstansMed en mall kan du skapa hur många instanser som helst
PROGRAMMERINGSPARADIGM OCH OOP22 / 41

OBJEKT OCH KLASSER


Klass och instans i kod

Klassen: mallen

class User {
  constructor(username, email) {
    this.username = username;
    this.email = email;
  }

  login() { /* ... */ }
  createPost(text) { /* ... */ }
}

Instanserna: objekten

const fritiof = new User(
  'fritiof',
  'fritt@tech.com',
);
const saga = new User(
  'saga',
  'saga@tech.com',
);

fritiof.login();
PROGRAMMERINGSPARADIGM OCH OOP23 / 41
04

OOP:s fyra
principer

FYRA PRINCIPER


Fyra principer i OOP

Abstraktion

Visa bara det som behövs för att använda objektet, och göm resten.

Inkapsling

Håll ihop data och metoderna som rör den, och skydda datan utifrån.

Arv

Låt en klass få en annan klass egenskaper och metoder, så att du slipper upprepa dig.

Polymorfism

Olika klasser har samma metod, men var och en gör den på sitt sätt.

PROGRAMMERINGSPARADIGM OCH OOP25 / 41

ABSTRAKTION


Abstrahera bort komplexitet

dumobilenanvänderDet du serhemknappvolymladdningDet som är doltprocessorbatteriantennoperativ-systemdrivrutiner
PROGRAMMERINGSPARADIGM OCH OOP26 / 41

INKAPSLING


Allt som hör ihop i samma kapsel

klassenegenskapermetoderDatan och metoderna som rör den hålls ihop i ett objekt
PROGRAMMERINGSPARADIGM OCH OOP27 / 41

ARV


Ärv i stället för att upprepa

AnimalFishBirdEagleParrotUserAdminusernameemaillogin()+ permissions+ deleteUser()Admin är en User, med lite till
PROGRAMMERINGSPARADIGM OCH OOP28 / 41

POLYMORFISM


Samma anrop, olika svar

Shapearea()Circlearea() = π · r²Rectanglearea() = b · hTrianglearea() = b · h / 2shapes.map((shape) => shape.area())Koden som anropar behöver inte veta vilken form det är
PROGRAMMERINGSPARADIGM OCH OOP29 / 41
05

Klasser i
JavaScript

KLASSER I JAVASCRIPT


OOP i JavaScript

  • JavaScript är inte ett OOP-språk i grunden, till skillnad från Java eller C#. Det är prototypbaserat.
  • Sedan ES6 (2015) finns class, med ungefär samma syntax som i andra språk.
  • Under ytan är det fortfarande prototyper. class gör dem lättare att skriva och läsa.
PROGRAMMERINGSPARADIGM OCH OOP31 / 41

KLASSER I JAVASCRIPT


Din första klass

Klassen

class Song {
  constructor(title, artist) {
    this.title = title;
    this.artist = artist;
  }

  play() {
    console.log(
      `Spelar ${this.title}`,
    );
  }
}

Användningen

const song = new Song(
  'Dancing Queen',
  'ABBA',
);

song.play();
// Spelar Dancing Queen

song.title; // 'Dancing Queen'
PROGRAMMERINGSPARADIGM OCH OOP32 / 41

KLASSER I JAVASCRIPT


constructor och this

constructor

En metod som körs automatiskt när du skriver new. Den tar emot argumenten och ger objektet dess startvärden.

this

Pekar på objektet som äger koden just nu. I constructor är det det nya objektet. I en metod är det objektet du anropade metoden på: i song.play() är this samma sak som song.

PROGRAMMERINGSPARADIGM OCH OOP33 / 41

Övning

Bygg en Recipe-klass

Skapa en klass för ett recept. Varje recept har en titel, en tidsåtgång, en lista med ingredienser och en lista med instruktioner. Skriv en constructor, metoder som lägger till och tar bort ingredienser och instruktioner, och en metod som skriver ut hela receptet i konsolen. Skapa sedan två recept.

Tid

15 min

Mål

Du kan skriva en klass med constructor, egenskaper och metoder, och skapa instanser av den.

PROGRAMMERINGSPARADIGM OCH OOP34 / 41

INKAPSLING I PRAKTIKEN


Privata fält med #

Med # går fältet inte att nå utanför klassen. Ett get ger läsrätt utan skrivrätt.

Klassen

class BankAccount {
  #balance = 0;

  deposit(amount) {
    if (amount <= 0) return;
    this.#balance += amount;
  }

  get balance() {
    return this.#balance;
  }
}

Utifrån

const account = new BankAccount();
account.deposit(100);

account.balance;      // 100
account.#balance = 1e6;
// SyntaxError
account.deposit(-50);
// ignoreras
PROGRAMMERINGSPARADIGM OCH OOP35 / 41

ARV I PRAKTIKEN


extends och super

Föräldern och barnet

class Car {
  constructor(brand) {
    this.brand = brand;
  }
  present() {
    return `En ${this.brand}`;
  }
}

class Model extends Car {
  constructor(brand, model) {
    super(brand);
    this.model = model;
  }
}

Så fungerar det

extends ger Model alla metoder från Car. super(brand) kör förälderns constructor, och den måste köras innan du använder this.

const car = new Model('Volvo', 'EX30');
car.present(); // 'En Volvo'
PROGRAMMERINGSPARADIGM OCH OOP36 / 41

STATISKA METODER


static: metoder på klassen själv

En statisk metod anropas på klassnamnet, inte på en instans. Den passar för saker som rör flera instanser, eller ingen alls.

Klassen

class Square {
  constructor(side) {
    this.side = side;
  }

  static larger(a, b) {
    return a.side >= b.side ? a : b;
  }
}

Anropet

const a = new Square(3);
const b = new Square(5);

Square.larger(a, b); // b
a.larger(a, b);
// TypeError
PROGRAMMERINGSPARADIGM OCH OOP37 / 41
”

OOP gömmer mutationen bakom metoder. Funktionell stil undviker den helt. Båda är sätt att ha kontroll över vem som ändrar datan.

06

Efter passet

EFTER PASSET


Självstudier: pokerövningen

Skapa klasserna Card, Deck och Player med ES6-klasser. Repo: github.com/chasacademy-sandra-larsson/js--oop-poker

  • Del 1–4: en kortlek med 52 kort, blanda, dela ut till Slim och Luke, slänga och dra nya kort.
  • Del 5: en Dealer som äger kortleken. Det är komposition.
  • Del 6: en klass med statiska metoder som utvärderar händerna.
  • Del 7–8: en Game-klass med en spelloop. Frivilligt: riktig pokervärdering, betting och ett gränssnitt.
  • Hinner du inte allt: gör del 1–4 till workshoppen på torsdag.
PROGRAMMERINGSPARADIGM OCH OOP40 / 41

EFTER PASSET


Mer att läsa och öva

  • Övning: freeCodeCamp, avsnittet om Classes.
  • Video: Day 30: From Zero to OOP Hero with JavaScript ES6 Classes. Från minut 22 handlar den om arv, getters och setters och privata fält.
  • Fördjupning: JavaScript: The Best of Both Worlds, om OOP och funktionell programmering (Medium).
  • I morgon: Modern JavaScript och funktionell stil.
PROGRAMMERINGSPARADIGM OCH OOP41 / 41