Göm menyn

Projektuppgift

Rapportera eventuella oklarheter eller problem
direkt till examinatorn!

Syfte

Syftet med projektuppgiften är:

  • Att ni ska designa och implementera ett eget OO-program från grunden.

  • Att ni ska använda, och demonstrera hur ni använder, de OO-tekniker ni har lärt er utan att vara bundna av en fördefinierad uppgift eller ett kodskelett.

Projektet motsvarar ca 100 timmars arbete person. Ni måste därför arbeta mycket på egen hand, utanför schemalagd tid. Annars är det stor risk att projektet inte motsvarar kursens poäng och att ni behöver komplettera.

Att göra: Labbanmälan (senast 140228)

I projektet delar vi upp oss i 8 "storgrupper", A–H, med ett 10-tal grupper i varje. Man kan arbeta enskilt eller i par. Vi och många tidigare studenter rekommenderar pararbete i de flesta situationer. Arbetar man ensam kan projektet kan då ha något mindre omfattning, men kvaliteten måste fortfarande vara lika hög.

  1. Kontrollera i webschemat vilken storgrupp som skulle passa dig bäst. Det behöver inte vara samma som under labbarna.

  2. Anmäl dig i WebReg3 i en lämplig grupp. Är det fullt i den gruppen får du välja en annan. Om det är fullt i alla grupper, kontakta examinatorn.

    Vid tekniska problem, prova gamla WebReg2.

Att arbeta i större grupper än två är inte tillåtet. Undantaget är om det efter att grupperna har bildats finns exakt en person som inte hittar någon att arbeta med – då kan den personen få "dispens" av examinatorn att gå med i en annan grupp. Vi ställer då motsvarande högre krav på kvalitet och omfattning!

Regler: Grupparbete sker i grupp!

Om ni arbetar i grupp måste ni ändå utvecklas individuellt. Den ena personen i labbgruppen får inte skriva det mesta av koden "för att det skall gå fortare". Ni ska båda göra ungefär lika stor del av både design och kodning, och båda ska vara fullt insatta i hur saker fungerar.

Om ni arbetar separat på vissa delar av koden måste ni därför regelbundet (gärna varje dag) gå genom den kod som skrivits och diskutera hur den fungerar. Denna informella code review är inte tidsslöseri utan ett utmärkt sätt att både lära sig av andra och hitta problem i programkoden innan det är "för sent"!

I verkligheten krävs i många projekt att all ny kod verifieras på detta sätt innan den överhuvudtaget får integreras i kodbasen.

Tidtabell

  1. Måndag 140224: Officiell start för projektet.

  2. Fredag 140314: Halvtidskontroll. Lämna gärna in nuvarande version, så tar vi en snabb titt på den och kan eventuellt ge några råd och tips.

  3. Onsdag 140409: Här, om inte tidigare, är det dags att börja lägga all energi på putsning, buggfixande och dokumentation.

  4. Tisdag 140415, onsdag 140416: Projektdemo för grupperna ACEG respektive BDFH. Hos de grupper som vill demonstrera ska alla gruppmedlemmar vara närvarande för att svara på frågor (som på en tenta). Ingen vanlig handledning vid detta tillfälle.

    Kan någon medlem inte komma hänvisar vi till omredovisningstillfället i juni. Grupper som inte är klara kan också redovisa i juni, men vi rekommenderar er att arbeta hårt för att vara klara i tid.

  5. Onsdag 140423: Deadline för inlämning av kod.

  6. Onsdag 140507: De grupper som har demonstrerat och lämnat in kod i tid, i korrekt format, utan okommenterade IDEA-varningar, ska ha fått feedback för eventuella kommentarer. (Kompletteringar, även enkla kompletteringar, kan dröja längre men hanteras så snabbt vi hinner.)

  7. Omtenta-p 140609-140612 (exakt datum meddelas senare): Möjlighet till omdemonstration (eller första demonstration, för den som inte "gick upp" på första demonstrationen). Handledarna kommer vid utsatt tid och går då ingen mer är redo för demonstration. Var förberedda!

    Vid detta extratillfälle: Bedömning och betygsättning inom en kalendermånad.

  8. Augustiperioden: Möjlighet till omdemonstration (eller första demonstration). Handledarna kommer vid utsatt tid och går då ingen mer är redo för demonstration. Var förberedda!

    Vid detta extratillfälle: Bedömning och betygsättning inom en kalendermånad.

Steg 1: Förstå krav och kriterier

Krav och kriterier

