82
Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019 Vecka 1. Introduktion Björn Regnell Datavetenskap, LTH, Lunds universitet EDAA45, Lp1-2, HT 2019 1 / 81

Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1. Introduktion

Björn Regnell

Datavetenskap, LTH, Lunds universitet

EDAA45, Lp1-2, HT 2019

1 / 81

Page 2: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

1 IntroduktionOm kursenAtt lära denna läsvecka w01Om programmeringDe enklaste beståndsdelarna: litteraler, uttryck, variablerFunktionerLogikSatser

2 / 81

Page 3: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Om kursen

Om kursen

3 / 81

Page 4: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Vad lär du dig?

Grundläggande principer för programmering:Sekvens, Alternativ, Repetition, Abstraktion (SARA)=⇒ Inga förkunskaper i programmering krävs!Implementation av algoritmerTänka i abstraktioner, dela upp problem i delproblemFörståelse för flera olika angreppssätt:

imperativ programmeringobjektorienteringfunktionsprogrammering

Programspråket Scala på djupet och kännedom om JavaUtvecklingsverktyg (editor, kompilator, utvecklingsmiljö)Implementera, testa, felsöka

4 / 81

Page 5: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

VeckoöversiktW Modul Övn LabW01 Introduktion expressions kojoW02 Program programs –W03 Funktioner functions irritextW04 Objekt objects blockmoleW05 Klasser classes –W06 Mönster, undantag patterns blockbattleW07 Sekvenser sequences shuffleKS KONTROLLSKRIVN. – –W08 Matriser, typparametrar matrices lifeW09 Mängder, tabeller lookup wordsW10 Arv inheritance snakeW11 Språkskillnader scala-java javatextW12 Sortering sort –W13 Repetition, tentaträning, projekt examprep ProjektW14 Extra extra –T TENTAMEN – –

5 / 81

Page 6: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Kursutveckling och förnyelseScala infördes 2016 som förstaspråk påDatateknikprogrammet.Den största förnyelsen av den inledandeprogrammeringskursen sedan vi införde Java 1997.

Nya föreläsningarNya övningarNya laborationerNya skrivningar

Kursmaterialet är öppen källkod och fritt tillgängligt.Studentmedverkan i kursutvecklingen:

45 bidragare påhttps://github.com/lunduniversity/introprogDu är hjärtligt välkommen att bidra!

www.lth.se/nyheter-och-press/nyheter/visa-nyhet/article/scala-blir-foerstaspraak-paa-datateknikprogrammet/

6 / 81

Page 7: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Historik förstaspråk på D vid LTH

Förstaspråkens historia på Datateknikprogrammet:

Scala 2016Java 1997Simula 1990Pascal 1982, Datateknikprogrammet grundadesAlgol1 förhistoria med hålkortsprogrammering

1Scalas uppfinnare Prof. Martin Odersky vid EPFL i Lausanne, Schweiz,skrev även stora delar av Java-kompilatorn, och var en gång i tiden doktorandför Prof. Niklaus Wirth, som låg bakom Algol, Pascal, Modula m.m.

7 / 81

Page 8: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Varför Scala + Java som förstaspråk?Varför Scala?

Enkel och enhetlig syntax => lätt att skrivaEnkel och enhetlig semantik => lätt att fattaKombinerar flera angreppsätt => lätt att visa olika lösningarStatisk typning + typhärledning => färre buggar + koncis kodScala Read-Evaluate-Print-Loop => lätt att experimentera

Varför Java?Spridning: mest använda (?) språketÖppenhet: massor av fritt tillgängliga kodbibliotekKompabilitet: fungerar på många platformarEffektivitet: avancerad & mogen teknik ger snabba program

Scala och Java fungerar utmärkt tillsammans:Javabibliotek kan användas direkt i ditt Scala-program

Illustrera likheter och skillnader mellan olika språk=> Djupare lärande

8 / 81

Page 9: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Varför Scala + Java som förstaspråk?Varför Scala?

Enkel och enhetlig syntax => lätt att skrivaEnkel och enhetlig semantik => lätt att fattaKombinerar flera angreppsätt => lätt att visa olika lösningarStatisk typning + typhärledning => färre buggar + koncis kodScala Read-Evaluate-Print-Loop => lätt att experimentera

Varför Java?Spridning: mest använda (?) språketÖppenhet: massor av fritt tillgängliga kodbibliotekKompabilitet: fungerar på många platformarEffektivitet: avancerad & mogen teknik ger snabba program

Scala och Java fungerar utmärkt tillsammans:Javabibliotek kan användas direkt i ditt Scala-program

Illustrera likheter och skillnader mellan olika språk=> Djupare lärande

8 / 81

Page 10: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Hur lär du dig?

Genom praktiskt eget arbete: Lära genom att göra!Övningar: applicera koncept på olika sättLaborationer: kombinera flera koncept till en helhet

Genom studier av kursens teori: Skapa förståelse!Genom samarbete med dina kurskamrater: Gå djupare!

9 / 81

Page 11: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Kurslitteratur

Kompendiummed övningar & laborationer,trycks till självkostnad enl. beställninghttp://cs.lth.se/pgk/bokpaket

Föreläsningsbilder på kurshemsidanhttp://cs.lth.se/pgk/

Nätresurser enl. länkar i kursmaterialet

Bra bredvidläsning:– för nybörjare:

– för de som redan kan OO:

10 / 81

