IT-Universitetet i København
 
  Tilbage Kursusoversigt
Kursusbeskrivelse
Kursusnavn (dansk):Objektorienteret softwarekonstruktion 
Kursusnavn (engelsk):Object Oriented Software Construction 
Semester:Forår 2010 
Udbydes under:Bachelor i softwareudvikling (bswu) 
Omfang i ECTS:7,50 
Kursussprog:Dansk 
Kursushjemmeside:https://learnit.itu.dk 
Min. antal deltagere:
Forventet antal deltagere:43 
Maks. antal deltagere:43 
Formelle forudsætninger:Grundlæggende Programmering med Projekt (BSc i softwareudvikling), eller tilsvarende 
Læringsmål:Læringsmål:
Efter kurset forventes den studerende at kunne følgende:
• Anvende alle elementer af et moderne objektorienteret sprog (Java)
• Forklare i detaljer hvordan de enkelte elementer af sproget fungerer
• Forklare i detaljer hvordan de enkelte elementer af sproget bruges til at konstruere software som er nem at vedligeholde og udvide
• Konstruere klassehierarkier med anvendelse af interfaces, abstrakte klasser og metoder, superklasser og subklasser
• Konstruere generiske typer og generiske metoder
• Forklare hvordan programmer i sproget afvikles, med begreber såsom virtuel maskine, stak, hob og garbage collection
• Gøre rede for Javas faciliteter til fejlhåndtering og benytte dem i praksis
• Forklare hvordan Java understøtter samtidighed (concurrency) og hvilke problemer det introducerer
• Benytte JDBC-API’et i egne programmer og gøre rede for dets opbygning
• Beskrive programmer vha. UML-diagrammer
• Anvende nogle designmønstre til at strukturere og beskrive software
* Beskrive Javas reflektionsmekanisme og benytte den sammen med Annotationer
• Gennemføre simple induktionsbeviser
• Formalisere givne uformelle udsagn ved hjælp af logik; kunne forenkle givne
logiske udtryk; og indse hvornår to udsagn er ækvivalente.
• Formulere invarianter, særlig løkkeinvarianter, i programmer, og benytte disse
til at ræsonnere om programmers korrekthed.


 
Fagligt indhold:Kurset indeholder dels en introduktion (4 uger) til simpel formel logik og bevisførelse og disses anvendelse i ræsonnementer om programmers korrekthed, og dels (9 uger) en grundig gennemgang af objektorienteret programmering med Java, herunder alle relevante sprogelementer. Der lægges vægt på at forklare og illustrere, hvordan man bruger de objektorienterede elementer på en fornuftig måde, herunder så den resulterende software kan forstås af andre udviklere, så den er fleksibel at ændre og udvide, så gentagelser undgås, så fejl håndteres de korrekte steder, så objekter selv sikrer deres tilstand er gyldig. Dette opnås bl.a. vha. modularisering, fejlhåndtering og indkapsling.

Kurset gennemgår således nogle af de samme elementer af objektorienteret programmering og af Java som kendes fra Grundlæggende Programmering med Projekt, men der gås mere i dybden, der lægges mere vægt på korrekt anvendelse, og der lægges vægt på præcision og fuldstændighed. Desuden gennemgås en række nye emner: garbage collection, stak og hob; static import; konstruktion af generiske typer og generiske metoder; wildcards i generiske typer; håndtering af kataloger og filer; trådprogrammering, JDBC, refleksion, annotationer; UML og designmønstre.

For at blive indstillet til eksamen skal du for det første besvare og have godkendt tre obligatoriske opgaver, der behandler emnerne fra de første fire uger.
Desuden skal du have godkendt 7 opgavebesvarelser for de opgaver der hører til den sidste 9 uger af kurset. Det vil sige, at du skal have godkendt i alt 10 obligatoriske opgaver.
Deadline for aflevering af de obligatoriske opgaver vil blive offentliggjort på kursets hjemmeside - det betyder, at de angivne deadlines vil være bindende.

Den efterfølgende mundtlige eksamen vedrører emnerne fra kursets 9 sidste uger.