Det första steget i projektet är att förstå vilka krav som gäller för samtliga projekt och vilka kriterier som ni måste uppfylla för vissa betyg.

Detta kan påverka hur ni ska bygga upp ert projekt.

Grundläggande krav för godkännande

För att projektet ska få godkänt måste det uppfylla dessa krav. Vissa kraven är tyvärr omöjliga att kvantifiera på ett sätt där man omedelbart ser när man har uppnått nivån för ett visst betyg: Var går gränsen för "god läsbarhet"? Diskutera gärna med labbhandledaren för att få preliminär feedback.

  1. Skrivet i Java 7. Används andra klassbibliotek och fritt tillgängligt material, t.ex. bilder eller ljud, ska detta vara tydligt nedskrivet i projektbeskrivningen.

  2. Tillräcklig kvalitet. Svårläst, buggig och ostrukturerad kod är stora minus. Ett första steg är att följa de allmänna kraven på programkod, samt de allmänna kriterierna för bra objektorientering som diskuterats på föreläsningarna.

  3. Det måste synas att ni har lärt er objektorienterade och Java-relaterade begrepp och vet hur dessa ska användas. Ett projekt som fokuserar helt på "lågnivåprogrammering" är alltså inte aktuellt. Om ett problem kan lösas på ett OO-sätt eller ett icke-OO-sätt ska ni använda OO-lösningen, om den inte är uppenbart sämre.

    Exempel: Om ni kan lösa samma problem med subtypspolymorfism eller med en switch-sats med grenar för olika objekttyper, är det normalt subtypspolymorfism som ska användas.

  4. Tillräcklig omfattning motsvarande projekttiden på runt 100 timmar/person. Omfattningen innebär inte bara "kodvolym" utan beror mycket på komplexitet, variation, och så vidare. Detta kriterium är av naturen mycket svårt att specificera närmare. Vad vi kan säga i förväg är:

    • Vi kan så klart inte godkänna ett projekt som ser ut att motsvara 30 timmars arbete – men hög kvalitet och bra användning av OO kan ändå till en viss del väga upp en mindre omfattning.

    • Projekt som är tillräckligt omfattande brukar rent statistiskt ha minst 1000 rader kod (exklusive tomrader, kommentarer osv). Många av de "bästa" projekten från de senaste åren var flera gånger större än så.

      Detta betyder inte att vi sätter betyg efter antal kodrader!. Vi använder många andra kriterier som också har att göra med bland annat "svårighetsgrad", komplexitet och variation. Men den kod som har uppfyllt dessa kriterier har oftast också blivit minst 1000 rader lång.

    • Smart är bättre än långt. En smart och kortfattad lösning är oftast bättre än en lång. Ineffektiv kod, t.ex. projekt där identisk eller nästan identisk kod upprepas på flera ställen, kan ge komplettering.

    • Vår rekommendation: Fokusera främst på kvalitet, funktionalitet och att utnyttja era timmar väl. Om ni är oroade över omfattningen, fråga främst er labbhandledare. I sista hand, räkna kodrader för att få en allmän uppfattning.

  5. Dokumentation: En projektbeskrivning enligt nedan. Projektkoden måste också dokumenteras enligt de allmänna kodkraven. Det är lämpligt att ha Javadoc-kommentarer för alla klasser. Kod som är viktig, icke uppenbar eller potentiellt svår att förstå måste också dokumenteras. Tänk på att handledaren och examinatorn ska läsa genom hela projektet!

Betygskriterier

Projektet ges betyg 3, 4, 5 eller komplettering. För de högre betygen ställs högre krav inom dessa tre områden:

  • Bra användning av objektorientering och Java (t.ex. polymorfism där detta passar)
  • Hög kodkvalitet (välstrukturerad, läsbar, tillräckligt dokumenterad)
  • Projektets omfattning (till viss del)

För varje betygsnivå finns även följande rent kvantitativa krav. Hur ni uppfyller kraven ska dokumenteras i projektbeskrivningen. Instruktioner för dokumentation finns där.

Krav Betyg 3 Betyg 4 Betyg 5

Ett visst antal designmönster måste implementeras och användas, för att ni ska visa att ni behärskar dem. Designmönstren måste användas på ett lämpligt sätt, dvs. varje mönster måste användas för att implementera funktionalitet där det mönstret faktiskt passar. Detta kan till viss del påverka vilken funktionalitet ni väljer att införa i projektet!

Ni ska själva implementera designmönstren i sin helhet. Om ni använder en Comparator som argument till Javas sorteringsmetoder räknas det inte som att ni har implementerat Strategy-mönstret. Att använda en existerande Iterator räknas inte heller.

