• No results found

TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java

N/A
N/A
Protected

Academic year: 2022

Share "TDDD78, TDDE30, 729A85 Objektorienterad programmering och Java"

Copied!
42
0
0

Loading.... (view fulltext now)

Full text

(1)

TDDD78, TDDE30, 729A85 – jonas.kvarnstrom@liu.se – 2020

TDDD78, TDDE30, 729A85

Objektorienterad programmering och Java

Kursinformation

(2)

Examinator, kursledare: Jonas Kvarnström

(3)

Fråga – kommentera – avbryt!

(4)
(5)
(6)

ERT MÅL

Kunskap och färdigheter programutveckling inom

Objektorienterad programmering

(7)

-struktur

-objekt Utan OO: datastrukturer för lagring,

som ”manipuleras utifrån” av funktioner

Fundamental princip:

“Objektet bestämmer över sig själv”

(ingen manipulerar utifrån)

Varför? Grunden för begrepp som

ärvning, overriding, polymorfism, inkapsling,

Med OO har objekt både datalagring och egen funktionalitet, egna metoder

En klass är en datatyp, t.ex. Date, som anger:

Vilken information lagras i objekt av typ Date?

Vad kan objekt av den typen göra?

(8)

Ni har använt klasser och objekt i Python!

Dags att lära sig mer om detta!

…men använt många objekt/metoder

Listan är ett objekt Typen heter list:

isinstance(mylist, list)

Vi ber listan

att göra något åt oss:

Lägga till ett värde i slutet Definierat ”vanliga” funktioner…

(9)

ERT MÅL

Kunskap och färdigheter programutveckling inom

Objektorienterad programmering

Konkret OO-språk:

Java

Programmeringsvana!

Generella färdigheter:

Verktyg för utveckling Generella

begrepp:

Stark typning, pekare, kontrakt,

Viktigt i sig själv och som en bas att bygga på

(10)
(11)

Vad kommer först?

Ibland föreläsning först

läs + experimentera Ibland labba först

sätt i ett sammanhang på föreläsningar

Lyssna

Föreläsningar: Hur OO fungerar, intressanta begrepp

Ramar för förståelsen, övergripande tankar och idéer

Utföra

Labbar och projekt,

med integrerat studiematerial Erfarenhet,

förståelse för vad man kan – och vad man behöver öva på Läsa

Kursbok, instruktioner, material på nätet, … Mer detaljer – viktiga, och läses bäst i egen takt

MEDEL:

Hur ska ni uppnå era mål?

Inga seminarier?

Kurser har olika upplägg!

Använda resurserna bäst givet kursens mål, studenters erfarenhet,

(12)
(13)

13

jonkv@idajonkv@ida

Innehåll i första föreläsningarna 13

Introduktion

Kursintro, Java för Python-programmerare, typning, … Utan objektorientering: Ändå mycket nytt…

Objektorienteringens grunder

Principer och begrepp: Klasser, metoder, fält, konstruktorer, … Konkret användning av OO i Java

Grafiska gränssnitt med komponenter och

händelsehantering

Viktiga begrepp, med och utan OO

Kontrakt, åtkomst och inkapsling, lagring och livstid, pekare och komposition, identitet och likhet, …

Hierarkier och arv

Typhierarkier med gränssnitt (interface), polymorfism, statisk/dynamisk bindning, abstrakta klasser, overriding, …

Projektinfo

Att välja projekt, …

(14)

14

jonkv@idajonkv@ida

Förutsättningar för föreläsningar 14

Föreläsningar ska alltid utgå från förkunskapskraven

Har du mycket erfarenhet av Java?

Skumma gärna genom bilderna på förhand – avgör vad som är mest intressant

Men ibland finns det mer nytt än man tror…

Grundläggande begrepp inom programmering

Konkreta programmeringskunskaper i Python, motsvarande

t.ex. kurserna Funktionell och imperativ programmering del 1 och del 2.

Vad kan ni redan?

(15)

15

jonkv@idajonkv@ida

Förutsättningar för föreläsningar (2) 15

Vad bygger (närmast) på Java/OO?

Begrepp

OOP Java

Mer programmeringsvana!

TDDD80 (11 hp)U:

Mobila och sociala applikationer / Java

D, U:

TDDD86 (11 hp)