Page 12: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Beställning av kompendium och snabbreferensKompendiet finns i pdf för fri nedladdning enl. CC-BY-SA, men detrekommenderas starkt att du köper den tryckta bokversionen.Det är mycket lättare att ha övningar och labbar på papper bredvidskärmen, när du ska tänka, koda och plugga!Snabbreferensen finns också i pdf men du behöver ha en trycktversion eftersom det är enda tillåtna hjälpmedlet på skriftligakontrollskrivningen och tentamen.Kompendiet och snabbreferens trycks här i E-huset och säljs avinstitutionen till självkostnadspris.Pris för bokpaket beror på hur många som beställer. Förbeställning480kr, efterbeställning 740kr. Om du missat förbeställning men hargiltiga skäl (tex reservantaging) kontakt kursansvarig.Snabbreferens kostar 40 kr i enstaka ex men ingår i bokpaketet.Kryssa i BOK på listan som snart skickas runt – tryckning sker sedanenligt din beställning.Du betalar med Swish till 123 170 4584 och visar upp betalningsbevisi mobilen för kurssekreterare på institutionens expedition, våning 2.

11 / 81

Page 13: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Föreläsningsanteckningar

Föreläsningbilder uppdateras under kursens gång.http://cs.lth.se/pgk/foerelaesningar/

Fram till mån kl 13 aktuell vecka är de bilder som ligger uteunder pågående uppdatering sedan förra årets version.Latex-koden för alla bilder finns här:github.com/lunduniversity/introprog/tree/master/slidesKom gärna med förslag på innehåll!

12 / 81

Page 14: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Personal 2019

Kursansvarig: Prof. Björn Regnell, [email protected], E:2413Handledare: 13st teknologer:

Alexander Sandström, Evelina Danielsson, Emil Wihlander,Hugo Hildeman, Henrik Olsson, Jos Rosenqvist, JonSwedberg, Linnea Allander, Miro Brodlova, Oskar Berg,Oliver Persson, Rasmus Beck, Samer Alkhodary

Kursadmin: Ulrika Templing, rum E:2179, Birger Swahn, rum E:2181Exp.tid: måndag till fredag 9.30-11.30http://cs.lth.se/kontakt/expedition/

13 / 81

Page 15: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Kursmoment — varför?Föreläsningar: skapa översikt, ge struktur, förklara teori, svara påfrågor, motivera varför.Övningar: bearbeta teorin steg för steg, grundövningar för alla,extraövningar om du vill/behöver öva mer, fördjupningsövningar omdu vill gå djupare; förberedelse inför laborationerna.Laborationer: obligatoriska, sätta samman teorins delar i ett störreprogram; lösningar redovisas för handledare; gk på alla för att få tenta.Resurstider: få hjälp med övningar och laborationsförberedelser avhandledare, fråga vad du vill.Samarbetsgrupper: grupplärande genom samarbete, hjälpa varandra.Kontrollskrivning: obligatorisk, diagnostisk, kamraträttad; kan gesamarbetsbonuspoäng till tentan.Individuell projektuppgift: obligatorisk, du visar att du kan skapa ettstörre program självständigt; redovisas för handledare.Tentamen: obligatorisk, skriftlig, enda hjälpmedel: snabbreferensen.http://cs.lth.se/pgk/quickref

14 / 81

Page 16: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Detta är bara början...

Exempel på efterföljande kurser som bygger vidare på denna:Årskurs 1

Programmeringsteknik – fördjupningskursUtvärdering av programvarusystemDiskreta strukturer

Årskurs 2Objektorienterad modellering och designProgramvaruutveckling i gruppAlgoritmer, datastrukturer och komplexitetFunktionsprogrammering

15 / 81

Page 17: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Registrering

Fyll i listan REGISTRERING EDAA45 som skickas runt.Kryssa i kolumnen ÅBEROPAR PLATS om vill gå kursen23Kryssa i kolumnen KAN VARA KURSOMBUD om du kantänka dig att vara kursombud under kursens gång:

Alla LTH-kurser ska utvärderas under kursens gång ochefter kursens slut.Till det behövs kursombud – minst 2 D-are och 2 W-are.Ni kommer att bli kontaktade av studierådet.

Om du ej ska gå kursen men vill bli indelad i schemagruppskriv i kommentarskolumnen: ”vill ha schemagrupp”

2D1:a som redan gått motsvarande högskolekurs? Uppsök studievägledningen3D2:a eller äldre som redan påbörjad EDA016/EDA011/EDA017 el likn.?

Övergångsregler: Alla labbar gk: tenta EDA011/017; annars kom och prata på rasten16 / 81

Page 18: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Förkunskaper

Förkunskaper 6= FörmågaVarken kompetens eller personliga egenskaper är statiska”Programmeringskompetens” är inte en enda enkelförmåga utan en komplex sammansättning av flera olikaförmågor som utvecklas genom hela livetEtt innovativt utvecklarteam behöver många olikakompetenser för att vara framgångsrikt

17 / 81

Page 19: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Förkunskapsenkät

Om du inte redan gjort det fyll i förkunskapsenkätensnarast: http://cs.lth.se/pgk/introsurveyDina svar behandlas internt och all redovisad statistikanonymiseras.Enkäten ligger till grund för randomiserad gruppindelning isamarbetsgrupper, så att det blir en spridning avförkunskaper inom gruppen.Gruppindelning publiceras här, obs vänta på v1.0, Ctrl+F5:http://cs.lth.se/pgk/grupp