Godkända designmönster inkluderar alla mönster från Design Patterns av Gamma, Helm, Johnson och Vlissides. Fråga examinatorn i förväg om ni vill tillgodoräkna er andra mönster och ge en referens till det mönster ni undrar över.

1 mönster 2 mönster 3 mönster

För varje betygsnivå måste ni peka ut hur ni har använt ett visst antal olika typiska egenskaper hos just objektorienterade språk.

Typiska egenskaper hos objektorientering inkluderar t.ex. ärvning (där en klass ärver implementerade metoder och fält från en annan), overriding, interface som ett sätt att specificera en abstrakt datatyp, och användandet av sen/dynamisk bindning för att anropa "rätt" implementation av en metod utan att känna till objektets verkliga typ.

Icke-typiska egenskaper är t.ex. enum-konstanter, som finns i olika former i många icke-OO-språk som C, och serialisering av datastrukturer.

1 st 2 st 3 st

När man har flera någorlunda rimliga alternativ för hur programmet ska designas och struktureras, och sedan väljer ett av dessa beslut, gör man ett designbeslut. För varje betygsnivå måste ni beskriva ett visst antal designbeslut ni har tagit. Anledningen är både att ni ska visa oss hur ni har tänkt och att ni själva ska fundera och reflektera över era val.

Designbesluten ska vara på rimligt hög designnivå, dvs. inte varför ni valde att använda "int" istället för "long" för ett visst fält.

Sådant som ska göras enligt projektkraven är inte (gruppens) designbeslut, t.ex. att de flesta fält ska vara privata. Det behöver också finnas alternativa lösningar som är så rimliga att beslutet inte blir helt trivialt och uppenbart. Att man använder konstruktorer för att man i sitt projekt inte har någon som helst användning av factory-mönstret är ett alltför trivialt beslut. Att dela upp koden i flera klasser är också ett uppenbart beslut i ett projekt av denna storlek.

2 beslut 5 beslut 8 beslut

För varje betygsnivå måste den slutliga projektbeskrivningen innehålla minst ett visst antal UML-diagram. Dessa kan t.ex. göras i IDEA.

Varje diagram ska illustrera en specifik "intressant" aspekt av projektstrukturen och åtföljas av en beskrivning enligt instruktionerna i mallen. Metoder och fält bör bara finnas med i diagrammen om de är relevanta (dvs, undvik dem om ni bara vill illustrera klasstrukturen).

1 diagram 2 diagram 4 diagram

Steg 2: Val och beskrivning av projekt

Syfte

Innan ni börjar behöver ni själva välja vilket projekt ni vill utföra. En projektbeskrivning måste sedan skrivas och lämnas in till labbhandledaren redan i början av projektet. Syftet med detta är:

  1. Att ni ska tänka genom implementationen i förväg. Många studenter anser att man har tjänat mycket på detta steg.

  2. Att er handledare ska kunna ge feedback om det är större problem med den valda inriktningen. (Mindre detaljer är svåra att kommentera eftersom mycket beror på era förkunskaper och exakt hur ni går tillväga.)

Vid slutinlämningen ska även en uppdaterad version av projektbeskrivningen lämnas in, med ytterligare information adderad.

Att göra: Välj och beskriv projekt

  1. Läs informationen om vad som kan vara ett lämpligt projekt.

  2. Kom överens om ett projekt att utföra.

  3. Fyll tillsammans i första delen av projektbeskrivningen enligt projektbeskrivningsmallen. Mer instruktioner finns i denna.

  4. Exportera till PDF-format, t.ex. med File | Export to PDF i OpenOffice Writer.

  5. Skicka till er egen handledare för en kort genomgång. Lämna in senast 140221 om ni vill få snabbast möjlig feedback. Att lämna in senare är OK, men då blir även återkopplingen fördröjd.

Steg 3: Programutveckling

Att göra: Uppstart

Innan ni börjar programmera ska ni:

  1. Skapa ett nytt IDEA-projekt om ni använder IDEA, inte lägga koden i samma projekt som labbarna. Se instruktionerna i labb 1. Kom ihåg att ändra More Settings / Project format till ".ipr (file based)"!

  2. Bestämma om ni vill använda versionshantering. Detta kan t.ex. vara till stor hjälp om man arbetar på flera ställen och behöver synkronisera sin kod. Ni kommer att få tillgång till ett Subversion-arkiv som ni kan använda, men det går även bra att använda system som Git.

Att göra: Programutveckling

