1. forelæsning: Klasser, referencer og objekter
Kurset indeledes med en præcisering af klasse- og objektbegrebet, herunder hvordan felter hhv. metoder kan tilhøre enten objekter eller en klasse. Vi sammenligner reference-variable og primitive variable - herunder begreberne by-value og by-reference. Begreberne objektidentitet og objekttilstand defineres, og operatorerne == og equals gennemgås i den forbindelse. Sidst ser vi på variable i forskellige sammenhænge - dvs. som felter, parametre og lokale variable.
2. forelæsning: Initialisering, oprydning mm.
Vi starter med at beskrive begrebet initialisering. Herefter ser vi på hvordan (og hvorfor) Java sikrer initialisering af parametre, lokale variable, felter og objekter, samt hvad alternativet til tvungen initialisering ville være. Ifm. intialiseringen af objekter, gennemgås hvordan constructors kan bruges til at sikre objekter altid initialiseres til en gyldig tilstand.
Herefter ser vi på frigørelse af hukommelse, samt variable og objekters levetid. Specielt fokuserer vi på automatisk garbage collection, samt hvad alternativet ville være, og den medfølgende risiko for dangling pointers og memory leaks.
3. forelæsning: Indkapsling og pakker
Denne forelæsning handler om hvorfor og hvordan man kan modularisere og indkapsle. I den forbindelse gennemgås reduktion af kompleksitet vha. abstraktion - herunder begreberne grænseflade og implementation. Konkret ser vi på Javas packages og classes, som begge kan bruges ifm. modularisering, og vi gennemgår Javas synlighedsmekanismer - dvs. public, protected, default og private. I forbindelse med indkapsling vises hvordan private felter, samt get- og set-metoder kan være med til at sikre, at objekter altid bibeholdes i en gyldig tilstand.
4. forelæsning: Komposition og nedarvning
Denne forelæsnings hovedtema er genbrug af kode i objektorienterede sprog. Objektorienterede sprog fremhæves ofte som gode mht. genbrug. Vi ser på to grundlæggende metoder til genbrug i oop, nemlig nedarvning og komposition (delegation).
5. forelæsning: Polymorfi og arbejde med typer
Et centralt begreb i oop er polymorfi. Vi ser på hvordan objekter af én type, vha. polymorfi (betyder mange former) indenfor visse regler, kan betragtes som om de var af en anden type. Endvidere ser vi på alle de regler, der gør, at man kalder Java et typestærkt sprog: hvordan lyder reglerne, og hvad gør de godt for? I forbindelse med polymorfi ser vi også på typekonvertering - dvs. upcast og downcast, samt overriding af metoder og dynamisk binding af disse under kørsel.
6. forelæsning: Interfaces og indre klasser
På denne forelæsning vender vi tilbage til adskillelsen i grænseflade og implementation, idet Javas interfaces kan betragtes som rene grænsefladedefinitioner. I den forbindelse diskuterer vi nedarvningen af type hhv. implementation, samt multipel nedarvning vs. multipel subtyping.
Sidst ser vi på indlejrede klasser, der er klasser defineret indeni andre klasser, herunder hvordan de laves, og hvad de gør godt for.
7. forelæsning: Collections - et alternativ til arrays
På denne forelæsning ser vi på Javas indbyggede datastrukturer. Øvelserne forud for forelæsningen har præsenteret en liste-datastruktur, samt to forskellige implementationer af denne (array hhv. hægtet liste). På denne forelæsning beskrives de abstrakte datatyper, der er indbygget i Java (Collection, List, Set, Map etc.) og nogle af de klasser, der implementerer disse abstrakte datatyper. Endvidere sammenligner vi Collections med arrays, og diskuterer hvad de skal bruges til.
8. forelæsning: Fejlhåndtering (Exceptions)
På denne forelæsning gennemgås Javas fejlhåndteringsmodel. Vi ser hvordan man kan håndtere fejl, hvordan man man signallere problemer, og hvordan man laver sine egne fejltyper. Vi sammenligner Javas tvungne fejlhåndtering med sprog, der ikke har eksplicit fejlhåndtering. Der gives endvidere eksempler på, hvordan exceptions kan bruges til at sikre objekter holdes i gyldig tilstand.
9. forelæsning: Tråde (Threads)
På denne forelæsning beskrives begrebet tråde, og der gives eksempler på, hvordan man programmerer med tråde i Java. Endvidere ser vi på et par problemer, som man ricikerer at løbe ind i, når man programmerer med tråde - fx deadlocks.
10. forelæsning: Input/Output (I/O)
På denne forelæsning ser vi på indhentning af data til et program; og det modsatte: eksternalisering af data fra et program. Herunder ser vi på brugen af filer, sockets, byte-strømme vs. tekst-strømme, samt serialisering af objekter. Vi ser endvidere på hvordan tråde og I/O kan bruges i sammenhæng (blocking calls ifm. I/O, og pipes mellem tråde).
11. forelæsning: Swing
Her skal vi se på et Java-API til at opbygge brugergrænseflader med. Vi ser på Javas event-model, komponent-model og layout-managers. Vi ser hvordan man indlejrer komponenter indeni hinanden (komposition), og derved sammensætter en brugergrænseflade. Desuden ser vi på, hvordan man kan adskille model og funktionalitet fra brugergrænsefladen i ens kode.
12. forelæsning: UML og programmeringsværktøjer
På denne forelæsning repeteres og opsamles der på diagramnotationen UML. Desuden præsenteres et par programmer og værktøjer, som kan være nyttige at anvende, når man laver større Java-programmer. |