Ditt gruppnummer (t.ex. D1.7b) styr vilken schema gruppdu tillhör (t.ex. D1.7), sehttp://cs.lth.se/pgk/schema/timeedit/

18 / 81

Page 20: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Samarbetgrupper

Ni delas in i samarbetsgrupper om ca 5 personer baserat påförkunskapsenkäten, så att olika förkunskapsnivåer sammanförsEn av laborationerna (snake) i lp2 är en mer omfattande grupplabboch kommer att göras i din samarbetsgrupp.

Kontrollskrivningen i halvtid kan ge samarbetsbonus (max 5p) somadderas till ordinarie tentans poäng (max 100p) med medelvärdet avgruppmedlemmarnas individuella kontrollskrivningspoängBonus b för varje person i en grupp med n medlemmarmed pi poäng vardera på kontrollskrivningen: b =

n∑i=1

pin

19 / 81

Page 21: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Varför studera i samarbetsgrupper?

Huvudsyfte: Bra lärande!Pedagogisk forskning stödjer tesen att lärandet blir merdjupinriktat om det sker i utbyte med andraEtt studiesammanhang med höga ambitioner ochrespektfull gemenskap gör att vi når mycket längreVarför ska du som redan kan mycket aktivt dela med dig avdina kunskaper?

Förstå bättre själv genom att förklara för andraTräna din pedagogiska förmågaFörbered dig för ditt kommande yrkesliv sommjukvaruutvecklare

20 / 81

Page 22: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

SamarbetskontraktGör ett skriftligt samarbetskontrakt med dessa och ev. andrapunkter som ni också tycker bör ingå:

1 Återkommande mötestider per vecka2 Kom i tid till gruppmöten3 Var väl förberedd genom självstudier inför gruppmöten4 Hjälp varandra att förstå, men ta inte över och lös allt5 Ha ett respektfullt bemötande även om ni har olika åsikter6 Inkludera alla i gemenskapen

Diskutera hur ni ska uppfylla dessa innan alla skriver på.Ta med samarbetskontraktet och visa för handledare på labb 1.

Om arbetet i samarbetsgruppen inte fungerar ska ni mejlakursansvarig och boka mötestid!

21 / 81

Page 23: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Bestraffa inte frågor!

Det finns bättre och sämre frågor vad gäller hur mycketman kan lära sig av svaret, men all undran är en chansatt i dialog utbyta erfarenheter och lärande.Den som frågar vill veta och berättar genom frågan någotom nuvarande kunskapsläge.Den som svarar får chansen att reflektera över vad somkan vara svårt och olika vägar till djupare förståelse.I en hälsosam lärandemiljö är det helt tryggt att visa attman ännu inte förstår, att man gjort ”fel”, att man har meratt lära, etc.Det är viktigt att våga försöka även om det blir ”fel”:det är ju då man lär sig!

22 / 81

Page 24: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Plagiatregler

Läs dessa regler noga och diskutera isamarbetsgrupperna:

http://cs.lth.se/utbildning/samarbete-eller-fusk/Föreskrifter angående obligatoriska moment

Ni ska lära er genom eget arbete och genom brasamarbete.Samarbete gör att man lär sig bättre, men man lär sig inteav att kopiera andras lösningar.Plagiering är förbjuden och kan medföradisciplinärende och avstängning.Du får INTE lägga ut laborationslösningar öppet på githubeller på annan plats där någon annan kan komma åt dem!

23 / 81

Page 25: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

En typisk kursvecka

1 Gå på föreläsningar på måndag–tisdag2 Jobba individuellt med teori, övningar, labbförberedelser

på måndag–torsdag3 Träffas i samarbetsgruppen och hjälp varandra att förstå

mer och fördjupa lärandet, förslagsvis på återkommandetider varje vecka då alla i gruppen kan

4 Kom till resurstiderna och få hjälp och tips av handledareoch kurskamrater på onsdag–torsdag

5 Genomför den obligatoriska laborationen på fredagSe detaljerna och undantagen i schemat: cs.lth.se/pgk/schema

24 / 81

Page 26: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Övningar

Programmering lär man sig bäst genom att programmera...Genom övningarna bearbetar du teorins olika delar via egnaundersökningar med Scala REPL som viktigaste verktyg.Fokusera på att förstå vad som händer när du kör din kod. Om du bararusar vidare utan reflektion lär du dig inte alls lika bra.Till de flesta övningar finns facit. Titta inte på facit förrän du själv gjortett försök. Det finns ofta många olika sätt att åstadkomma samma sak,och din lösningsvariant kan vara lika bra som den i facit – använd REPLför att verifiera att din lösning fungerar. Diskutera med handledare omdu är osäker på vad som är ok.Skapa en miljö för koncentration och lärande på djupet. Stäng telefon,be kompisar i datorsalen att inte prata för högt, etc.

25 / 81

Page 27: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Ge din hjärna rätt förutsättningar för programmering

26 / 81

Page 28: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

LaborationerPå laborationerna sammanför du veckans koncept till en helhet i ettstörre program och kollar att du kan grunderna inför kommande veckor.Labbarna är individuella (utom en) och obligatoriska.Gör övningarna och labbförberedelserna noga innan själva labben –detta är ofta helt nödvändigt för att du ska hinna klart. Dinalabbförberedelser kontrolleras av handledare under labben.Är du sjuk? Anmäl det före labben till [email protected],få hjälp på resurstid och redovisa på resurstid (eller labbtid, närhandledaren har tid över)Hinner du inte med hela labben? Se till att handledaren noterar”kompletteras”, och fortsätt på resurstid och ev. uppsamlingstider.Läs noga kapitel noll ”Anvisningar” i kompendiet!Laborationstiderna är gruppindelade enligt schemat. Du ska gå till dentid och den sal som motsvarar din grupp som visas i TimeEdit.Gruppindelning blir ”klar” senast i morgon tisdag kl 13.Nya versioner släpps här: http://cs.lth.se/pgk/gruppOBS! Rensa cachen (Ctrl+F5) och kolla versionsnummer.

