IT-Universitetet i København
 
  Tilbage Kursusoversigt
Kursusbeskrivelse
Kursusnavn (dansk):Objektorienteret programmering (kl. 16.00-21.30) 
Kursusnavn (engelsk):Object Oriented Programming (16:00-21:30) 
Semester:Forår 2003 
Udbydes under:cand. it, softwareudvikling (swu) 
Omfang i ECTS:7,50 
Kursussprog:Dansk 
Kursushjemmeside:https://learnit.itu.dk 
Min. antal deltagere:
Forventet antal deltagere:40 
Maks. antal deltagere:100 
Formelle forudsætninger:

  • Grundlæggende programmering (GP)
  • At man har udviklet og testet et mindre Java-program, fx som et 4-ugers projekt efter GP.
 
Læringsmål:


Målet med kurset er at lære centrale elementer i objektorienteret programmering eksemplificeret med Java-sproget. Dette opnås dels gennem forelæsning og litteraturlæsning, men også gennem væsentlige mængder praktisk arbejde med mindre programmeringsopgaver. Forelæsningerne konkretiserer teorien, ved at der hyppigt vises kørende kode på projector.


Målet er, at du skal forstå og beherske objektorienterede faciliteter i Java-sproget. Herunder hvordan disse faciliteter basalt set bruges, men også hvorfor faciliteterne er der; og vigtigst af alt, hvordan man bruger faciliteterne på en hensigtsmæssig måde.


Selvom kurset er meget centreret omkring Java, vil det ofte blive pointeret, at Javas måde at håndtere tingene på ikke er den eneste sande og rigtige løsning. Vi vil til tider skele til andre sprog, hvorved det tydeligt fremstår, at Java er udformet på baggrund af en række designvalg, som har haft både positive og negative konsekvenser set i forhold til alternative løsningsmuligheder.


Kurset er en naturlig fortsættelse af Grundlæggende Programmering (GP). På OOP vil vi i minimalt omfang repetere elementer fra GP, hvorefter vi dels bygger videre på de emner, der allerede er berørt på GP; derudover introducerer og gennemgår vi adskillige helt nye emner.


Efter kurset vil du have en solid baggrund for at følge videregående praktiske og teoretiske kurser. 

Fagligt indhold:

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. 

Læringsaktiviteter:

Hver uge er der ca. 3 timers forelæsning og 3 timers øvelser.

Der skal skal hver uge afleveres en besvarelse på et sæt obligatoriske opgaver. Der er i alt 11 opgavesæt hvoraf de 9 skal afleveres rettidigt og godkendes, for at man kan gå til eksamen.

Den studerende skal være instillet på at bruge ca. 15 timer på kurset om ugen alt i alt. 

Eksamensform og -beskrivelse:X. experimental examination form (7-scale; external exam), 13-skala, Ekstern censur

4 timers skriftlig eksamen, med ekstern censur og bedømmelse efter 13-skalaen.

Alle skriftlige hjælpemidler, herunder bøger, kopier, noter, er tilladte. Computer er ikke tilladt.


Der stilles på kurset i alt 11 opgavesæt hvoraf de 9 skal afleveres rettidigt og godkendes, for at man kan gå til eksamen.  

Litteratur udover forskningsartikler:

Thinking in Java - The Definitive Introduction to Object-Oriented Programming in the Language of the World Wide Web 2nd edition af Bruce Eckel, Prentice Hall, 2000

Kan downloades gratis på www.bruceeckel.com

Når version 3 at komme, kan den også bruges (men er ikke nødvendig).