Göm menyn

TDDC69 Objektorienterad prog. och Java

Översikt


Detta är en arkivsida som visar information från 2011.

Kursen innehåller fyra laborationer som är mer styrda, samt en friare projektuppgift.

  • Laboration 0 - Grundläggande Java. I den här inledande laborationen kommer vi att steg för steg gå genom några av de viktigaste grunderna i Java, utan att gå in särskilt mycket på objektorientering. Om du har god erfarenhet av Java eller något liknande språk sedan tidigare räcker det om du ögnar genom laborationen för att se vad du förväntas kunna – uppgifterna här är frivilliga och behöver inte redovisas.

  • Laboration 1 - Objektorientering i Java. I den här laborationen kommer vi att öva på begrepp inom objektorientering och hur detta stöds i Java. Vi kommer att ta upp begrepp som klasser, objekt, metoder, attribut, abstrakta klasser, interface (gränssnitt), paket, API, statisk, m.fl. Dessutom kommer vi att ta en titt på dokumentationen för Java.
    Senaste inlämningsdatum: Se nedan.

  • Laboration 2 - Polymorfism och grafik i Java. Laborationen utforskar användningen av polymorfism och designmönster i objektorienterad programmering, och är också en introduktion till programmering av grafik i Java. Här introduceras även designmönster för OOP.
    Senaste inlämningsdatum: Se nedan.

  • Laboration 3 - Objektorienterad programmering i C++. Labben introducerar grundläggande objektorienterad programmering i C++ och visar hur man kan programmera en enkel räknedosa i C++. Poängen med laborationen är att få använda många av OO-konstruktionerna i C++, härledning/arv, polymorfism, RTTI, och upptäcka skillnaderna jämfört med Java.
    Senaste inlämningsdatum: Se nedan.

  • Projektuppgift. Projektet går ut på att designa och implementera ett eget program med objektorienterade tekniker.
    Senaste inlämning av kravspec: Se nedan.
    Demo & redovisning: Se nedan.
    Senaste inlämningsdatum: Se nedan.

Deadlines

För att få "snabba svar" från labbhandledarna gäller följande deadlines för demonstration och inlämning av labbarna samt projektspecifikationen. Lämnar du in din labb eller specifikation efter denna deadline kommer den att få lägsta prioritet och behandlas när labbhandledaren har tid.

Detta anger inte hur länge vi anser ni bör spendera på varje labb! För er egen skull är det bra att vara klar med dessa uppgifter i god tid före deadline.

  • Labb 0: Behöver inte lämnas in
  • Labb 1: Fredag 16 september
  • Projektspec: Fredag 23 september
  • Labb 2: Fredag 30 september
  • Labb 3: Fredag 7 oktober

Dessutom finns följande hårda deadlines:

  • Samtliga labbar och labbkompletteringar måste vara demonstrerade och inlämnade i godkänt skick senast fredag 14 oktober. Inlämningar och kompletteringar efter detta datum tas omhand under juluppehållet (exakta datum kommer senare) och därefter hänvisar vi till nästa års kurs. Tänk även på att projektdemonstrationer prioriteras under sista veckan, så för att vara säker på att du faktiskt hinner demonstrera labbarna rekommenderar vi demonstration senast torsdag 6 oktober.
  • Projektet måste demonstreras senast under sista veckan i perioden. Tider för projektdemonstrationer kommer att bokas och alla kan inte få tid sista dagen (14 oktober) – vissa måste demonstrera på torsdagen eller till och med tisdagen. Projektet måste då vara i tillräckligt gott skick för att kunna godkännas helt eller med mindre anmärkningar, t.ex. med smärre buggar. Om större anmärkningar finns (t.ex. ett projekt som uppenbart kräver betydligt mer programmering) kan projektet omredovisas under julperioden och därefter hänvisar vi till nästa års kurs.
  • Projektet måste lämnas in (elektroniskt + labbomslag) senast söndag 23 oktober, en vecka efter kursen slutar. Detta ger ytterligare tid att korrigera buggar som ni själva har upptäckt eller som påpekades under demonstrationen.
  • Vi har normalt ingen möjlighet att assistera er efter kursens slut (sista labbtillfället 14/10), utöver den extra demonstrations- och inlämningsmöjligheten i julperioden!

Plussning är tillåten. Följ då denna procedur.

  • Ange vid inlämning av labb 2 skriftligen (via epost) vilket betyg du siktar på. Om du inte uppfyller kraven för detta betyg får du en möjlighet att komplettera under kursperioden. Uppfyller du fortfarande inte ditt önskade betyg kan du välja att komplettera under julperioden. I detta fall rapporteras ditt ursprungliga betyg inte in. Du får i detta fall alltså inte betyg på kursen förrän under julperioden.
  • Ange vid inlämning av projektet skriftligen (via epost) vilket betyg du siktar på. Om du inte uppfyller kraven för detta betyg får du möjlighet att komplettera under julperioden (inte under den ursprungliga kursperioden). I detta fall rapporteras ditt ursprungliga betyg inte in. Du får i detta fall alltså inte betyg på kursen förrän under julperioden.

