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 komma åt dem längre ner på den här sidan.

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

Vi räknar med att alla använder minst en bok om OO/Java som belyser ämnet från en annan vinkel än föreläsningarna. Vi följer inte en specifik bok utan du kan välja den du tycker passar dig bäst. Några exempel:

  • Java Tutorial: En relativt uppdaterad bok som ger praktisk handledning i språket och dess klassbibliotek. Finns som fysisk bok på 768 sidor men är även tillgänglig gratis online.

  • Thinking in Java: Har varit en favorit hos studenter. 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 ganska stora delar av denna grundkurs. Kan kompletteras med information från Java Tutorial eller andra källor. Fjärde utgåvan täcker Java 5/6 och kan köpas där man köper böcker.

  • Java Direkt: Föreslagen av tidigare examinatorer och är på svenska. Av Jan Skansholm, Studentlitteratur, 2014.

Föreläsningsbilder 2022

Årets bilder (2022) är under utveckling. Innan varje föreläsning läggs en preliminär version upp.

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. Globala variabler och Singletons, hur använder man dem och vad har de för nackdelar?

  • 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ö 6: 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ö 7: Egna komponenter – Hur skapar man sina egna komponenter, fyller dem med "ritat" innehåll, och uppdaterar dem vid behov?

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

  • Fö 9a: 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ö 9b: 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ö 10a: 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ö 10b: 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ö 11: Vanliga problem i projektet – några saker som kursdeltagare ofta missar eller spenderar för lite tid på i projektuppgiften.

Föreläsningsbilder 2021

Här följer samtliga gamla föreläsningsbilder från 2021. Ändringar kommer att göras!

  • 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. Globala variabler och Singletons, hur använder man dem och vad har de för nackdelar?

  • 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, teckenkodning, 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: 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.

  • Fö 11: Vanliga problem i projektet – några saker som kursdeltagare ofta missar eller spenderar för lite tid på i projektuppgiften.

Här följer samtliga föreläsningsbilder från 2020. Ändringar kommer att göras!

  • 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ö 4a: Å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ö 4b: 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. Globala variabler och Singletons, hur använder man dem och vad har de för nackdelar?

  • Fö 4c: 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, teckenkodning, teckenkodningar, ...? Hur hanterar och formatterar man strängar i Java, och vad kan man göra för misstag?

  • Fö 4d: 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?

  • 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ö 8a: Projektintroduktion – Varför, vad gör man, hur tänker man, vad krävs, ...?

  • Fö 8b: Vanliga problem i projektet – några saker som kursdeltagare ofta missar eller spenderar för lite tid på i projektuppgiften.

  • 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: Generics och Collections (bilder kommer) – Bonusföreläsning för den som vill veta mer, ingår inte i grundkursen! – 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.

Föreläsningsbilder 2019

Gamla bilder; kommer delvis att omarbetas och/eller omstruktureras!

  • 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ö 4a: 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ö 4b: Å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ö 4c: 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. Globala variabler och Singletons, hur använder man dem och vad har de för nackdelar?

  • Fö 4d: 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, teckenkodning, teckenkodningar, ...? Hur hanterar och formatterar man strängar i Java, och vad kan man göra för misstag?

  • 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: 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ö 7b: 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?

  • 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: Generics och CollectionsBonusföreläsning för den som vill veta mer, ingår inte i grundkursen! – 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.

  • Fö 11: MultitrådningBonusföreläsning för den som vill veta mer, ingår inte i grundkursen! – Vad är multitrådning? Hur använder Java trådar? Hur kommunicerar man mellan trådar? Trådsäkerhet och mutex: Hur ser man till att trådar inte stör varandra? Hur fungerar trådar med Collections? Samt en genomgång av trådfunktionalitet på högre nivå, med trådpool och Future<>.

  • Fö 12: Introduktion till designmönsterBonusföreläsning för den som vill veta mer, ingår inte i grundkursen!

Arkiv: Föreläsningsbilder 2018

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.