Datastrukturer, algoritmer och programmeringsparadigm / C++

(16)

16

jonkv@idajonkv@ida

Föreläsningsstil 16

Två alternativ:

Färre föreläsningsbilder, prata fritt från korta punkter

(+) Känns ”spontant”

(+) Ingen går i förväg

(–) Lätt att missa vad som sägs

(–) Lätt att glömma, måste anteckna (–) Föreläsaren kan missa detaljer

Många föreläsningsbilder, skriv ner alla relevanta fakta

(+) Bra att både höra och läsa (+) Bra referensmaterial senare

(–) Kan kännas som att läsa innantill

(17)

17

jonkv@idajonkv@ida

Webben 17

Intressant för en minoritet men inte centralt?

Rena fakta – tillgängliga metoder, …?

(18)
(19)

Steg 1: Era första(?) Java-program; individuellt

Steg 2b: Eget projekt (föreläsning senare!)

Fokus: Lär in rätt sätt, inte fel (svårt att bli av med) Både mindre uppgifter

och ett större program

Fria händer

Använd er kunskapstörst, lär er så mycket ni kan!

Labb 1 Labb 2 Labb 3 Labb 4

Steg 2a: Breddning och fördjupning; individuellt

Tetris-4, Tetris-5 Behövs för betyg 4/5 på kursen

Moment i LADOKLABx

3 hp, betyg G

Moment PRAx i LADOK

3 hp, betyg 3-

4-5 TetrisProjekt

TDDE30: Rapportskrivande 1 hp

(se FÖ om projekt) 1 hp, G

(20)

45 67 89 1011 1213 1415 1617 1819 2021 2223 24

Vecka TDDE30, 729A85 Labb1-2

Tentaperioder

Tentaperioder

Labb 3-5

TDDD78

45 67 89 1011 1213 1415 1617 1819 2021 2223 24 Vecka

Labb 1-2 Labb 3-5

Projekt

Projekt Projekt

TDDD78 alt. 2 Labb 1-2

Labb 3-5

Projekt

Många fler detaljer på

https://www.ida.liu.se/~TDDD78/labs/2020/

timeline.shtml

Läs även om deadlines där!

Klar tidigt? Se projekt som tenta, jobba till

tenta-p

(21)

"Varsågod, lär dig simma!" …eller ska man öva

”handgreppen” först?

(22)

Medel: Led till bra lösningar

Tutorial-form: Steg-för-steg-instruktioner

Fokus: Lär in rätt sätt, inte fel (svårt att bli av med)

Bara ett förberedelsesteg!

Mindre erfarenhet ➔ effektiv metod för ”rätt programmeringsvanor”

Mer erfarenhet ➔ snabbt avklarat + kan få nya insikter / idéer…

Resultatet är inte kod, utan kunskap!

Tänk, reflektera, förstå varför vi programmerar på ett visst sätt

(23)
(24)

Feedback!

Utvecklingsmiljön (IntelliJ IDEA)!

(25)

Varningar för möjliga problem (600+ ”inspektioner”)

Fixa buggar, undvik kompletteringar, lär er direkt från varningarna!

Har kraftigt minskat antal rutinproblem som ger komplettering

(26)

Om du inte (är säker på att du) förstår varningen

1. Förklaringar från IDEA

2. Förklaringar på kurswebsidorna

3. Fråga handledaren eller examinatorn

(27)

Feedback!

Handledare på labbar – Fråga!

Be om feedback även när allt verkar fungera:

Största problemen är de man inte vet om…

Utvecklingsmiljön:

Analyserar koden, visar problem / möjliga förbättringar,

ger inlärningsmöjligheter

(28)

28

jonkv@idajonkv@ida

Några ord om handledning 28

Antal personer per grupp: 15-20

Vanligt antal närvarande på labb:

0 2 4 6 8 10 12 14 16

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Slöseri med platser

Sämre schema (många salar krävs ➔ fler ”dåliga” tider)

Slöseri med handledare:

Ofta inget att göra

(29)

29

jonkv@idajonkv@ida

Några ord om handledning (2) 29

I år: resurstillfällen med färre platser

Kan någon gång bli överfullt

Säg till handledaren – kanske finns någon som inte hör hemma i salen

I gengäld: betydligt fler tillfällen i schemat – kortare tid till nästa labb