Under hela programutvecklingsfasen ska ni:

  • Följa milstolparna i projektbeskrivningen. Upptäcker ni problem eller vill göra ändringar uppdaterar ni projektbeskrivningen – den är inte en kravspecifikation, utan projektet kan vid behov ändras under tiden.

  • Testa regelbundet, så att ni hittar problem tidigt.

  • Putsa och förbättra koden regelbundet, så att ni inte har allt detta kvar till slutet. Nya features är roliga, men hög kvalitet är viktigt.

  • Dokumentera regelbundet. Många tidigare studenter skriver att de önskar de hade dokumenterat under kursens gång – efter ett tag glömmer man t.ex. vilka designbeslut man gjorde!

  • Välja objektorienterade lösningar så att ni kan lära er, och visa att ni har lärt er, både Java och objektorientering.

  • Gå genom IDEAs kodinspektioner då och då (Analyze | Inspect Code, välj profil TDDD78-2014-v1). De är ofta ett utmärkt sätt att starta reflektioner över den egna koden och att lära sig något nytt. Ibland kan de så klart ge "falska varningar", och dessa ska då kommenteras så att handledaren får er motivering till varför varningen finns kvar.

  • Diskutera projektet med labbhandledaren då och då. Be om feedback på lösningar ni har gjort och ta chansen att fixa eventuella problem så tidigt som möjligt, även om vi så klart inte kan garantera att allt upptäcks.

  • Ge oss omedelbar feedback om det uppstår tekniska eller andra problem.

  • Komma ihåg att man visserligen ska jobba hårt för att bli klar innan deadline, men att det ändå finns fler tillfällen till redovisning senare. En inlämning i juni eller augusti bedöms på exakt samma sätt som en inlämning i april.

Kom ihåg att sluta i tid så att ni hinner med finputsningsfasen nedan!

Steg 4: Finputsning

Syfte

Det är oftast bättre, både ur betygssynpunkt och för inlärningen, att ha ett projekt med något mindre omfattning men högre kvalitet än att ha ett större antal features som tyvärr inte riktigt fungerar.

Så är det även i "verkligheten", och i många projekt sker därför en feature freeze en tid innan en ny version faktiskt görs tillgänglig. Man slutar alltså lägga till nya finesser och spenderar tid enbart på att fixa problem och "städa upp".

Så ska ni göra även i detta projekt.

Att göra: Feature Freeze / finputsning

Omkring en vecka innan inlämning kan det vara dags att sluta lägga till nya finesser. Då sätter ni istället av tid till att:

  • Återigen gå genom alla IDEAs kodinspektioner och fixa eventuella problem som hittas.

  • Se över den övergripande strukturen på hela projektet och se om den kan förbättras.

  • Gå tillbaka till koden ni skrev i början, och uppdatera den nu när ni kan mer och vet bättre!

  • Leta efter ineffektiv och duplicerad kod. Hitta sätt att reducera detta. Finns det till exempel ställen där kod från många liknande klasser egentligen borde ligga i en gemensam superklass?

  • Uppdatera dokumentationen och kommentarerna, så att en utomstående lättare kan förstå.

  • Uppdatera projektbeskrivningen.

  • Finputsa programkoden på "detaljnivå".

  • Och så vidare...

Steg 5: Demonstration

Syfte: Demonstration

Ni kommer att ha cirka 10 minuter på er att demonstrera ert projekt för labbhandledaren. De två sista labbtillfällena innan påsk är reserverade för detta. Det går även bra att demonstrera tidigare om handledaren har tid, men vi bedömer ändå alla projekt tillsammans efter deadline.

Förberedelser för demonstration

Använd veckan innan demonstrationen till att "polera" projektet enligt ovan.

Fyll i ett labbomslag där ni skriver under att ni har följt alla labbregler på IDA.

Var förberedda på själva demonstrationen! Allt ska gå att starta smidigt när labbhandledaren kommer till er. Testa att demonstrera för varandra i god tid, så att ni inte hittar uppenbara buggar under demonstrationen för handledaren.

Info: Demonstrationen