27 / 81

Page 29: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

ResurstiderPå resurstiderna får du hjälp med övningar och labbförberedelser.Kom till minst en resurstid per vecka, se Schema i TimeEdit.Du får i mån av plats gå på flera resurstider per vecka. Om det blir fullt i ett rumprioriteras schemagrupper:

Tid Lp1 Sal Grupper med prioOns 10-12 v1-7 Alfa D1.09Ons 10-12 v1-7 Beta D1.10Ons 13-15 v1-7 Alfa D1.07Ons 13-15 v1-7 Beta D1.08Ons 15-17 v1-7 Alfa D1.03Ons 15-17 v1-7 Beta D1.04Tor 10-12 v1-7 Alfa D1.01Tor 10-12 v1-7 Beta D1.02Tor 13-15 v1-7 Alfa D1.11Tor 13-15 v1-7 Beta D1.12Tor 15-17 v1-7 Alfa D1.05Tor 15-17 v1-7 Beta D1.06

W-are tilldelas D-schemagrupp enl. samarbetsgruppindelningen.28 / 81

Page 30: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Kursens virtuella maskin

Enklaste sättet att få igång kursens alla verktyg på dinegen dator är att köra kursens virtuella maskin med hjälpav VirtualBox.Installera virtualbox:https://www.virtualbox.org/wiki/Downloads

Ladda ner vm hemma (inte över eduroam för det är 5GBoch tar en evighet): http://cs.lth.se/pgk/vmEller kopiera filerna från USB-pinne som går runt i salen.Skicka vidare till nästa; lämna till Björn Regnell kl 15.Om du inte hinner idag kan du kopiera på nästa gång.Mer info finns i Appendix K i compendium.pdf

29 / 81

Page 31: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

På Rasten...

Uppropslista fastställsEv. önskemål ang. gruppindelning pga speciella skälBläddra i bredvidläsningBeställning av bokpaket om du inte redan gjort dethttp://cs.lth.se/pgk/bokpaket

Fyll i förkunskaper om du inte redan gjort dethttp://cs.lth.se/pgk/introsurvey

...

30 / 81

Page 32: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Att lära denna läsvecka w01

Att lära denna läsvecka w01

31 / 81

Page 33: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Att lära denna läsvecka w01

Modul Introduktion: Övn expressions → Labb kojo

� sekvens� alternativ� repetition� abstraktion� editera� kompilera� exekvera� datorns delar� virtuell maskin� litteral� värde� uttryck� identifierare� variabel� typ� tilldelning� namn

� val� var� def� definera och anropafunktion� funktionshuvud� funktionskropp� procedur� inbyggda grundtyper� Int� Long� Short� Double� Float� Byte� Char� String

� println� typen Unit� enhetsvärdet ()� stränginterpolatorn s� if� else� true� false� MinValue� MaxValue� aritmetik� slumptal� math.random� logiska uttryck� de Morgans lagar� while-sats� for-sats

32 / 81

Page 34: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Om programmering

Om programmering

33 / 81

Page 35: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Att skapa koden som styr världen

I stort sett alla delar av samhället ärberoende av programkod:

kommunikationtransportbyggsektornstatsförvaltningfinanssektornmedia & underhållningsjukvårdövervakningintegritetupphovsrättmiljö & energisociala relationerutbildning...

Hur blir ditt framtida yrkesliv somsystemutvecklare?

Det är sedan lång tid enskriande brist på utvecklareoch det blir bara värre...CIO 2018-11-09

Störst brist är det på kvinnligautvecklare:SVT 2016-12-03

Global kompetensmarknadCIO 2016-02-01CS 2015-06-14CS 2016-07-14

34 / 81

Page 36: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Utveckling av mjukvara i praktiken

Inte bara kodning: kravbeslut, releaseplanering, design,test, versionshantering, kontinuerlig integration,driftsättning, återkoppling från dagens användare, ekonomi& investering, gissa om morgondagens användare, ...Teamwork: Inte ensamma hjältar utan autonoma team idecentraliserade organisationer med innovationsuppdragSnabbhet: Att koda innebär att hela tiden uppfinna nya”byggstenar” som ökar organisationens förmåga att snabbtskapa värde med hjälp av mjukvara. Öppen källkod.Skapa kraftfulla API:er.Livslångt lärande: Lär nytt och dela med dig hela tiden.Exempel på pedagogisk utmaning: hjälp andra förstå ochanvända ditt API =⇒ Samarbetskultur

35 / 81

Page 37: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Programming unplugged: Två frivilliga?

Page 38: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Editera och exekvera ett program

Page 39: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Vad är en dator?

Page 40: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Hur fungerar en dator?

Indata-enhet

CPU

Utdata-enhet

Minne med minnesceller

address innehåll0 421 132 183 214 555 646 48... ...

Minnet innehåller endast heltal somrepresenterar data och instruktioner.

39 / 81

Page 41: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Vad är programmering?