Här kommer samtliga föreläsningsbilder att läggas upp, så snart de har uppdaterats för årets omgång. Vissa föreläsningar kommer att täcka flera avsnitt.

  • 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?

  • 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: Organisation och namnrymder – Hur håller vi reda på tusentals klasser från många olika källor? Hur vet vi vilken som är vilken? Namnrymder, paket och import.

  • Fö 4a: Åtkomst 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ö 4b: 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. Globala variabler och Singletons, hur använder man dem och vad har de för nackdelar?

  • Fö 4c: 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ö 4d: 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, teckenkodning, teckenkodningar, ...? Hur hanterar och formatterar man strängar i Java, och vad kan man göra för misstag?

  • Fö 5a: Hierarkier, interface – Hierarkier av typer, för att modellera vad som är lika och vad som skiljer sig. Interface (gränssnitt) i Java. Statisk och dynamisk typ för ett uttryck. Dynamisk bindning och subtypspolymorfism. Den enklaste formen av ärvning: Mellan gränssnitt.

  • Fö 5b, 6a: Ärvning – 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? Varför kan man vilja modellera en ofullständig "abstrakt" klass? När används detta 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? 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ö 6b: 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ö 6c: Projektintroduktion – Varför, vad gör man, hur tänker man, vad krävs, ...?

  • Fö 7a: 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ö 7b: Egna komponenter – Hur skapar man sina egna komponenter, fyller dem med "ritat" innehåll, och uppdaterar dem vid behov?

  • Fö 8: Generics och Collections – Arrayer och listor: Skillnader, likheter och användning. Generiska datatyper. Wrappers för primitiva datatyper. En mycket kort översikt över Collections Framework med collections, listor och köer. Att iterera över samlingar av objekt.

  • Fö 9: Felhantering – Exceptions, assertions, loggning, med mera. När och hur ska man signalera ett fel? Hur fångar man upp felsignaler? Vilka fallgropar finns det? Vad är det för skillnad på exceptions och assertions?

  • Rapportskrivande (TDDE30)

Arkiv: Föreläsningsbilder 2017

Årets föreläsningar har minskat i omfång, dels för att viss information istället presenteras och diskuteras på andra sätt, dels för att kursen fokuserar tydligare på de viktigaste och mest centrala begreppen så att dessa kan behandlas på djupet.

  • Infoblad om Java: Kortfattad men detaljerad intro till Java utan objektorientering.

  • Fö 1: Kursinformation och intro till Java – 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. Bakgrund till Java och varför vi använder det. Introduktion till Java och viktiga skillnader i jämförelse med Python.

  • 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 labbar – Vad är vi ute efter? Vad är bra kvalitet? Hur genomför man labb 1? Vad är poängen med utvecklingsmiljön och versionshanteringen som vi ska använda?

  • Fö 3a: Introduktion till objektorientering i allmänhet – Vad är objekt och klasser? Varför vill vi modellera så?

  • Fö 3b: 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?

  • Fö 4: Pekare, hierarkier, interface – Hur kan ett objekt referera till, eller "innehålla", ett annat? Pekare, komposition, delegering. Hierarkier av typer, för att modellera vad som är lika och vad som skiljer sig. Interface (gränssnitt) i Java. Statisk och dynamisk typ för ett uttryck. Dynamisk bindning och subtypspolymorfism. Den enklaste formen av ärvning: Mellan gränssnitt.

  • Fö 5: Ärvning

  • Fö 6a: 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? Vad ska man tänka på när man delar upp koden i klasser och metoder, och vilka principer kan hjälpa till? Hur påverkar detta våra typhierarkier? Även: Att behålla hemligheter för sig själv.

  • Fö 6b: 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ö 6c: Intro till Tetris-projektet – och en lägesrapport.

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

  • Fö 7b: Lagring och livstid – Hur länge lever olika sorters variabler, och vilken sort vill jag använda när? Vad är "static"? Statiska fält och metoder, statiska hjälpklasser, singletons.

  • Fö 7c: Tecken och text – Hur hanterar vi vanliga och ovanliga bokstäver? Hur lagras de? Vad kan man göra för misstag?

  • Fö 8a: GUI-programmering – Hur visar man fönster och fyller dem med komponenter? Layout och händelsehantering.

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

  • Fö 9: Felhantering – Exceptions, assertions, loggning, med mera. När och hur ska man signalera ett fel? Hur fångar man upp felsignaler? Vilka fallgropar finns det? Vad är det för skillnad på exceptions och assertions?

  • Fö 10: Generics och Collections – Arrayer och listor: Skillnader, likheter och användning. Generiska datatyper. Wrappers för primitiva datatyper. En mycket kort översikt över Collections Framework med collections, listor och köer. Att iterera över samlingar av objekt.

  • Organisation och namnrymder – Hur håller vi reda på tusentals klasser från många olika källor? Hur vet vi vilken som är vilken? Namnrymder, paket och import.

Arkiv: Föreläsningsbilder 2016

Här följer samtliga föreläsningsbilder från 2016. Föreläsningarna 2017 kommer att baseras på detta, men kommer också att ha ganska stora förändringar.

Arkiv: Föreläsningsbilder 2015

Här följer samtliga föreläsningsbilder från 2015.


Sidansvarig: Jonas Kvarnström
Senast uppdaterad: 2022-02-20