Eksamenssett logo
eksamenssett.noTren målrettet
  • Ungdomsskole/VGS
  • Høyskole
  • Ressurser
  • Privatundervisning
  • Kontakt
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
  • Privatundervisning
  • Kontakt
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
  • Privatundervisning
  • Kontakt
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
  • Privatundervisning
  • Kontakt
  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
  • Testing og feilsøking
  • Delegering og komposisjon
  • Observatør-observert
  • Funksjonelle grensesnitt og streams
  • Iteratorer og sortering
  • Filbehandling og I/O
  • JavaFX og FXML
  • Eksamensstrategi
  • Formelark

Introduksjon

Denne studieguiden dekker pensum i TDT4100 Objektorientert programmering ved NTNU (7,5 studiepoeng): klasser og objekter, innkapsling, arv og polymorfisme, grensesnitt og abstrakte klasser, generiske typer og samlinger, iteratorer og sortering, unntakshåndtering, delegering og komposisjon, observatør–observert, funksjonelle grensesnitt og streams, filbehandling og I/O, JavaFX/FXML samt testing og feilsøking.

Innholdet er kalibrert mot 26 ekte eksamenssett fra 2005 til 2021 (ordinær og kontinuasjon), og vektleggingen under følger de delprosentene som står på oppgavesettene selv. Faglig ansvarlig i det meste av perioden har vært Hallvard Trætteberg.

Eksamen er en 4-timers eksamen (kl. 9.00–13.00). Fram til og med 2017 var den en papireksamen med hjelpemiddelkode C — kun én Java-lærebok (2013–2017 kun Big Java av Cay S. Horstmann). Fra 2018 leveres eksamen som et kodeskjelett med javadoc, og fra 2020 gjennomføres den digitalt i utviklingsmiljø med JUnit-tester. Uansett form må du kunne skrive korrekt Java-syntaks selv og lese andres kode kritisk.

Det finnes ingen flervalgsoppgaver. Alt er av fire typer: (1) skriv ferdig en klasse eller metode i et gitt skjelett, (2) «forklar med tekst og/eller kode hvordan du vil …», (3) tegn objektdiagram, objekttilstandsdiagram, sekvensdiagram eller klassediagram, og (4) finn og rett de plantede feilene i gitt kode. Hvert sett bygger étt gjennomgående domene — et spisested, en familie, en busstur, et terningspill, et akuttmottak, sykkelutleie, et kjøkken, et vaksinestudie — opp del for del.

Typisk oppbygning på nyere sett (2018–2021):

  • Klasser, innkapsling og samlinger (20–40 %): verdiklasser med private final-felt, konstruktør som validerer med IllegalArgumentException, get/set, samlinger deklarert mot List/Collection/Map, toveis objektstrukturer.
  • Grensesnitt, arv og delegering (20–35 %): felles kode opp i abstrakt superklasse, eller — oftere — et delegat-felt av grensesnitt-type som kan byttes i kjøretid.
  • Observatør–observert (15–20 %): lyttergrensesnitt, lytterliste, addLytter/fjernLytter og en privat fyrAv-metode kalt fra alle endringsmetoder. Dette er det tyngst vektede enkelttemaet på nyere eksamener.
  • Funksjonelle grensesnitt og streams (10–15 %): Predicate, Supplier, Comparator, lambda og metodereferanser, og å skrive om en løkke til en stream-kjede.
  • Fil/IO (10–25 % når det kommer): les fra InputStream med Scanner, bygg objektstruktur med finn-eller-opprett, begrunn unntaksvalget.
  • JavaFX/FXML (6–15 %): kontrollerklasse med @FXML-felt som lytter på modellen og oppdaterer visningen.
  • Testing (5–25 %): skriv JUnit-tester som dekker grensetilfeller, eller tester som avslører en feil i gitt kode.

Faste triks som gjentar seg: private static int teller for automatiske løpenummer, innkapsling av et uforanderlig delobjekt ved å lage et nytt objekt i setteren, Comparable for den naturlige ordningen kombinert med Comparator for en alternativ, og Supplier i konstruktøren for å gjøre en tilfeldig klasse testbar.

Lønnsom strategi: les hele settet før du starter — delene bygger på hverandre — og husk at du kan bruke metoder fra tidligere deler selv om du ikke fikk dem helt riktige. Skriv heller en delvis løsning enn ingenting.

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