Programmering innebär att ge instruktioner till en maskin.Ett programmeringsspråk används av människor för attskriva källkod som kan översättas av en kompilator tillmaskinspråk som i sin tur exekveras av en dator.

Ada Lovelace publicerade det förstaprogrammet redan på 1800-talet ämnat för enkugghjulsdator.

sv.wikipedia.org/wiki/Programmeringen.wikipedia.org/wiki/Computer_programmingHa picknick i Ada Lovelace-parken på Brunnshög!

40 / 81

Page 42: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Vad är en kompilator?

Källkod Förmänniskor

Kompilator

Maskinkod Förmaskiner

Grace Hopper uppfann kompilatorn 1952.en.wikipedia.org/wiki/Grace_Hopper

41 / 81

Page 43: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Virtuell maskin (VM) == abstrakt hårdvara

En VM är en ”dator”implementerad i mjukvarasom kan tolka en generell”maskinkod” somöversätts under körningtill den verkligamaskinens specifikamaskinkod.Med en VM blir källkodenplattformsoberoendeoch fungerar på mångaolika maskiner.Exempel JVM:Java Virtual Machine

Källkod

Kompilator

Generell ”maskinkod”

VM interpreterar

Specifik maskinkod

42 / 81

Page 44: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Vad består ett program av?

Text som följer entydiga språkregler (grammatik):Syntax: textens konkreta utseendeSemantik: textens betydelse (vad maskinen gör/beräknar)

Nyckelord: ord med speciell betydelse, t.ex. if, elseDeklarationer: definitioner av nya ord: def gurka = 42

Satser är instruktioner som gör något: print("hej")Uttryck är instruktioner som beräknar ett resultat: 1 + 1

Data är information som behandlas: t.ex. heltalet 42Instruktioner ordnas i kodstrukturer: (SARA)

Sekvens: ordningen spelar roll för vad som händerAlternativ: olika saker händer beroende på uttrycks värdeRepetition: satser upprepas många gångerAbstraktion: nya byggblock skapas för att återanvändas

43 / 81

Page 45: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Exempel på programmeringsspråk

Det finns massor med olika språk och det kommer ständigt nya.

Exempel:JavaCC++C#PythonJavaScriptScala

Topplistor:

Redmonk languagerankings

TIOBE Index

PYPL Index

44 / 81

Page 46: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Redmonk Language Rankings: Github, Stackoverflow

45 / 81

Page 47: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Olika programmeringsparadigm

Det finns många olika programmeringsparadigm (sätt attprogrammera på), till exempel:

imperativ programmering: programmet är uppbyggt avsekvenser av olika satser som påverkar systemets tillståndobjektorienterad programmering: en sorts imperativprogrammering där programmet består av objekt som sammanfördata och operationer på dessa datafunktionsprogrammering: programmet är uppbyggt avsamverkande (matematiska) funktioner som undviker föränderligdata och tillståndsändringardeklarativ programmering, logikprogrammering: programmetär uppbyggt av logiska uttryck som beskriver olika fakta eller villkoroch exekveringen utgörs av en bevisprocedur som söker eftervärden som uppfyller fakta och villkor

46 / 81

Page 48: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Hello worldScala-skript:

scala> println("Hello World!")Hello World!

Scala-applikation:object Hello {

def main(args: Array[String]): Unit = println("Hello world!")}

Java-applikation:public class Hello {

public static void main(String[] args) {System.out.println("Hello world!");

}}

47 / 81

Page 49: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Utvecklingscykeln

editera; kompilera; hitta fel och förbättringar; editera; kompilera;hitta fel och förbättringar; editera; kompilera; hitta fel ochförbättringar; editera; kompilera; hitta fel och förbättringar;editera; kompilera; hitta fel och förbättringar; editera; kompilera;hitta fel och förbättringar; ...upprepa(1000){

editerakompileratesta

}

48 / 81

Page 50: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Utvecklingsverktyg

Din verktygskunskap är mycket viktig för din produktivitet.Lär dig kortkommandon för vanliga handgrep.Verktyg vi använder i kursen:

Scala REPL: från övn 1Texteditor för kod, t.ex VS code: från övn 2Kompilera med scalac och javac: från övn 2Integrerad utvecklingsmiljö (IDE)

Kojo: från lab 1IntelliJ IDEA (alt. ScalaIDE/Eclipse): från läsperiod 2

jar för att packa ihop och distribuera klassfilerjavadoc och scaladoc för dokumentation av kodbibliotek

Andra verktyg som är bra att lära sig:git för versionshanteringGitHub för kodlagring – men inte av lösningar till labbar!

49 / 81

Page 51: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

De enklaste beståndsdelarna: litteraler, uttryck, variabler

De enklaste beståndsdelarna:litteraler, uttryck, variabler

50 / 81

Page 52: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Literaler

En literal representerar ett fixt värde i koden och användsför att skapa data som programmet ska bearbeta.Exempel:42 heltalslitteral42.0 decimaltalslitteral'!' teckenlitteral, omgärdas med ’enkelfnuttar’"hej" stränglitteral, omgärdas med ”dubbelfnuttar”true litteral för sanningsvärdet ”sant”

Literaler har en typ som avgör vad man kan göra med dem.

51 / 81

Page 53: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Exempel på inbyggda datatyper i Scala

Alla värden, uttryck och variabler har en datatyp, t.ex.:Int för heltalLong för extra stora heltal (tar mer minne)Double för decimaltal, så kallade flyttal med flytande decimalpunktString för strängar

