Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Skolenyttig
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossPrivatundervisningPriserSlik bruker du sidenFAQPersonvernVilkårAngrerettKontaktKI-deklarasjon

© 2026 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med KI og kvalitetssikres kontinuerlig – av modellene, og ved at våre tusenvis av brukere kan melde fra om feil. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Org.nr. 913 117 387 (Foretaksregisteret) · Aksel Olsens vei 10B, 1597 Moss · Ikke MVA-registrert

Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Skolenyttig
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossPrivatundervisningPriserSlik bruker du sidenFAQPersonvernVilkårAngrerettKontaktKI-deklarasjon

© 2026 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med KI og kvalitetssikres kontinuerlig – av modellene, og ved at våre tusenvis av brukere kan melde fra om feil. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Org.nr. 913 117 387 (Foretaksregisteret) · Aksel Olsens vei 10B, 1597 Moss · Ikke MVA-registrert

Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Skolenyttig
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossPrivatundervisningPriserSlik bruker du sidenFAQPersonvernVilkårAngrerettKontaktKI-deklarasjon

© 2026 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med KI og kvalitetssikres kontinuerlig – av modellene, og ved at våre tusenvis av brukere kan melde fra om feil. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Org.nr. 913 117 387 (Foretaksregisteret) · Aksel Olsens vei 10B, 1597 Moss · Ikke MVA-registrert

Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Skolenyttig
  1. Hjem
  2. Høyskole
  3. NTNU
  4. TDT4100
  5. Studieguide
TDT4100 · NTNU

Studieguide for TDT4100 Objektorientert programmering

Komplett pensumoversikt for objektorientert programmering ved NTNU — med forklaringer, sentrale begreper, eksamenstips og vanlige fallgruver. Eksamensoptimalisert basert på tidligere eksamener.

Innhold

  • Introduksjon
  • Klasser og objekter
  • Innkapsling og tilgangskontroll
  • Arv og polymorfisme
  • Grensesnitt og abstrakte klasser
  • Generics og collections
  • Unntakshåndtering
  • Designmønstre
  • Testing og feilsøking
  • Eksamensstrategi
  • Formelark

Introduksjon

Denne studieguiden dekker pensum i TDT4100 Objektorientert programmering ved NTNU. Kurset gir en grundig innføring i objektorientert programmering med Java: klasser og objekter, innkapsling, arv og polymorfisme, grensesnitt og abstrakte klasser, generiske typer og collections, unntakshåndtering, sentrale designmønstre (særlig observatør og delegering) samt testing og feilsøking (7,5 studiepoeng).

Eksamen er en 4-timers skoleeksamen (typisk kl. 9.00–13.00) der det eneste tillatte hjelpemiddelet historisk har vært læreboka Big Java av Cay S. Horstmann (hjelpemiddelkode C). Du må derfor kunne skrive korrekt Java-syntaks fra minnet og lese andres kode kritisk.

Oppgavesettet har en svært stabil flerdelt struktur (verifisert mot eksamenene 2013–2017, faglærere Hallvard Trætteberg / Rune Sætre). Et typisk sett bygger ett gjennomgående domene (f.eks. et spisested, en familie, en busstur, et skattesystem, en serietabell) opp gjennom delene:

  • Del 1 – Teori / typer / innkapsling (15–30%): Modifikatorer (private, final, static), uttrykkstyper, casting, og hvorfor felt er private. Implementer verdiklasser med konstruktør og get-metoder.
  • Del 2 – Klasser og collections (30–55%): Den store implementasjonsoppgaven. Felt deklarert som List/Collection/Map, konstruktører, metoder med løkker, validering med unntak, sortering med Comparable/Comparator.
  • Del 3 – Arv, grensesnitt og delegering (10–25%): Trekk felles kode opp i abstrakt superklasse, lag subklasser, eller bytt arv mot delegering via et grensesnitt.
  • Del 4 – Observatør / IO / diverse (10–25%): Gjør en egenskap observerbar (lytter-grensesnitt + fire-metode), lesing/skriving til strømmer, funksjonelle grensesnitt og lambda, og JUnit-testing.

Faste mønstre som går igjen på (nesten) hvert sett:

  • Innkapsling med private final-felt + konstruktørvalidering som kaster IllegalArgumentException — kommer hvert år.
  • Abstrakt superklasse + subklasser med super(...) i konstruktør og @Override — kommer hvert år.
  • Grensesnitt + delegering (bytt ut implementasjon i en feltvariabel) — kommer hvert år.
  • Observatør–observert (lytterliste, add/remove-lytter, kringkast endring) — kommer ofte i siste del.
  • Funksjonelt grensesnitt (én abstrakt metode) implementert med lambda — kommer ofte.
  • JUnit-test av en metode med assertEquals/assertTrue og riktig opprigging — kommer ofte.
  • static-teller for automatiske løpenummer, og static hjelpemetoder uten objekttilstand.

Lønnsom strategi: les hele settet før du starter (oppgavene bygger på hverandre), og husk at du kan bruke metoder fra tidligere deler selv om du ikke fikk dem helt riktige.

Klasser og objekter

Eksamensrelevant

Hvordan definere klasser med felt, konstruktører og metoder i Java, skille klasse fra objekt, bruke this, static-medlemmer og toString, og velge riktig datatype for feltene.

Klasse og objekt