Efter julperioden finns ingen möjlighet att komplettera eller plussa förrän under nästa års kurs. Det går bra att registrera betyg detta år och därefter komplettera upp under nästa år.

Grupper

Laborationerna görs två och två. Du kan anmäla dig i webreg.

Examination

Du examineras kontinuerligt under kursens gång. Detta ställer en del krav på dig under hela läsperioden. Arbeta med laborationerna kontinuerligt och se till att du fullföljer dessa i tid! Du har några få veckor på dig att göra uppgifterna. Labbar eller projekt som lämnas in efter senaste inlämningsdatum examineras nästa år!

Laborationerna och projektet utgör grunden för examinationen. Även om laborationsarbetet sker i form av grupparbete är den muntliga redovisningen individuell.

Om du arbetar i grupp är ett väl fungerande samarbete med din labbkamrat viktigt. Samtidigt som ni samarbetar och diskuterar lösningar måste ni försäkra er om att ni utvecklas individuellt. En situation där endast den ena personen i labbgruppen gör det mesta av jobbet "för att det skall gå fortare" är inte acceptabel. Jobba med parprogrammering enligt XP-modellen (parprogrammering är centralt i Extreme Programming). Byt plats vid tangentbordet varje kvart.

Laborationerna skall redovisas för din lärare. Även om ni utför uppgifterna i par förväntas ni kunna redovisa individuellt. Ni redovisar era lösningar genom att visa att de är korrekta. Detta sker vanligtvis genom att ni förklarar koden och testkör programmet för läraren. Det finns en checklista för varje laboration som läraren kommer att använda.

Läraren kan antingen godkänna er eller be er att revidera era lösningar för en senare redovisning.

Du måste under hela perioden vara beredd att redovisa alla dina tidigare lösningar för lärarna i kursen.

Vid inlämning gäller följande:

  • All inlämning sker elektroniskt.
  • Filer ska använda teckenkodning UTF-8.
  • All källkod och andra filer som krävs ska packas ihop i en ZIP-fil.
  • Filen ska döpas enligt "liuid123-liuid456-labbX.zip" eller "liuid123-liuid456-projekt.zip" utan mellanslag i filnamnet.
  • Filen ska skickas till din assistent.
  • Brevets ämne ska inledas med kurskoden TDDC69.

Dina program måste dessutom vara lättlästa och välkommenterade, och den kod du skriver måste följa de kodnings- och indenteringskonventioner som finns för Java: java.sun.com/docs/codeconv. Till exempel ska satser ska separeras med radbrytningar (inte flera satser per rad). Namngivning ska vara rimligt informativ och ska inte vara missvisande. Indentering ska vara korrekt enligt Javas standard. Utvecklingsmiljön Eclipse kan hjälpa till med detta.

Ett undantag från Javas kodstandard är dock placeringen av måsvingar där du kan välja om du vill ha den inledande måsvingen sist på raden eller ensam på en egen rad. Dock måste det vara enhetligt i hela programmet.

Här finns några anteckningar om kodstil.

Syftet med att följa en kodstandard och skriva enhetlig kod är j att göra koden mer lättläst och begriplig. Även hur källkodsfilerna organiseras är av vikt.

Skriv alltid varje klass i en egen källkodsfil. Detta gör det lätt att hitta klasserna i programmet genom att leta bland källkodsfilerna (eftersom de har samma namn). Om man lägger flera klasser i samma fil blir det svårare att få en överblick över vilka klasser som finns i programmet. Undantaget är inre klasser, som alltid ligger i samma fil som den yttre klassen (något annat vore omöjligt).

Skapa också lämpliga paket för klasserna. Slutligen är det lämpligt att skapa en ny katalog (och ett nytt Eclipse-projekt) för varje laboration.

Utvecklingsmiljöer

Eftersom alla programmeringsspråk vi använder på kursen bygger på vanliga textfiler kan man egentligen använda vilken editor som helst. Men det är ofta smidigt med en integrerad utvecklingsmiljö.

Java

Som utvecklingsmiljö för Java rekommenderas Eclipse, som erbjuder en integrerad miljö:

  • Syntaxstöd – programmeraren kan lätt åtgärda fel innan körning
  • Kompilering och körning med en knapptryckning (Alt-Shift-X, J)
  • Håller reda på TODO-listor åt programmeraren
  • Letar upp och visar innehållet i bibliotek
  • Etc.

Då det finns utmärkt information om Eclipse på nätet kommer vi inte att skriva en egen bruksanvisning här. Vi rekommenderar i stället att ni t.ex. tittar på Lars Vogels Eclipse-tutorial för en introduktion till Eclipse, eller på introduktionen från TDDC70 för mer kortfattad information. (Denna information upprepas i labben när det är dags att köra igång med Eclipse!)

Första gången du ska använda Eclipse lägger du till dess modul i ditt nuvarande terminalfönster och lägger dessutom till den i din init-fil (login-fil):

> module add prog/jdk/6 add prog/eclipse
> module initadd prog/jdk/6 prog/eclipse