Kompilatorn håller reda på att uttryck kombineras på ett typsäkert sätt.Annars blir det kompileringsfel.Scala och Java är s.k. statiskt typade språk, vilket innebär att kontrollav typinformation sker vid kompilering (eng. compile time)4.Scala-kompilatorn gör typhärledning: man slipper skriva typerna omkompilatorn kan lista ut dem med hjälp av typerna hos deluttrycken.

4Andra språk, t.ex. Python och Javascript är dynamiskt typade och därskjuts typkontrollen upp till körningsdags (eng. run time)Vilka är för- och nackdelarna med statisk vs. dynamisk typning?

52 / 81

Page 54: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Grundtyper i Scala

Dessa grundtyper (eng. basic types) finns inbyggda i Scala:

Svenskt namn Engelskt namn Grundtyperheltalstyp integral type Byte, Short, Int, Long, Charflyttalstyp floating point

number typesFloat, Double

numeriska typer numeric types heltalstyper och flyttalstypersträngtyp(teckensekvens)

string type String

sanningsvärdestyp(boolesk typ)

truth value type Boolean

53 / 81

Page 55: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Grundtypernas implementation i JVM

Grundtyp i Antal Omfång primitiv typ iScala bitar minsta/största värde Java & JVMByte 8 −27 ... 27 − 1 byte

Short 16 −215 ... 215 − 1 short

Char 16 0 ... 216 − 1 char

Int 32 −231 ... 231 − 1 int

Long 64 −263 ... 263 − 1 long

Float 32 ± 3.4028235 · 1038 float

Double 64 ± 1.7976931348623157 · 10308 double

Grundtypen String lagras som en sekvens av 16-bitars tecken av typenChar och kan vara av godtycklig längd (tills minnet tar slut).

54 / 81

Page 56: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Uttryck

Ett uttryck består av en eller flera delar som efterevaluering ger ett resultat.Delar i ett uttryck kan t.ex. vara:literaler (42), operatorer (+), funktioner (sin), ...Exempel:

Ett enkelt uttryck:42.0Sammansatta uttryck:40 + 2(20 + 1) * 2sin(0.5 * Pi)"hej" + " på " + "dej"

När programmet tolkas sker evaluering av uttrycket, vilketger ett resultat i form av ett värde som har en typ.

55 / 81

Page 57: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Variabler

En variabel kan tilldelas värdet av ett enkelt eller sammansatt uttryck.En variabel har ett variabelnamn, vars utformning följer språkets reglerför s.k. identifierare.En ny variabel införs i en variabeldeklaration och då den kan ges ettvärde, initialiseras. Namnet användas som referens till värdet.Exempel på variabeldeklarationer i Scala, notera nyckelordet val:

val a = 0.5 * Pival length = 42 * sin(a)val exclamationMarks = "!!!"val greetingSwedish = "Hej på dej" + exclamationMarks

Vid exekveringen av programmet lagras variablernas värden i minnetoch deras respektive värde hämtas ur minnet när de refereras.Variabler som deklareras med val kan endast tilldelas ett värde enenda gång, vid den initialisering som sker vid deklarationen.

56 / 81

Page 58: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Regler för identifierare

Enkel identifierare: t.ex. gurka2tomatBörja med bokstav...följt av bokstäver eller siffrorKan även innehålla understreck

Operator-identifierare, t.ex. +:Börjar med ett operatortecken, t.ex. + - * / : ? ~ #Kan följas av fler operatortecken

En identifierare får inte vara ett reserverat ord, sesnabbreferensen för alla reserverade ord i Scala & Java.Bokstavlig identifierare: `kan innehålla allt`

Börjar och slutar med backticks ` `Kan innehålla vad som helst (utom backticks)Kan användas för att undvika krockar med reserverade ord:`val`

57 / 81

Page 59: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Att bygga strängar: konkatenering och interpolering

Man kan konkatenera strängar med operatorn +"hej" + " på " + "dej"

Efter en sträng kan man konkatenera vilka uttryck somhelst; uttryck inom parentes evalueras först och värdet görssen om till en sträng före konkateneringen:val x = 42val msg = "Dubbla värdet av " + x + " är " + (x * 2) + "."

Man kan i Scala (men inte Java) få hjälp av kompilatorn attövervaka bygget av strängar med stränginterpolatorn s:val msg = s"Dubbla värdet av $x är ${x * 2}."

58 / 81

Page 60: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

HeltalsaritmetikDe fyra räknesätten skrivs som i matematiken (vanlig precedens):

1 scala> 3 + 5 * 2 - 12 res0: Int = 12

Parenteser styr evalueringsordningen:

1 scala> (3 + 5) * (2 - 1)2 res1: Int = 8

Heltalsdivision sker med decimaler avkortade:

1 scala> 41 / 22 res2: Int = 20

Moduloräkning med restoperatorn %

1 scala> 41 % 22 res3: Int = 1

59 / 81

Page 61: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

FlyttalsaritmetikDecimaltal representeras med s.k. flyttal av typen Double:

1 scala> math.Pi2 res4: Double = 3.141592653589793

Stora tal så som π ∗ 1012 skrivs:

1 scala> math.Pi * 1E122 res5: Double = 3.141592653589793E12

Det finns inte oändligt antal decimaler vilket ger problem medavvrundingsfel:

1 scala> 0.00000000000012 res6: Double = 1.0E-133

4 scala> 1E10 + 0.00000000000015 res7: Double = 1.0E10

60 / 81

Page 62: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

På rasten

