Objekt-orienterad Programmering och Design (2018)
Laborationer
Under kursen kommer ni att genomföra två laborationer och en inlämningsuppgift. Laborationerna är av programmeringskaraktär,
och redovisas muntligen under laborationspassen. Inlämningsuppgiften är en analys av kod, och ska lämnas in skriftligen.
Både laborationerna och inlämningsuppgiften görs i grupper om tre personer. Har ni särskilda skäl för att avvika från detta antal,
prata med Niklas eller Johannes. Se till att de grupper ni bildar är välbalanserade avseende kunskapsnivå,
och att ni funkar tillsammans vad gäller arbetssätt.
Laboration 1 - Arv och dynamisk bindning
- Utgå ifrån git-repot https://github.com/niklasbroberg/DIT953-lab1 och läs filen Lab1del1PM.txt.
I del ett är syftet att öva på grundläggande arv, overriding och dynamisk bindning, samt att komma igång med Javadoc och JUnit.
- I del två är syftet att öva på olika verktyg för polymorfism och återanvändning av kod: arv vs delegering,
superklasser vs interfaces, och principer för subtyper.
- Deadlines för lab 1:
- Redovisa del 1 senast måndag, 29 jan, på laborationspasset.
- Redovisa del 2 senast måndag, 5 feb, på laborationspasset.
Laboration 2 - MVC och design patterns
- Utgå ifrån git-repot https://github.com/niklasbroberg/DIT952-lab2 och läs filerna för respektive uppgift.
Syftet med denna del är att öva på att analysera, arbeta mot, samt förbättra en existerande kodbas i enlighet med de principer vi går igenom i kursen.
- Deadlines för lab2:
- Redovisa del 1 senast måndag, 12 feb, på laborationspasset.
- Redovisa del 2 senast måndag, 19 feb, på laborationspasset.
- Redovisa del 3 senast måndag, 26 feb, på laborationspasset.
Inlämningsuppgift: Analys av existerande kodbas
Syftet med denna uppgift är att applicera era analys-färdigheter på kod som inte är artificiellt konstruerad för ändamålet (dvs till skillnad från koden i lab 2).
I synnerhet är det följande lärandemål som är relevant för laborationen:
- analysera och utvärdera kod enligt principer för god objekt-orienterad design och implementation.
- känna igen och redogöra för olika objekt-orienterade design-mönster; inklusive deras syfte och effekt.
- applicera design-principer och design-mönster för att åstadkomma sund objekt-orienterad design.
Inlämningsuppgiften görs i grupp precis som de föregående delarna.
- Deadline: Fredag, 9/3, 23:59
- Inlämning:
- Kodbas (som zip, eller som en stabil länk till en webplats)
- UML-diagram, som PDF. Konstruera det hur ni vill (mobil-foto av handritat diagram är acceptabelt om det är läsligt)
- En kort analys (max tre A4-sidor text, exkl bilder) enligt instruktion nedan.
- Skicka inlämningen via mail till Niklas: niklas.broberg@chalmers.se
Steg 1: Identifiera kodbas
Hitta en sammanhängande kodbas att utgå ifrån, hur spelar (nästan) ingen roll. Det kan vara något publikt bibliotek ni hittar på t ex GitHub, något ur Javas standardbibliotek, en kodbas ni skrivit själva tidigare (som är rimligt relevant och håller vettig kvalitet), etc. Det enda kravet är att det inte är kod som tagits från undervisningsmaterial (e.g. i kurs från GU eller Chalmers, annat universitet, Coursera, el dyl). Rimlig storlek är 10-20 classes/interfaces, men det är inget hårt krav. Huvudsaken är att den valda kodbasen låter er utföra resten av uppgifterna. Prata med oss (Niklas och Johannes) om ni är osäkra på om den kodbas ni tänker er är lämplig.
Steg 2: Beskriv kodbasen med ett UML-diagram
Rita ett UML-diagram som beskriver de klasser/interfaces, samt relationer mellan dessa, som finns i er valda kodbas. Gör en avvägning kring relationer till externa klasser/interfaces (dvs klasser/interfaces som inte är en del av kodbasen); ta me de relationer som känns viktiga för att klargöra kodbasens design, utelämna de som inte gör det. Gör liknande avvägningar för konstruktorer och för privata fält och metoder (men default bör vara att ha med dem).
Steg 3: Analysera kodbasens design
Analysera kodbasen utifrån de principer vi diskuterat i kursen. Peka ut sådant som bryter mot någon av principerna - sådant finns garanterat, medvetet eller omedvetet gjort - och förklara hur det bryter mot principen i fråga. Identifiera och förklara (minst) tre olika användningar av design patterns vi tagit upp i kursen. Rekommendera förbättringar av kodens design, och motivera era rekommendationer med hänvisning till våra principer.
Betygskriterier för inlämningsuppgiften
Övergripande gäller att vi enbart avser de design-mönster som tagits upp i kursen, och som nämns i manuset för muntan, när vi refererar till design-mönster nedan.
- ANALYSERA och UTVÄRDERA kod enligt principer för god objekt-orienterad design och implementation.
- Studenterna ska för godkänt betyg kunna:
- identifiera, för samtliga fem SOLID-principer, minst ett avsteg kodbasen gjort från principen, om något sådant förekommer.
- identifiera, för principerna "High cohesion, low coupling", "Law of Demeter", samt "Command-Query separation principle", minst ett avsteg kodbasen gjort från principen, om något sådant förekommer.
- översiktligt värdera kodbasens design-mässiga kvalitet, med rimlig argumentation.
- Studenterna ska för väl godkänt betyg kunna:
- för varje avsteg från principerna som nämnts ovan, kritiskt värdera avstegets påverkan på kodbasens kvalitet i relation till god objekt-orienterad design.
- kritiskt granska och värdera kodbasens design-mässiga kvalitet, med mycket god argumentation.
- KÄNNA IGEN olika objekt-orienterade design-mönster, inklusive deras syfte och effekt.
- Studenterna ska för godkänt betyg kunna:
- känna igen ett flertal designmönster som använts korrekt i kodbasen, om sådana finns att finna.
- känna igen ett flertal av de ytterligare försök till användningar av designmönster som gjorts i kodbasen, om sådana finns att finna, och översiktligt förklara på vilket sätt de skiljer sig från en korrekt användning av respektive designmönster.
- Studenterna ska för väl godkänt betyg kunna:
- känna igen samtliga, eller näst intill, designmönster som använts korrekt i kodbasen.
- känna igen flertalet ytterligare försök till användningar av designmönster som gjorts i kodbasen, förklara på vilket sätt de skiljer sig från en korrekt användning av respektive designmönster, samt vilka konsekvenser detta får för designen av kodbasen.
- APPLICERA design-principer och design-mönster för att åstadkomma sund objekt-orienterad design.
- Studenterna ska för godkänt betyg kunna:
- föreslå minst en rimlig användning av ett design-mönster, och översiktligt förklara hur detta påverkar kodbasen, positivt eller negativt.
- föreslå minst en generell förbättring (ej design-mönster) av kodbasen, och sätta denna i relation till god objekt-orienterad design, med rimlig argumentation.
- Studenterna ska för väl godkänt betyg kunna:
- föreslå ett flertal förändringar av kodbasen, och kritiskt värdera för- och nackdelar av varje val, med mycket god argumentation.
Uppdaterad: 9 March 2018
av Niklas Broberg