Inlämningsuppgift
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:
-
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 laborationerna. Inlämning görs via Fire, lämna in senast fredag den 11:e januari 2019. Det är alltså fortsatt viktigt att samtliga gruppmedlemmar är delaktiga i utförandet.
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, exklusive bilder) enligt instruktion nedan.
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å 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.
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 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).
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
Ö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 högre 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. (betyg 4)
-
kritiskt granska och värdera kodbasens design-mässiga kvalitet, med mycket god argumentation. (betyg 5)
-
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 högre godkänt betyg kunna:
-
känna igen samtliga, eller näst intill, designmönster som använts korrekt i kodbasen. (betyg 4)
-
känna igen flertalet ytterligare försök (om sådana finns) 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. (betyg 5)
-
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 högre 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.