En per grupp kommer fram hit och tar en grupp-skyltSamlas i era samarbetsgrupper i foajenD1.01a längst västerut (mot havet), D1.12b längst österutLär allas namnBestäm tid för första möteVid behov:Bestäm vem som mejlar till de i gruppen som inte är häridag

61 / 81

Page 63: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Funktioner

Funktioner

62 / 81

Page 64: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Definiera namn på uttryck

Med nyckelordet def kan man låta ett namn betydasamma sak som ett uttryck.Exempel:def gurklängd = 42 + x

Uttrycket till höger evalueras varje gång anrop sker,d.v.s. varje gång namnet används på annat ställe i koden.gurklängd

63 / 81

Page 65: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Funktion, argument, parameterEn funktion räknar ut resultat baserat på indata som kallas argument.Argument ges namn genom deklaration av parametrar.Exempel på deklaration av en funktion med en parameter:

def dubblera(x: Int) = 2 * x

Parametrarnas typ måste beskrivas efter kolon.Kompilatorn kan härleda returtypen, men den kan också med fördel,för tydlighetens skull, anges explicit:

def dubblera(x: Int): Int = 2 * x

Observera att namnet x blir ett ”nytt fräscht” lokalt namn som barafinns och syns ”inuti” funktionen och har inget med ev. andra xutanför funktionen att göra.Beräkningen sker först vid anrop av funktionen:

1 scala> dubblera(42)2 res1: Int = 84

64 / 81

Page 66: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Färdiga matte-funktioner i paketet scala.math

I paketet scala.math finns många användbara funktioner: t.ex.math.random ger slumptal mellan 0.0 och 0.99999999999999999

scala> val x = math.randomx: Double = 0.27749191749889635

scala> val length = 42.0 * math.sin(math.Pi / 3.0)length: Double = 36.373066958946424

Studera dokumentationen här:http://www.scala-lang.org/api/current/scala/math/

Paketet scala.math delegerar ofta till Java-klassen java.lang.Mathsom är dokumenterad här:https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

65 / 81

Page 67: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Logik

Logik

66 / 81

Page 68: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Logiska uttryck

Datorn kan ”räkna” med sanning och falskhet:s.k. booelsk algebra efter George BooleEnkla logiska uttryck: (finns bara två stycken)

truefalse

Sammansatta logiska uttryck med logiska operatorer:&& och, || eller”, ! icke, == likhet, != olikhet, relationer: > < >= <=

Exempel:true && truefalse || true!false42 == 4342 != 43(42 >= 43) || (1 + 1 == 2)

67 / 81

Page 69: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

De Morgans lagar

De Morgans lagar beskriver vad som händer om man negerarett logiskt uttryck. Kan användas för att göra förenklingar.

I all deluttryck sammanbundna med && eller ||,ändra alla && till || och omvänt.Negera alla ingående deluttryck. En relation negerasgenom att man byter == mot !=, < mot >=, etc.

Exempel på förenkling där de Morgans lagar används upprepat:! (a < b || (a == 1 && b == 1)) ⇐⇒! (a < b) && ! (a == 1 && b == 1) ⇐⇒! (a < b) && (! (a == 1) || ! (b == 1)) ⇐⇒a >= b && (a != 1 || b != 1)

68 / 81

Page 70: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Alternativ med if-uttryck

Ett if-uttryck börjar med nyckelordet if, följt av ett logisktuttryck inom parentes och två grenar.def slumpgrönsak = if (math.random < 0.8) "gurka" else "tomat"

Den ena grenen evalueras om uttrycket är trueDen andra else-grenen evalueras om uttrycket är falsescala> slumpgrönsakres13: String = gurka

scala> slumpgrönsakres14: String = gurka

scala> slumpgrönsakres15: String = tomat

69 / 81

Page 71: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Satser

Satser

70 / 81

Page 72: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Variabeldeklaration och tilldelningssatsEn variabeldeklaration medför att plats i datorns minne reserveras så attvärden av den typ som variabeln kan referera till får plats där.Vid deklaration ska variabeln initialiseras med ett startvärde.En val-deklaration ger en variabel som efter initialisering inte kan ändras.

Dessa deklarationer...

var x = 42val y = x + 1

... ger detta innehåll någonstans iminnet:x 42y 43

Med en tilldelningssats ges en tidigare var-deklarerad variabel ett nytt värde:

x = 13

Det gamla värdet försvinner för alltid och det nya värdet lagras istället:x 13y 43

Observera att y här inte påverkas av att x ändrade värde.71 / 81

Page 73: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Tilldelningssatser är inte matematisk likhet

Likhetstecknet används alltså för att tilldela variabler nya värden ochdet är inte samma sak som matematisk likhet. Vad händer här?

x = x + 1

Denna syntax är ett arv från de gamla språken C, Fortran mfl.I andra språk används t.ex.

x := x + 1 eller x <- x + 1

Denna syntax visar kanske bättre att tilldelning är en stegvis process:1 Först beräknas uttrycket till höger om tilldelningstecknet.2 Sedan ersätts värdet som variabelnamnet refererar till av det beräknade

uttrycket. Det gamla värdet försvinner för alltid.

72 / 81

Page 74: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Förkortade tilldelningssatser

Det är vanligt att man vill tilldela en variabel ett nytt värdesom beror av det gamla, så som ix = x + 1

Därför finns förkortade tilldelningssatser som gör så attman sparar några tecken och det blir tydligare (?) vad somsker (när man vant sig vid detta skrivsätt):x += 1

