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 av stöd i 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
Examination Tre examinationsmoment, motsvarar kursens tre teman PRA1 (Tema 1) PRA2 (Tema 2) PRA3 (Tema 3) Examination / tema Introduktionsuppgift Temauppgift Algoritmseminarium
Betyg För Godkänt Godkänt resultat på övning, temauppgift och algoritmseminarium För Väl godkänt Godkänd på introuppgift, temauppgift och temauppgiftsrapport. Väl godkänd på temauppgift
Ö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: Objektorienterad design Genetiska algoritmer
Temaupplägg Varje tema består av följande: Föreläsningar Lektion Introuppgift Temauppgift Algoritmseminarium
Grupper Jobbar i par. Nytt par bildas inför varje tema.
Tävlingar halva klassen ena sidan andra halvan andra sidan
Organisera er i 8 lika stora grupper
Sorteringsövning Skriv ner instruktioner för att sortera LEGOfigurer. Använd inte orden: sortera, ordna, organisera etc. Använd ord som t.ex.: flytta, byt plats, lägg åt sidan
Syftet med "lekarna" Vad behövde ni för information för att genomföra uppgifterna? Hur visste ni när ni var klara? Vilka steg genomfördes under processens gång?
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?
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 och instanser 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