Göm menyn

Studiematerial

Föreläsningsbilder

Föreläsningsbilderna är relativt detaljerade och är en viktig del av studiematerialet för kursen. Du kan för tillfället hitta de nyaste bilderna i Lisam, till vi hinner ladda upp dem här. Förra årets bilder finns längre ner på den här sidan, och där får du också veta mer om vad varje föreläsning innehåller.

Studiematerial i labbinstruktionerna

Till skillnad från Pythonkurserna TDDE23/24 har vi här integrerat en hel del av vårt studiematerial i labbinstruktionerna. som finns i vänstermenyn. Instruktionerna beskriver alltså inte enbart vad uppgiften är utan diskuterar även varför man gör på ett visst sätt, och vi siktar också på att generalisera från uppgifterna.

Specifika tips

Var finns egentligen fallgroparna, där man kanske är lite snett ute trots att man först tror att man har gjort rätt? Vad behöver man tänka lite extra på när man går genom sin kod, speciellt när det gäller programmeringsprojektet där man har betydligt mer frihet att välja egna uppgifter och strukturera sitt eget projekt? Det är kanske inte så lätt att få ut just den informationen ur den stora volymen kursmaterial.

Därför har vi en sida med specifika projektprogrammeringstips som också är en del av studiematerialet.

Youtube

Referensmaterial

På webben finns också gott om referensmaterial. Detta är dock just menat som referens och inte lämpligt för inlärning av nya begrepp.

Böcker (fysiska och online)

Föreläsningsbilderna ska ge i princip all information som behövs för att klara av kursen.

Det kan också finnas fördelar med att ha minst en bok om OO/Java, som till exempel kan belysa ämnet från en annan vinkel än föreläsningarna och förklara på ett annat sätt. En bok kan också vara mer fullständig i vissa aspekter där föreläsningarna behöver vara mer översiktliga.

Kursen följer inte en specifik bok, utan du får gärna välja en som du tycker passar dig bra. Några exempel:

  • The Java Tutorials ger praktisk handledning i språket och dess klassbibliotek. Den täcker inte de senare versionerna av Java men har mycket matnyttigt om den grundläggande funktionaliteten som kursen fokuserar på.

  • Thinking in Java: Har varit en favorit hos studenter under en svunnen tid när fler köpte böcker. Tredje utgåvan finns tillgänglig gratis online. Täcker bara Java 1.4 (inte Java 5 eller senare), men ger å andra sidan en bra introduktion till de grundläggande begreppen, vilket räcker för relativt stora delar av denna grundkurs. Kan kompletteras med information från Java Tutorial eller andra källor.

  • Java Direkt: Föreslagen av tidigare examinatorer och är på svenska. Av Jan Skansholm, Studentlitteratur, 2014. Se även varianter som Java steg för steg (2021).

Föreläsningsbilder 2024

Här finns nu alla årets föreläsningsbilder.

