###Observatør-observert-teknikken og abstrakte klasser Innleveringsfrist Fredag 28. mars kl 0800.
===
Velg og gjennomfør minst én av oppgavene under (du trenger m.a.o. heller ikke for denne øvingen å henge deg opp i hvor mange dekningsgrads- og omfangspoeng hver av oppgavene har):
- AbstractAccount-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/Arv+-+AbstractAccount-oppgave)
- HighscoreProgram-oppgaven (https://www.ntnu.no/wiki/pages/viewpage.action?pageId=70915559)
- StockListener-oppgaven (https://www.ntnu.no/wiki/pages/viewpage.action?pageId=70913886)
Være oppmerksom på at disse oppgavene har noe ulik vanskelighetsgrad og omfang. Alle er (høyst) eksamensrelevante og det anbefales følgelig å ta en titt på, om ikke alle sammen, helst minst én fra hvert av de to temaene (AbstractAccount-oppgaven omhandler abstrakte klasser og HighscoreProgram- og StockListener-oppgaven observatør-observert-teknikken, hvilket også vil være tema for øving 10).
- å lære hva observatør-observert-teknikken er, dens bruksområder og fordeler
- å lære om abstrakte klasser, deres bruksområder og fordeler
- å kunne gjøre definere og implementere et observatørgrensesnitt
- å kunne la en observert klassen forteller dens observatører om endringer
- å kunne samle felles oppførsel til to eller flere subklasser i en felles abstrakt klasse
===
Innleveringsfrist Fredag 21. mars kl 0800.
===
Velg og gjennomfør minst to av oppgavene under (du trenger m.a.o. heller ikke for denne øvingen å henge deg opp i hvor mange dekningsgrads- og omfangspoeng hver av oppgavene har):
- CardContainedImpl-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/Arv+-+CardContainerImpl-oppgave)
- Train-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/Arv+-+Train-oppgave)
- Kalkulator-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/Arv+-+Kalkulator-oppgave)
- SavingsAccount-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/Arv+-+SavingsAccount-oppgave)
- Asteroids-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/Arv+-+Asteroids-oppgave)
Disse oppgavene har noe ulik vanskelighetsgrad og omfang, og trolig stigende (i.e. CardContainerImpl den enkleste og Asteroids den vanskeligste - hvilket inkluderer GUI!). Alle er (høyst) eksamensrelevante og de anbefales følgelig å ta en titt på alle sammen.
- å lære hvordan arv-mekansimen brukes i OO
- å lære om instanser, typer, deklarasjoner og tilordninger
- å lære om sub- og superklasser samt om synlighetsmodifikatorer som brukes ved arv
- å kunne bruke arv til å modellerere enkle(re) objektstrukturer- og relasjoner i Java
- å kunne la flere subklasser bruke funksjonalitet definert i samme superklasse
- å la en subklasse redefinere metoder definert i en superklasse
===
Innleveringsfrist Fredag 14. mars kl 0800.
===
I denne øvingen skal du fortsette med det spillet du implementerte i øving 4 og legge til ny funksjonalitet (angre / gjenta) i tillegg til å innføre grensesnitt som en del av implementasjonen. Dette er beskrevet på følgende wikiside:
Spill med mulighet for angring og lagring
Merk at dersom du velger å fortsette med TicTacToe, må du først generalisere spillet til å kunne spilles på brett av størrelse NxN og med seiersbetingelse M på rad. Se instruksjoner under Ekstraoppgave - Utvidelse til M-på-rad spill på NxN-brett på TicTacToe-oppgavesiden.
- å lære hvordan grensesnitt kan brukes i spill og implementasjon av disse
- å lære hvordan logikk for å kunne angre og gjenta kan implementeres
- å kunne bruke en stack til å angre og gjenta (angrede) trekk
- å kunne definere et grensesnitt for lesing av spill fra fil og implementere dette
- å implementere det definerte grensesnittet ConsoleGame
===
Innleveringsfrist Fredag 28. februar kl 0800.
===
Velg og gjennomfør minst to av oppgavene under (du trenger m.a.o. heller ikke for denne øvingen å henge deg opp i hvor mange dekningsgrads- og omfangspoeng hver av oppgavene har):
- CardContainer-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/interface+-+CardContainer-oppgave)
- CardComparison-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/interface+-+CardComparison-oppgave)
- Named-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/interface+-+Named-oppgave)
- StringGrid-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/interface+-+StringGrid-oppgave)
Disse oppgavene har noe ulik vanskelighetsgrad og omfang, og trolig stigende (i.e. CardContainer den enkleste og StringGrid den vanskeligste). Alle er (høyst) eksamensrelevante og de anbefales følgelig å ta en titt på alle sammen.
===
- å lære hva gresesnitt er og hvordan disse defineres
- å lære hvordan man implementerer et grensesnitt
- å kunne lage grensesnitt og implementere disse med andre klasser
- å kunne bruke grensesnittene Iterable og Iterator
- å kunne bruke grensesnittene Comparable og Comparator
===
Innleveringsfrist Fredag 21. februar kl 0800.
===
Velg og gjennomfør minst én av oppgavene under (du trenger m.a.o. heller ikke for denne øvingen å henge deg opp i hvor mange dekningsgrads- og omfangspoeng hver av oppgavene har):
- Card-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/Objektstrukturer+-+Card-oppgave)
- Partner-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/Objektstrukturer+-+Partner-oppgave)
- Person-oppgaven (https://www.ntnu.no/wiki/display/tdt4100/Objektstrukturer+-+Person-oppgave)
Disse oppgavene har noe ulik vanskelighetsgrad og omfang. Alle er (høyst) eksamensrelevante og de anbefales følgelig å ta en titt på alle sammen.
NB: du må laste ned og legge til siste versjon av jexercise-standalone.jar og legge denne til javaprosjektet ditt for at JExercise-testene skal fungere (denne finner du på https://www.ntnu.no/wiki/display/tdt4100/JExercise eller i mappen 'Øving 5').
===
- å lære hva assosiasjoner er og hvordan dette brukes i OO
- å lære hvordan å sikre konsistent oppførsel mellom assosierte objekter
- å kunne implementere klasser som har assosiasjoner til en eller flere andre klasser
- å kunne implementere metoder som oppretter, oppdaterer og fjerner slike assosiasjoner
- å kunne sikre at disse assosiasjon er konsistente i enkle objektstrukturer
Innleveringsfrist Fredag 14. februar kl 0800.
===
I denne øvingen skal du starte å programmere et spill som du skal fortsette å jobbe med i senere øvinger. Det blir mulig å skifte til et annet spill senere så lenge alle øvingskrav blir oppfylt, så ikke vær redd for å velge "feil" spill nå. :-) Merk at du får to uker på øvingen!
Velg og gjennomfør minst én av oppgavene under (du trenger m.a.o. ikke å henge deg opp i hvor mange dekningsgrads- og omfangspoeng hver av oppgavene har):
- TicTacToe (https://www.ntnu.no/wiki/display/tdt4100/Innkapsling+-+TicTacToe-oppgave) (enklest).
- Sudoku (https://www.ntnu.no/wiki/display/tdt4100/Objektstrukturer+-+Sudoku-oppgave).
- Sokoban (https://www.ntnu.no/wiki/display/tdt4100/Objektstrukturer+-+Sokoban-oppgave) (vanskeligst).
I denne øvingen legger oppgaveteksten(e) mindre føringer for hvordan koden din skal struktureres enn tidligere. Det er meningen du skal få øvelse i å tenke ut objektstrukturer som passer til å løse oppgaver selv. Derfor kan det være lurt å starte med øvingen tidlig, slik at du rekker å få hjelp hos studass dersom du sitter fast.
==========
- å lære å tenke ut en oppdeling av et program i flere interagerende klasser
- å lære å tenke rundt og programmere et program som skaper flere objektinstanser under kjøring
- å kunne programmere meningsfulle og fungerende objektstrukturer
- å kunne teste et større program og sikre seg at det fungerer i alle tilfeller
Innleveringsfrist: Fredag 31. januar kl 0800.
==========
- Velg minst 2 av oppgavene under Innkapsling av eksisterende klasser.
- Oppgavene om Rectangle, RPN-kalkulator, Stack for tilfeldige String-objekter og UpOrDownCounter kan bare velges for poeng dersom de ikke allerede har blitt løst i en tidligere øving.
- De øvrige oppgavene (Calculator, Digit, LineEditor og Location) kan velges for poeng uavhengig om de har blitt løst tidligere eller ikke.
- Skriv svar (stikkord / få, korte setninger) på spørsmål 1-4 enten som kommentarer i koden din eller i en egen fil som du laster opp sammen med besvarelsen din.
- Person-oppgave (https://www.ntnu.no/wiki/display/tdt4100/Innkapsling+-+Person-oppgave)
- Account-oppgave (https://www.ntnu.no/wiki/display/tdt4100/Innkapsling+-+Account-oppgave)
Før du setter i gang kan det vært lurt å lese nevnte wikiside om 'Innkapsling' nøye (https://www.ntnu.no/wiki/display/tdt4100/Innkapsling). Forelesningene og tilhørende øvingsforelesning er selvsagt også lure å få med seg.
==========
- å lære å innkapsle klasser og metoder etter god programmeringskikk
- å lære å validere argumenter for å sikre gyldig tilstand
- å kunne forstå og implementere hvordan en klasse best bør innkapsles
- å kunne skrive kode for å validere argumenter for å sikre gyldig tilstand
- å kunne kaste exceptions ved ugyldige argumenter i en metode
=========
Innleveringsfrist Fredag 24. januar kl 0800.
=========
- Velg minst én av oppgavene du ikke løste i øving 1 (med mindre du gjorde alle) under wikisiden Tilstand og oppførsel:
- Velg deretter minst én av oppgavene under:
- Enkel kalkulator (https://www.ntnu.no/wiki/pages/viewpage.action?pageId=69241174)
- Stack for tilfeldige tall (https://www.ntnu.no/wiki/pages/viewpage.action?pageId=69241177)
- RPN kalkulator (https://www.ntnu.no/wiki/pages/viewpage.action?pageId=69241184)
Før du setter i gang kan det vært lurt å lese nevnte wikiside om Tilstand og oppførsel nøye.
=========
- å lære å lage enkle javaklasser og –program
- å lære å bruke hovedprogram for å teste andre klasser
- å kunne tegne enkle tilstandsdiagrammer
- å kunne deklarere klasser og metoder ihht. oppgavespesifikasjon
- å kunne skrive hovedprogrammer som tester andre klasser
- å kunne skrive hovedprogrammer som tar input fra tastaturet
=========
Innleveringsfrist: Fredag 17. januar kl 0800.
==========
Velg blant følgende oppgaver under wikisiden Tilstand og oppførsel:
- Account (https://www.ntnu.no/wiki/pages/viewpage.action?pageId=68359650)
- Digit (https://www.ntnu.no/wiki/pages/viewpage.action?pageId=69239051)
- LineEditor (https://www.ntnu.no/wiki/pages/viewpage.action?pageId=68359689) (frivillig del behøves ikke løses for - dekningsgrad- og omfangspoeng)
- Location (https://www.ntnu.no/wiki/pages/viewpage.action?pageId=68359687)
- Rectangle (https://www.ntnu.no/wiki/pages/viewpage.action?pageId=69239386)
- UpOrDownCounter (https://www.ntnu.no/wiki/pages/viewpage.action?pageId=66879773)
Før du setter i gang kan det vært lurt å lese nevnte wikiside om Tilstand og oppførsel nøye.
==========
- å lære (enkel) objektorientert tankegang
- å lære å lage enkle javaklasser og -program
- å kunne tegne enkle tilstandsdiagrammer
- å kunne deklarere klasser, med data og kode, ihht oppgavespesifikasjon
- å kunne skrive hovedprogrammer, bl.a. for å teste objekter
- å kunne bruke standardtyper- og metoder (e.g. toString()-metoden)
=========