OBS! Man får börja med uppgiften efter man fått godkänd på alla laborationer!
Syftet med denna del ä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 tidigare laborationer). I synnerhet är det följande lärandemål som är relevant för inlämningsuppgiften:
Inlämningsuppgiften görs i grupp precis som de föregående laborationerna. Inlämning görs via Fire, lämna in senast torsdag den 21:e december. Inlämningsuppgiften kommer även ligga till grund för (delar av) den muntliga tentamen. Det är alltså fortsatt viktigt att samtliga gruppmedlemmar är delaktiga i utförandet, då redovisningen kommer att göras individuellt (vid tentamen).
Inlämning:
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å till exempel 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, eller dylikt). 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 Alex om ni är osäkra på om den kodbas ni tänker er är lämplig.
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 med 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).
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.