En klasse er en mal som beskriver hvilke data (felt/instansvariabler) og hvilken oppførsel (metoder) objektene skal ha. Et objekt er en konkret instans opprettet med new, med egne verdier i feltene. Klassen er oppskriften, objektet er kaka.

public class Group {
    private final int guestCount;   // felt

    public Group(int guestCount) {  // konstruktor
        this.guestCount = guestCount;
    }

    public int getGuestCount() {    // metode
        return guestCount;
    }
}

Konstruktøren

Konstruktøren har samme navn som klassen og ingen returtype. Den kalles automatisk av new og skal sette objektet i en gyldig starttilstand. Du kan ha flere konstruktører (overlasting), og en kan kalle en annen med this(...) som første linje:

public Question(String question, String answer, String... options) {
    this(question, answer, Arrays.asList(options)); // delegerer
}

this-nokkelordet

this peker på objektet metoden kjører for. Vanligst brukt for å skille parameter fra felt med samme navn: this.guestCount = guestCount;. Kan også returneres for kjeding og brukes til this(...)-kall.

Velg riktig datatype for feltene

Eksamen vektlegger at du begrunner typevalg. Eksempler fra tidligere sett: et identifikasjonsnummer kan ligge i en String (enkel validering, plass til ledende nuller), pengebeløp i long (kan overstige int-grensen på ca. 2,1 mrd.), en prosent i double (ikke nødvendigvis heltall, f.eks. 3,5 %).

static — knyttet til klassen, ikke objektet

Et static-felt deles av alle objekter. Et klassisk eksamenstriks er en global teller for automatiske løpenummer:

public class Table {
    private static int tableCounter = 1; // delt teller
    private final int num;
    private final int capacity;

    public Table(int capacity) {
        this.num = tableCounter++;   // forste bord far 1, neste 2 ...
        this.capacity = capacity;
    }

    public int getNum() { return num; }
}

static-metoder kalles uten objekt (Klasse.metode()) og passer for hjelpemetoder som ikke leser eller endrer objekttilstand, og for valueOf-/fabrikkmetoder.

toString og hovedprogram

toString() gir tekstrepresentasjonen som brukes automatisk ved System.out.println(obj) og ved strengkonkatenering med +. Et program startes via public static void main(String[] args).

Eksempel i eksamensstil — verdiklasse med automatisk løpenummer

Lag en klasse Konto der hvert objekt får et unikt, automatisk kontonummer fra og med 1000, og der saldoen settes ved opprettelsen og ikke kan endres direkte utenfra.

public class Konto {
    private static int nesteNummer = 1000;
    private final int kontonummer;
    private final double startsaldo;

    public Konto(double startsaldo) {
        this.kontonummer = nesteNummer++;
        this.startsaldo = startsaldo;
    }

    public int getKontonummer() { return kontonummer; }
    public double getStartsaldo() { return startsaldo; }

    @Override
    public String toString() {
        return "Konto #" + kontonummer + " (" + startsaldo + " kr)";
    }
}

Her er nesteNummer static (én delt verdi), mens kontonummer og startsaldo er final instansfelt som er unike per objekt.

Nøkkelformler

  • •public class Navn { felt; konstruktor; metoder } — klassedefinisjon
  • •public Navn(...) { this.felt = parameter; } — konstruktor (ingen returtype)
  • •this(...) som første linje — kall til annen konstruktor i samme klasse
  • •private static int teller = 1; + this.num = teller++; — automatisk lopenummer
  • •public static void main(String[] args) — programmets startpunkt
  • •Typevalg: id i String, store beløp i long, prosent/desimaltall i double

Vanlige feil

  • ⚠️Gir konstruktøren en returtype (f.eks. void) — da er det en vanlig metode, ikke en konstruktør
  • ⚠️Glemmer this. når parameter og felt har samme navn — feltet blir aldri satt
  • ⚠️Bruker int til store pengebeløp som kan overstige ~2,1 mrd. — bør være long
  • ⚠️Lar feltet være vanlig (instans) når det skulle vært static (delt teller) — hvert objekt starter da på 1
  • ⚠️Begrunner ikke typevalg — sensor forventer en kommentar om hvorfor du valgte String/long/double

Eksamenstips

  • 💡Del 1 er nesten alltid en verdiklasse: skriv konstruktør + get-metoder, gjør felt private final
  • 💡static-teller for løpenummer er et tilbakevendende triks — øv på Table-/Konto-mønsteret
  • 💡Begrunn datatype-valg eksplisitt i kommentar; det gir poeng på teoridelen
  • 💡Husk at du kan bruke metoder fra tidligere deloppgaver selv om du ikke fikk dem helt riktige

Laster...

Laster…
eksamenssett.noTren målrettet

Komplett samling av eksamensoppgaver og løsninger for norsk skole.

Om ossPrivatundervisningPriserSlik bruker du sidenFAQPersonvernVilkårAngrerettKontaktKI-deklarasjon

© 2026 Eksamenssett.no · Alle rettigheter forbeholdt

Innholdet er utviklet med KI og kvalitetssikres kontinuerlig – av modellene, og ved at våre tusenvis av brukere kan melde fra om feil. Slik jobber vi med kvalitet →

Eksamenssett.no eies og drives av Studenthjelp Privatundervisning AS

Org.nr. 913 117 387 (Foretaksregisteret) · Aksel Olsens vei 10B, 1597 Moss · Ikke MVA-registrert