Därefter, och vid framtida inloggningar:

> eclipse

Följande kommandon kan vara bra att känna till i Eclipse.

Ctrl-space
Expandera (content assist)
Ctrl-1
Quick-fix
Ctrl-Shift-M
Importera rätt paket (markören ska stå på den klass som Eclipse inte "förstår" eftersom den ännu inte är importerad)
Ctrl-Shift-F
Formattera koden
Ctrl-i
Indentera koden
Ctrl-Shift-o
Organisera importsatser
Alt-Shift-X, sedan J
Kompilera och kör programmet
Ctrl-F11
Kör senaste konfiguration
Ctrl-Shift-/ eller Ctrl-7
Kommentera bort rader (eller avkommentera dem)
Alt-Shift-J
Lägg till Javadoc-kommentar i koden
F3
Visa källkod för en klass (måste ha laddat ner och packat upp Java-källkoden)
Shift-F2
Visa Javadoc
Visa utskriftsmarginal:
Window->Preferences->General-> Editors->Text-editors->Show Print Margin

Visa radnr: 
Window->Preferences->General->Editors->Text-editors->Show line numbers

Generera get/set:
Högerklick->Source->Generate Getters and Setters...

Importera projekt:
File->Import->General->Existing Projects into Workspace->Välj fil eller mapp

Exportera projekt:
File->Export->General->Archive File->
Specificera vilket projekt och vad zip-filen skall heta

C++

C++ ingår i alla Linux/Unixsystem. Man kan använda Eclipse för programmering i C++. För detta krävs att du laddar ner en plug-in till Eclipse som heter CDT (C/C++ Development Toolkit). Senaste CDT:n förutsätter att du har Eclipse 3.2 (eller senare) och kör Java 1.4 (eller senare).

Hjälp att komma igång med the Eclipse C/C++ Development Toolkit

Inklistrat från Linux-portalen: "Det var historiskt sett varit ganska dåligt stöd för C++ i fria IDE:er. Ofta har saker som autocompletion och code browsing fungerat för enkla exempel men för mer avancerad C++ som STL och särskilt Boost har resultatet varierat. På senare tid verkar särskilt Eclipse ha mognat på denna punkt, även om Java-stödet är överlägset bättre så fungerar C++-stödet ganska okej. Autocompletion för egna mallklasser, STL samt enklare Boost-klasser är skapligt - även om det finns småbuggar och mindre brister."

Alternativt kan man använda en texteditor för att redigera källkoden, och en make-fil för att kompilera programmet. För Windows rekommenderas MinGW, som är en opensource GNU Compiler Collection (GCC). Enkla instruktioner om hur du installerar MinGW på Windows.

UML

UML-lathund

Om du själv vill skriva ut kod:

  • Du måste betala själv. Tänk på att det kan ta tid att köpa krediter till universitetets skrivarsystem.
  • Skriv ut med "a2ps *.java | lp".
  • Alternativt: "a2ps *.java | ps2pdf > filer.pdf" skapar en PDF-fil som du kan ta med dig hem.

OBS! Om du kör på linux-maskiner hemma, med UTF8-kodade filer, som du sedan skickar till dig själv och skriver ut på IDA blir det en massa skräptecken! Konvertera istället filen till ISO 8859-1:

> iconv -f UTF-8 -t ISO8859-1 original.txt > omkodad.txt

Regler för examinering av datorlaborationer vid IDA

Datorlaborationer görs i grupp eller individuellt, enligt de instruktioner som ges för en kurs. Examinationen är dock alltid individuell.

Det är inte tillåtet att lämna in lösningar som har kopierats från andra studenter, eller från annat håll, även om modifieringar har gjorts. Om otillåten kopiering eller annan form av fusk misstänks, är läraren skyldig att göra en anmälan till universitetets disciplinnämnd.

Du ska kunna redogöra för detaljer i koden för ett program. Det kan också tänkas att du får förklara varför du har valt en viss lösning. Detta gäller alla i en grupp.

Om du förutser att du inte hinner redovisa i tid, ska du kontakta din lärare. Då kan du få stöd och hjälp och eventuellt kan tidpunkten för redovisningen senareläggas. Det är alltid bättre att diskutera problem än att, t.ex., fuska.

Om du inte följer universitetets och en kurs' examinationsregler, utan försöker fuska, t.ex. plagiera eller använda otillåtna hjälpmedel, kan detta resultera i en anmälan till universitetets disciplinnämnd. Konsekvenserna av ett beslut om fusk kan bli varning eller avstängning från studierna.

Policy för redovisning av datorlaborationer vid IDA

För alla IDA-kurser som har datorlaborationer gäller generellt att det finns en bestämd sista tidpunkt, deadline, för inlämning av laborationer. Denna deadline kan vara under kursens gång eller vid dess slut. Om redovisning inte sker i tid måste, den eventuellt nya, laborationsserien göras om nästa gång kursen ges.

Om en kurs avviker från denna policy, ska information om detta ges på kursens webbsidor.


Sidansvarig: Jonas Kvarnström
Senast uppdaterad: 2012-05-29