Demonstrationen går till så här.

  • Demonstrationen inleds med att ni själva demonstrerar funktionaliteten i projektet under några minuter. Var beredda på att visa hur det används och att visa upp de finesser ni själva tycker är viktigast givet tidsbegränsningen.

  • Därefter fortsätter handledaren med egna tester och frågor. Bland annat kan vi testa er kunskap om koden och att kontrollera att ni vet varför ni har gjort som ni har gjort. Frågorna kan ställas till en specifik person. Se därför till att alla känner till alla aspekter av koden.

    Detta garanterar inte att alla problem upptäcks – inte ens de som kan verka "uppenbara". Den riktiga genomgången av programkoden sker efter inlämning, när handledaren får tid att sätta sig en timme eller två med enbart ert projekt!

  • Labbhandledaren kan också välja att ställa några (individuella!) frågor runt objektorienterad programmering: Vad menas med polymorfism? Varför vill man gömma information? Vad är skillnaden på ärvning mellan klasser och när man implementerar ett gränssnitt? Varför kan designmönster vara bra? Vad finns det för relation mellan meddelanden och metoder? Och så vidare. Var beredda på att svara.

  • Om projektet är buggigt kan handledaren välja att gå vidare till en annan grupp så att ni får försöka igen senare. Är programmet för buggigt när demotillfället närmar sig sitt slut kan ni bli hänvisade till omredovisning under nästa planerade demotid, vilket kan dröja.

  • När allt är klart lämnar ni in det ifyllda labbomslaget som ni förberedde.

Ni behöver inte lämna in projektbeskrivningen vid demonstrationen.

Steg 6: Inlämning av kod och dokumentation

Allmänna regler

Vi har strikta instruktioner för inlämning. Vi har över 130 studenter, så om vi behöver lägga ner 10 minuter extra per student "i onödan" tar det över 20 timmar som vi kunde ha lagt på handledning och kursutveckling! Därför måste vi returnera labbar som inte följer instruktionerna för komplettering.

Inlämningsprocedur

  1. Labben måste lämnas in i IDEA-format så att vi snabbt kan öppna den och navigera genom koden.

    Har du använt en annan miljö: Skapa ett nytt projekt enligt instruktionerna i labb 1. Kom ihåg att ändra More Settings / Project format till ".ipr (file based)"!

  2. Läs genom de allmänna kraven en gång till och se till att koden uppfyller dem.

  3. Kör IDEAs kodinspektioner. Det här är till stor del ett sätt att lära sig skriva kod som inte bara gör vad den ska utan även är välskriven och strukturerad.

    Förstår du inte en varning? Utmärkt! Då har du en chans att lära dig något nytt, redan innan du lämnar in koden! Läs IDEAs inbyggda beskrivningar, läs våra utökade beskrivningar, och om det inte hjälper, fråga gärna assistenten eller examinatorn.

    1. Välj Analyze | Inspect Code i menyn.
    2. Välj inspektionsprofil "TDDD78-2014-v1" och tryck OK.

    Inget automatiskt inspektionsverktyg är 100% korrekt. Det kan alltså finnas varningar som är "felaktiga". Alla sådana måste kommenteras, med god motivering. Övriga varningar ska korrigeras. Se även de allmänna kraven.

  4. Är detta en komplettering? Beskriv i så fall i filen "kompletteringar.txt" hur varje enskild kommentar från handledaren har hanterats: Vad som ändrats och var i koden, hur ni har löst problemet, och annan information som är relevant för att handledaren lätt ska se vad som gjorts.

    Gör ni flera kompletteringar ska gamla kommentarer vara kvar och tydligt skilda från nya kommentarer (markera med kompletteringsdatum). Detta underlättar för oss och är en del av examinationen där ni visar att ni förstår varför kompletteringen behövdes.

  5. Packa all källkod och andra filer som krävs tillsammans med ev. kompletteringsbeskrivning i en ZIP- eller TAR.GZ-fil. Även den uppdaterade projektbeskrivningen i PDF-format ska ligga i denna fil. Använd t.ex. File | Export to PDF i OpenOffice Writer.

    IDEAs projektdefinitionsfiler (.ipr, .iml) och liknande måste finnas med så att projektet enkelt kan öppnas i IntelliJ IDEA. Är du osäker, testa genom att packa upp arkivet på annan plats och öppna det i IDEA från denna plats!

    Döp filen enligt följande mönster, utan mellanslag i filnamnet. Vid komplettering använder ni versionsnummer "v2", "v3" och så vidare. Använd nytt versionsnummer oavsett hur liten kompletteringen är.

    • liuid123-liuid456-projekt-v1.zip
  6. Dubbelkolla och trippelkolla att allt är rätt. Felaktiga inlämningar returneras.

  7. Skicka in filen via epost – till handledaren vid inlämning i april-juni, till examinatorn efter vårterminens slut. Brevets ämne ska inledas med kurskoden TDDD78 så det kan sorteras rätt. Annars kan det dröja innan brevet blir läst.


Sidansvarig: Jonas Kvarnström
Senast uppdaterad: 2015-11-09