Følgende emner behandles:
• Static members (klasse) og non-static members (objekter/instanser)
• Pakker (namespaces, indkapsling, navnekonventioner og classpath)
• Initialisering, garbage collection (hvorfor både dangling references og memory leaks undgås helt i Java, konstruktorer, finalize, weak refs)
• Objektidentitet vs. objekttilstand ( ==, equals, compareTo, tildeling by-reference og tildeling by-value, clone, reference-variable, null)
• Scanning af tekstinput, delimiters, regulære udtryk, formatering af tekstoutout med printf og format.
• Javas typesystem (hvorfor er det nyttigt, up- og down-cast, type-konvertering, ClassCastExceptions, typehierarki, statiske og dynamiske typecheck)
• Interfaces, abstrakte klasser og konkrete klasser
• Overloading af metoder og konstruktorer
• De to betydninger af nøgleordene this og super
• Indkapsling (hvorfor og hvordan, forskel på grænseflade og implementation)
• Genbrug af kode vha. hhv. nedarvning (extension) og komposition (delegation); hvornår bør man bruge hvilken af de to? Forskellen på sub-typing og på nedarvning af implementation.
• Nedarvning, overriding, subtype-polymorfi og typehierarkier. Hvorfor bruge base-typer og polymorfi fremfor forgreninger? instanceof og getClass
• Overblik over Java Virtual Machine, stack, heap og Java Bytecode.
• Definition og implementation af Java interfaces (erstatning for manglende multipel nedarvning, hvordan og hvorfor bruges de)
• Indlejrede (nested) klasser; herunder inner-, local-, anonymous- og member classes.
• Konstruktion af generiske typer og generiske metoder, wildcards.
• Collections (overordnet design, generiske typer, forskellige slags maps og collections, iteration over elementer med for-each, read-only, trådsikkerhed, sortering og effektivitet)
• Metoderne equals, compareTo og hashCode i forbindelse med collections.
• Exceptions, throw, try-catch, throws; assert-sætningen
• Programmering med tråde i Java (Thread, Runnable, ThreadGroups, levetid og trådtilstande, waiting, blocking, deadlocks, notification, demon threads)
• Filer, strømme, kataloger og serialisering.
• Arkitektur af JDBC og dets anvendelse til at tilgå database fra Java-programmer.
• Konstruktion af GUIs med Swing. Vi behandler dog kun udvalgte dele af det.
• UML (use-case-, klasse-, sekvens- og tilstandsdiagrammer) og designmønstre
• Induktionsbeviser, induktionshypotese
• Udsagnslogik, logisk ækvivalens, tautologi, de Morgans love, prædikatlogik, kvantorer, relation til logiske operatorer i Java.
• Løkkeinvarianter, illustreret blandt andet med algoritmer på arrays, beviser for løkkers korrekthed
• Datastrukturinvarianter
 
Læringsaktiviteter:12 forelæsninger og 12 øvelsesgange

Undervisningsformen er forelæsninger med overheads, tavle og kørende eksempler og en væsentlig del to-vejs-kommunikation for at tilpasse farten til de studerendes forudsætninger og interesser.

Der lægges stor vægt på praktiske øvelser ved computer med personlig feedback på opgavebesvarelser. Vi lægger op til at de studerende samarbejder om opgaverne i mindre grupper (2-3 personer) og afleverer en samlet besvarelse for gruppen.
-----------
Information om studiestruktur
Dette kursus indgår på andet semester på bacheloruddannelsen i software.
Se studieforløbet beskrevet her:
Bachelor softwareudvikling


Se hvordan undervisningen er tilrettelagt her:
link til skemaoplysninger
Skemaoplysningerne for forårssemesteret vil være tilgængelige fra kort før semesterstart.

See the schedule here:
link to the time table
The schedule for the spring term will be available shortly before the beginning of the term
 

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

For at blive indstillet til eksamen skal du for det første besvare og have godkendt tre obligatoriske opgaver, der behandler emnerne fra de første fire uger.
Desuden skal du have godkendt 7 opgavebesvarelser for de opgaver der hører til den sidste 9 uger af kurset. Det vil sige, at du skal have godkendt i alt 10 obligatoriske opgaver.
Deadline for aflevering af de obligatoriske opgaver vil blive offentliggjort på kursets hjemmeside - det betyder, at de angivne deadlines vil være bindende.

Den efterfølgende mundtlige eksamen vedrører emnerne fra kursets 9 sidste uger.  

Litteratur udover forskningsartikler:Bruce Eckel: Thinking in Java, 4th edition. Prentice-Hall 2006. 
 
Afholdelse (tid og sted)
Kurset afholdes på følgende tid og sted:
UgedagTidspunktForelæsning/ØvelserStedLokale
Mandag 09.00-12.00 Forelæsning ITU 2A12
Mandag 13.00-16.00 Øvelser ITU 4A56

Eksamen afholdes på følgende tid og sted:
EksamensdatoTidspunktEksamenstypeStedLokale
2010-05-18 Før kl. 15 Skriftlige arbejder ITU Eksamenskontoret (2E)
2010-06-14 Kontakt kursusansvarlig for individuelt tidspunkt Mundtlig eksamen ITU 4A22
2010-06-15 Kontakt kursusansvarlig for individuelt tidspunkt Mundtlig eksamen ITU 4A22
2010-06-16 Kontakt kursusansvarlig for individuelt tidspunkt Mundtlig eksamen ITU 4A22
2010-06-17 Kontakt kursusansvarlig for individuelt tidspunkt Mundtlig eksamen ITU 4A22
2010-06-18 Kontakt kursusansvarlig for individuelt tidspunkt Mundtlig eksamen ITU 4A22
2010-08-20 Mulig dag for reeksamen /Possible date for re-exam Mundtlig eksamen ITU Eksamensform kan blive ændret / Examination form may be altered
2010-08-23 Mulig dag for reeksamen /Possible date for re-exam Mundtlig eksamen ITU Eksamensform kan blive ændret / Examination form may be altered
2010-08-25 Mulig dag for reeksamen /Possible date for re-exam Mundtlig eksamen ITU Eksamensform kan blive ændret / Examination form may be altered