Komplett pensumoversikt for objektorientert programmering ved NTNU — med forklaringer, sentrale begreper, eksamenstips og vanlige fallgruver. Eksamensoptimalisert basert på tidligere eksamener.
Innhold
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):
private final-felt, konstruktør som validerer med IllegalArgumentException, get/set, samlinger deklarert mot List/Collection/Map, toveis objektstrukturer.addLytter/fjernLytter og en privat fyrAv-metode kalt fra alle endringsmetoder. Dette er det tyngst vektede enkelttemaet på nyere eksamener.Predicate, Supplier, Comparator, lambda og metodereferanser, og å skrive om en løkke til en stream-kjede.InputStream med Scanner, bygg objektstruktur med finn-eller-opprett, begrunn unntaksvalget.@FXML-felt som lytter på modellen og oppdaterer visningen.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.
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.
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 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 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.
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 %).
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() gir tekstrepresentasjonen som brukes automatisk ved System.out.println(obj) og ved strengkonkatenering med +. Et program startes via public static void main(String[] args).
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 } — klassedefinisjonpublic Navn(...) { this.felt = parameter; } — konstruktor (ingen returtype)this(...) som første linje — kall til annen konstruktor i samme klasseprivate static int teller = 1; + this.num = teller++; — automatisk lopenummerpublic static void main(String[] args) — programmets startpunktVanlige feil
Eksamenstips
Laster...