Föreläsningarna är tänkta att komplettera den bok du väljer att använda, så att du får ämnet belyst från flera vinklar.

  • Infoblad om Java: Kortfattad men detaljerad intro till Java utan objektorientering. Används främst som referensmaterial och komplement till föreläsningen, men kan även läsas från start till slut av den som vill ha en mer detaljerad genomgång av språkets syntaktiska grunder.

  • Fö 1a: Kursintroduktion – Vad går kursen ut på, och hur genomför vi den? Om föreläsningar, labbar, och projekt, och varför de ser ut som de gör. Om fokus för labbar och projekt: Vad är målet och när är en inlämning "bra"?

  • Fö 1b: Intro till Java för Python-programmerare – Bakgrund till Java, var det kommer ifrån, och varför vi använder det. Introduktion till språket och viktiga skillnader i jämförelse med Python. Genomgång av syntax, på begäran av tidigare års studenter.

  • Fö 2a: Variabler med typer – Typer känner vi till sedan tidigare, men vad händer när variabler har typer? Typkontroll och dess konsekvenser. Primitiva datatyper i Java och vad man måste tänka på när man använder dem. Uppräkningstyper (enum), vad är det och varför?

  • Fö 2b: Introduktion till objektorientering i allmänhet – Vad är objekt, klasser, metoder och fält? Varför vill vi modellera så? Vad är klassdiagram i UML?

  • Fö 3a: Introduktion till objektorienterad programmering i Java – Hur skriver man klasser i Java? Hur kan och bör man använda man fält och metoder? Vad är ett objekts tillstånd? Vad är "final" och "this"? Hur delas koden upp för att skapa nya meningsfulla begrepp? Hur skapar man objekt med konstruktorer, och vad ska konstruktorerna göra? Vad är relationen mellan enum-typer och klasser?

  • Fö 3b: Kontrakt – Vad lovar en klass eller metod, och vad lovar den inte? Varför syns inte detta i koden? Vad "får" man ändra efter att koden har publicerats?

  • Fö 3c: Åtkomsträttigheter och inkapsling – Hur gömmer vi data och metoder för obehöriga? Varför vill vi göra det, och hur underlättar det att uppfylla kontrakt? Vad är inkapsling?

  • Fö 4a: Lagring och livstid – Hur länge lever olika sorters variabler? Vilken sort vill jag använda när, och vad finns det för fallgropar? Vad är "static"? Statiska fält och metoder, statiska hjälpklasser.

  • Fö 4b: Tecken och text – Hur hanterar vi vanliga och ovanliga bokstäver? Hur håller man reda på dem, när det finns tiotusentals olika? Vad är teckenrepertoarer, teckenuppsättning, teckenkodningar, ...? Hur hanterar och formatterar man strängar i Java, och vad kan man göra för misstag?

  • Fö 4c: Organisation och namnrymder – Hur håller vi reda på tusentals klasser från många olika källor? Hur namnger vi dem så att vi vet vilken som är vilken? Namnrymder, paket och import.

  • Fö 5a: Pekare och komposition – Hur kan ett objekt referera till, eller "innehålla", ett annat? Vad är pekare och vad har de att göra med adresser? Hur fungerar pekare i praktiken, allmänt och i Java? Hur använder man pekare för komposition av objekt? Vad är delegering?

  • Fö 5b: Typhierarkier, gränssnitt och ärvning (del 1) – Hierarkier av typer, för att modellera vad som är lika och vad som skiljer sig. Interface (gränssnitt) i Java. Den enklaste formen av ärvning: Mellan gränssnitt. Hur ärver vi implementation från en klass till en annan? Vilken sorts ärvning är tillåten i Java? Hur påverkar detta konstruktorer i underklasser?

  • Fö 6a: GUI-programmering – Hur visar man fönster? Hur fungerar komponenter i ett GUI? Hur definierar man en layout för komponenterna, och hur anger man vad som ska hända när någon till exempel trycker på en knapp?.

  • Fö 6b: Egna komponenter – Hur skapar man sina egna komponenter, fyller dem med "ritat" innehåll, och uppdaterar dem vid behov?

  • Fö 7a: Felhantering – Vad är det för skillnad på exceptions ("undantag") och andra typer av felhantering? När och hur ska man signalera ett fel med exceptions? Hur fångar man upp felsignaler? Vilka fallgropar behöver man se upp med? Hur hittar man fel i felhanteringen?

  • Fö 7b: Identitet och likhet – Är det samma objekt, eller ett likadant? Vad är det för skillnad? Hur anger vi när två objekt ska ses som lika?

  • Fö 8: Projektintroduktion – Varför, vad gör man, hur tänker man, vad krävs, ...?

  • Fö 9a: Mer om typhierarkier – Substitutionsprincipen. Statisk typ för ett uttryck, dynamisk typ för ett objekt. Dynamisk bindning och subtypspolymorfism. Varför kan man vilja modellera en ofullständig "abstrakt" klass? Nu när variabler kan peka på värden av olika klasser, hur ser man vilken typ värdet har? Varför vill man oftast ha andra lösningar än att inspektera värdetypen?

  • Fö 9b: Att använda typhierarkier – När använder man abstrakta klasser och när använder man gränssnitt? När är det bra med ärvning och när vill man använda andra lösningar, som komposition eller till och med en enda "samlingsklass"?

  • Fö 10: Vanliga problem i projektet – några saker som kursdeltagare ofta missar eller spenderar för lite tid på i projektuppgiften.
  • Fö 11: Generics och CollectionsBonusföreläsning för den som vill veta mer! – Arrayer och listor: Skillnader, likheter och användning. Generiska datatyper och parametrisk polymorfism, inklusive bounded wildcards. Wrappers för primitiva datatyper. En mycket kort översikt över Collections Framework med collections, listor och köer. Sortering och hur man pluggar in sorteringsordningar. Att iterera över samlingar av objekt, och skriva en egen iteratorklass.


Sidansvarig: Jonas Kvarnström
Senast uppdaterad: 2024-03-05