Uttrycket ovan expanderas av kompilatorn till x = x + 1

73 / 81

Page 75: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Exempel på förkortade tilldelningssatser

scala> var x = 42x: Int = 42

scala> x *= 2

scala> xres0: Int = 84

scala> x /= 3

scala> xres2: Int = 28

74 / 81

Page 76: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Övning: Tilldelningar i sekvens

Rita hur minnet ser ut ef-ter varje rad nedan:

1 var u = 422 var x = 103 var y = 2 * x + 14 x = 205 var z = y + x + y - x6 x += 1; y *= 2

En variabel som ännu inte initierats har ett odefini-erat värde, anges nedan med frågetecken.

rad 1 rad 2 rad 3 rad 4 rad 5 rad 6

u 42

x ?

y ?

z ?

75 / 81

Page 77: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Variabler som ändrar värden kan vara knepiga

Kod som innehåller variabler som förändras över tid ärofta svårare att läsa och begripa.Många buggar beror på att variabler av misstag förändraspå felaktiga och oanade sätt.Föränderliga värden blir speciellt svåra i kod som körsjämlöpande (parallellt).I kod som körs i skarpt läge med många användare (s.k.produktionskod) är därför val att föredra, medan varendast används om det verkligen behövs.Alltså: räkna hellre ut nya värden än förändra befintliga.

76 / 81

Page 78: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Kontrollstrukturer: alternativ och repetition

Används för att kontrollera (förändra) sekvensen och skapa alternativa vägargenom koden. Vägen bestäms vid körtid.

if-sats:

if (math.random < 0.8) println("gurka") else println("tomat")

Olika sorters loopar för att repetera satser. Antalet repetitioner ges vid körtid.while-sats: bra när man inte vet hur många gånger det kan bli.

while (math.random < 0.8) println("gurka")

for-sats: bra när man vill ange antalet repetitioner:

for (i <- 1 to 10) println(s"gurka nr $i")

77 / 81

Page 79: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

ProcedurerEn procedur är en funktion som gör något intressant, men som intelämnar något intressant returvärde.Exempel på procedur i standardbiblioteket: println("hej")Du deklarerar egna procedurer genom att ange Unit somreturvärdestyp. Då returneras värdet () som betyder ”inget”.

scala> def hej(x: String): Unit = println(s"Hej på dej $x!")hej: (x: String)Unit

scala> hej("Herr Gurka")Hej på dej Herr Gurka!

scala> val x = hej("Fru Tomat")Hej på dej Fru Tomat!x: Unit = ()

Det som görs kallas (sido)effekt. Ovan är utskriften själva effekten.Även funktioner kan ha sidoeffekter. De kallas då oäkta funktioner.

78 / 81

Page 80: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Problemlösning: nedbrytning i abstraktioner som senkombineras

En av de allra viktigaste principerna inom programmering är funktionellnedbrytning där underprogram i form av funktioner och procedurerskapas för att bli byggstenar som kombineras till mer avanceradefunktioner och procedurer.Genom de namn som definieras skapas återanvändbaraabstraktioner som kapslar in det funktionen gör till ett ”byggblock”.Bra ”byggblock” gör det lättare att lösa svåra programmeringsproblem.Abstraktioner som beräknar eller gör en enda, väldefinierad sak ärenklare att använda, jämfört med de som gör många, helt olika saker.Abstraktioner med välgenomtänkta namn är enklare att använda,jämfört med kryptiska eller missvisande namn.

79 / 81

Page 81: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Om veckans övning: expressionsFörstå vad som händer när satser exekveras och uttryck evalueras.Förstå sekvens, alternativ och repetition.Känna till literalerna för enkla värden, deras typer och omfång.Kunna deklarera och använda variabler och tilldelning, samt kunna ritabilder av minnessituationen då variablers värden förändras.Förstå skillnaden mellan olika numeriska typer, kunna omvandla mellandessa och vara medveten om noggrannhetsproblem som kan uppstå.Förstå booleska uttryck och värdena true och false, samt kunnaförenkla booleska uttryck.Förstå skillnaden mellan heltalsdivision och flyttalsdivision, samtanvändning av rest vid heltalsdivision.Förstå precedensregler och användning av parenteser i uttryck.Kunna använda if-satser och if-uttryck.Kunna använda for-satser och while-satser.Kunna använda math.random för att generera slumptal i olikaintervaller.Kunna beskriva skillnader och likheter mellan en procedur och enfunktion.

80 / 81

Page 82: Vecka 1. Introduktion · 2019-11-25 · Föreläsning,EDAA45pgk,BjörnRegnell,senastuppdaterad:25november2019 Vecka1.Introduktion BjörnRegnell Datavetenskap,LTH,Lundsuniversitet

Föreläsning, EDAA45 pgk, Björn Regnell, senast uppdaterad: 25 november 2019

Vecka 1: Introduktion

Om veckans labb: kojo

Kunna tillämpa och kombinera principerna sekvens,alternativ, repetition, och abstraktion i skapandet av egnaprogram om minst 20 rader kod.Kunna förklara vad ett program gör i termer av sekvens,alternativ, repetition, och abstraktion.Kunna formatera egna program så att de blir lätta att läsaoch förstå.Kunna förklara vad en variabel är och kunna deklareraoföränderliga och förändringsbara variabler, samt göratilldelningar.Kunna genomföra upprepade varv i cykelneditera-exekvera-felsöka/förbättra för att stegvis bygga uppallt mer utvecklade program.

81 / 81