0 2 4 6 8 10 12 14 16

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Jobba utanför schemalagd tid Ta med ”färdiga frågor”

till handledningen

Fråga uppstår i slutet av labben

kanske måste vänta till nästa gång

(30)

Feedback!

Handledare på labbar – Fråga!

Be om feedback även när allt verkar fungera:

Största problemen är de man inte vet om…

Utvecklingsmiljön:

Analyserar koden, visar problem / möjliga förbättringar,

ger inlärningsmöjligheter

Ni ska också bli självständiga ingenjörer!

Tveka inte att fråga,

men prova själva också – och handledarna ska ge ledtrådar och tips, inte färdiga svar.

Kursdeltagare:

Fritt fram att diskutera, men

inte skriva av:

Lösningen ska vara er egen Inlämningar:

Kompletteringar ger också en chans

att lära sig

(31)
(32)

När är ett program (en inlämning) bra?

När körningen ”ger rätt resultat"?

Nej!

När programkoden är tydlig och välstrukturerad,

och visar att ni vet vad ni gör!

(33)

33

jonkv@idajonkv@ida

Kvalitet (1) 33

Ser det ut så här,

blir vi misstänksamma…

(34)

34

jonkv@idajonkv@ida

Kvalitet (2) 34

Har ni kopplat så här, är det farligt…

(35)

35

jonkv@idajonkv@ida

Kvalitet (3) 35

Ser det ut så här, undrar vi vad ni egentligen har gjort

Även om ni faktiskt fick lampan att lysa

(36)

36

jonkv@idajonkv@ida

Orsak och verkan 36

Programmet fungerar

(ger rätt utmatning, …) Jag kan programmera!

Jag kan programmera!

Programmet fungerar (ger rätt utmatning, …)

Programmet är

välskrivet, lätt att förstå, välstrukturerat, …

Jag förstår varför

jag gör på ett visst sätt

(37)

37

jonkv@idajonkv@ida

Kvalitet: Fokus 37

Skriv bra kod!

Lättläst

Bra namngivning

Strukturerad, modulär

Väldokumenterad och kommenterad – där det behövs mest!

Extremt viktigt för:

Hur programmet kan utökas i framtiden

Hur andra kan förstå programmet

Hur robust det är när fel uppstår

Utveckling är ofta 20% av arbetet…

Underhåll är 80%!

(38)

38

jonkv@idajonkv@ida

Hur ska man skriva kod? 38

Tips:

“Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live.”

"I usually maintain my own code, so the as-if is true."

– http://c2.com/cgi/wiki?CodeForTheMaintainer

(39)
(40)

40

jonkv@idajonkv@ida

Början och slutet… 40

(41)
(42)

Java för Python-programmerare

Varifrån kommer Java? Varför använda det?

Jämförelser: Att starta ett program, syntax, uttryck, operatorer, villkorssatser, loopar (iteration), …

Önskemål från tidigare studenter!

Föreläsning

Om det passar dig bättre!

Läs / skumma själv

Om du vet att du kan allt!

Hoppa över...

References

Related documents

plats för en referens till ett objekt av typen SegelPlan plats för en referens till ett objekt av typen String int length=0; // man kan ange ett initialt värde.

MEN i fall där objekt av våra egna klasstyper har pekare som datamedlemmar, framförallt pekare till manuellt allokerat minne så kommer vi behöva definera hur detta ska fungera i

En modellklass LifeModel i ett program som kan simulera denna utveckling lagrar den aktuella generationen i en tillståndsvariabel med deklarationen.. private

● När det kommer till heltal, bestäms den närmaste typen, storleksmässigt, som kan lagra

I Detta innebär i förlängningen att funktioner deklarerade med static inte kan komma åt variabler deklarerade utan static eftersom det inte är specificerat vilken

• Resurser ej oändliga – för föreningarnas skull behöver vi frigöra medel från administration till uppsökande verksamhet.. • Arbetet är inte nytt – redan 2018 kom vi

Rättigheterna visas (via ls -l) som tre grupper med rwx där r står för läsrättighet, w för skrivrättighet och x för rättigheten att exekvera filen.. Första gruppen

Måste uppdatera koden när man skapar nya nivåer, inte bara nivålistan. Lätt att göra