729G75: Programmering och algoritmiskt tänkande Tema 1. Föreläsning 1 Jody Foo
Föreläsningsöversikt Kursinfo / Om kursen Algoritmer Objektorienterad programmering i praktiken terminologi använda objekt Programmeringsmetod
Kursinfo/Om kursen
Programmering och algoritmiskt tänkande: Kursmål konstruera abstraktioner med varierande grad med stöd från det underliggande programmeringsspråket identifiera och förklara abstraktioner i programkod utarbeta och tillämpa algoritmer för att lösa problem producera program med enkla grafiska användargränssnitt tillämpa ett metodiskt och interaktivt tillvägagångssätt att lösa programmeringsrelaterade problem genom implementering, testning och felsökning relatera programmering och algoritmiskt tänkande till kognitionsvetenskap och kognitionsvetenskapliga tillämpningar
Temaupplägg Varje tema består av följande: Föreläsningar Lektion Introuppgift Temauppgift Algoritmseminarium
Examination: provkoder Tre provkoder, motsvarar kursens tre teman PRA1, 2hp (Tema 1) PRA2, 2hp (Tema 2) PRA3, 2hp (Tema 3)
Examination: moment Uppgifterna i varje tema bygger på varandra Introduktionsuppgift: introduktion till ny syntax och pythonbegrepp Temauppgift: algoritmisk tillämpning av ny syntax och begrepp Algoritmseminarium: Genomgång och diskussion av temauppgiften i grupp Temarapport: Skriftlig behandling av aspekter av temauppgiften.
Examination: resultat på delmoment Introduktionsuppgift: komplettering/ok Temauppgift: komplettering, brons-, silver- eller guldnivå Algoritmseminarium: komplettering/ok Temarapport: komplettering, brons-, silver-, eller guldnivå För betyget Godkänd på ett tema krävs 2st OK och minst 2st brons. För betyget Väl godkänd på ett tema, krävs 2st OK och minst ett silver och ett guld. För betyget Godkänd på hela kursen krävs betyget Godkänd eller högre på alla tre teman. För betyget Väl godkänd på hela kursen krävs betyget Väl godkänd på alla tre teman.
Övergripande läromål för varje tema Algoritmiskt tänkande: prova på och förstå, några algoritmer inom en viss domän. Programmering: Objektorienterad modellering och design syntax i Python programmeringsmetod (implementation, testning, felsökning)
Teman Tema 1: Sorteringalgoritmer och objekt Introduktion till algoritmiskt tänkande och objektorientering Sorteringsalgoritmer Tema 2: Grafiska gränssnitt och layout Introduktion till GUI-programmering Algoritmer för layout Tema 3: Genetiska algoritmer Objektorienterad design Liten simulering med genetiska algoritmer
Grupper Jobbar i par. Nytt par bildas inför varje tema.
Deadlines
Algoritmer
Vad är en algorithm? Informellt: en väldefinierad beräkningsbar (computational) procedur som givet ett värde, eller en mängd värden som input producerar ett värde, eller en mängd värden som output. (Cormen et. al. 2009. Introduction to algorithms) En algoritm är en metod som, givet ett väldefinierat utgångsläge, löser ett problem genom att ett ändligt antal elementära och väldefinierade operationer tillämpas i en förskriven ordning. (Lunell. 2011. Datorn i världen, världen i datorn) En algoritm sägs vara korrekt om det för varje indata, avslutar med korrekt utdata.
Vad är algoritmiskt tänkande? Ett sätt att analysera och angripa problem. Att gå från ett icke väldefinierat problem till ett väldefinierat problem. Bryta ner problemet. Se mönster.
Vad har detta för relevans för en kognitionsvetare? Att bryta ner ett problem är en viktig komponent i att förstå en domän. Detta är en färdighet som vi tillämpar när vi gör kvalitativ analys skapar modeller programmerar skriver rapporter Inom programmering har vi möjlighet att implementera vår lösning och testa den på med korta iterationer.
När blir det en algoritm? Input: Vad är indata? Vad vet vi? Vad behöver vi veta? Hur representerar vi data? Formulera problemet: Gör problemet väldefinierat: För vilka input vill vi kunna komma fram till en lösning? Vilka är normalfallen? Output: Hur ser en lösning ut? Vad är en korrekt lösning? Finns flera korrekta lösningar? Finns det en bästa lösning? Formulera lösningen: Gör lösningen väldefinierad. Hur vet vi att något är en lösning?
Levande algoritmer? Organisera er i 4 lika stora grupper
Sortering
Objektorienterad programmering
Ni har redan använt objekt... # en lista är ett objekt lista1 = [] # Ett objekt har metoder som man meddelar att man vill köra genom # att använda punktnotation. Vad händer egentligen nedan? lista1.append("en sträng")
Ni har redan använt objekt... # en lista är ett objekt a_string = "visst är python roligt!" # Ett objekt har metoder som man meddelar att man vill köra genom # att använda punktnotation. Vad händer egentligen nedan? print(a_string.upper())
Sprites
En klass är en mall som används för att skapa ett objekt objekt kallas också för instanser
Objekt är instanser av klasser
Programmeringsparadigm Funktionell programmering Procedurell programmering Logikprogrammering Objektorienterad programmering
Objektorienterad programmering Ett alternativ till att använda funktioner för att strukturera kod: Objekt istället för abstrakt datatyp Bättre sätt att organisera större projekt - återanvändning C++, Objective-C, C# och Java är exempel på andra OO programmeringsspråk
Objektorienterad programmering (OOP) Objekt är i fokus jämfört med funktioner i fokus som vid funktionell programmering. Man försöker relatera data och metoder till objekt. Både data och metoder kan "ägas"/tillhöra objekt (inkapsling) Objekt, dess egenskaper och beteenden (vad objektet kan göra och vad man kan göra med objektet).
Semiotiska triangeln, Triangle of reference (Ogden & Richards 1923)
I objektorienterad programmering Klass Variabel/Referens Objekt
Klasser jmf med objekt En klass är en mall, en beskrivning av något som kan finnas i världen. En klass beskriver vilka egenskaper (variabler) klassen har och vilka beteenden (metoder) den har. Det som finns i världen är instanser av klasser, även kallade för objekt.
Sprites
Hur skapar vi klasser och objekt?
Definition av en klass class Dog(object): def init (self, namev): self.name = namev self.age = 0 def talk(self): print("voff, jag heter " + self.name)
Objekt, dess egenskaper och beteenden klassens namn variabler metoder
Skapa ett objekt: instantiera en klass Inbyggda klasser, t.ex. listor och dictionaries har syntaktiskt socker. För "vanliga" klasser använder vi dess namn följt av parenteser. T.ex. dog = Dog()
Punktnotation (modul.)objekt.variabel (modul.)objekt.metod() a = [1, 2, 3] a.append(4) s = "hejsan" s.upper()
Vi skapar några hundar class Dog(object): def init (self, namev): self.name = namev self.age = 0 def talk(self): print("voff, jag heter " + self.name) hund1 Hund name: "Pluto" age: 0 talk hund1 = Dog("Pluto") hund2 = Dog("Lassie") hund2 Hund name: "Lassie" age: 0 talk
Testar hundarna class Dog(object): def init (self, namev): self.name = namev self.age = 0 def talk(self): print("voff, jag heter " + self.name) hund1 = Dog("Pluto") hund2 = Dog("Lassie") print(hund1.age) print(hund1.name) hund1.talk() print(hund2.age) print(hund2.name) hund2.talk()
Ändra värden hund1 Hund name: "Pluto" age: 4 hund1.age = 4 hund2.age = 8 talk hund2 Hund name: "Lassie" age: 8 talk
Testar hundarna class Dog(object): def init (self, namev): self.name = namev self.age = 0 def talk(self): print("voff, jag heter " + self.name) hund1 = Dog("Pluto") hund2 = Dog("Lassie") print(hund1.age) print(hund1.name) hund1.talk() print(hund2.age) print(hund2.name) hund2.talk()
Terminologi Klass Objekt / Instans Egenskapsvariabel / Instansvariabel Metod
Programmeringsmetod Implementation, testning, felsökning
Konsten att skriva bättre kod kommentera skriv kod testa rätta buggar
Kommentera Funktionskommentarer Löpande kommentarer Standarder för att skriva kommentarer
Skriva kod Kodstandarder: PEP8, PEP257
Att testa sin kod Testdriven programmering - utanför omfånget för denna kurs Vi använder spårutskrifter och pythons interaktiva läge. Vad borde funktionen/metoden returnera? Gör den det?
Rätta buggar syntaxfel logiska fel runtime-fel (inträffar under körning) behövs omfaktorering?