• No results found

729G46 Informationsteknologi och programmering. Tema 4. Föreläsning 1 Jody Foo,

N/A
N/A
Protected

Academic year: 2022

Share "729G46 Informationsteknologi och programmering. Tema 4. Föreläsning 1 Jody Foo,"

Copied!
60
0
0

Loading.... (view fulltext now)

Full text

(1)

729G46 Informationsteknologi och programmering

Tema 4. Föreläsning 1

Jody Foo, jody.foo@liu.se

(2)

Föreläsningsöversikt (4.1-4.2)

⁃ Om Tema 4-6

⁃ Datalogiskt tänkande (Computational Thinking)

⁃ Algoritmer

⁃ Komplexitet

⁃ Objektorienterad programmering i praktiken

terminologi

använda objekt

⁃ Programmeringsmetod

(3)

Tema 4-6

(4)

Temaupplägg, Tema 4-6

⁃ Uppgifterna i varje tema bygger på varandra

Temauppgift: algoritmisk tillämpning av ny syntax och begrepp

Lektion i Teams inför temauppgift

Algoritmseminarium: Genomgång och diskussion av temauppgiften i grupp

Algoritmrapport: Skriftlig behandling av aspekter av temauppgiften.

(5)

Examination: resultat på delmoment

LAB2. 4,5hp: Temauppgift 4-6

EXA2. 1,5hp: Algoritmseminarier och algoritmrapporter

För betyget Godkänd på LAB2 ska alla temauppgifter vara OK/

genomförda på G-nivå.

För betyget Väl godkänd på LAB2 krävs två temauppgifter på plus-nivå.

För betyget Godkänd på EXA2 ska alla algoritmseminarier och algoritmrapporter vara inlämnade och godkända.

För betyget Väl godkänd på EXA2 ska minst två av algoritmrapporterna vara godkända på guldnivå och ingen av rapporterna godkända på

bronsnivå.

För VG på kursen: VG på LAB1, LAB2 och EXA2

(6)

Ö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)

(7)

Tema 4-6

Tema 4: Sorteringalgoritmer och objekt

Introduktion till algoritmiskt tänkande och objektorientering Sorteringsalgoritmer

Tema 5: Grafiska gränssnitt och layout

Introduktion till GUI-programmering Algoritm för layout

Tema 6: Eget program att-göra-program

Objektorienterad design

(8)

Grupper

⁃ Anmäl er till en pargrupp precis som tidigare!

⁃ En tredje gruppmedlem

(9)

Lektion nästa vecka

⁃ Kanal för lektionstillfällen

⁃ Vi börjar i mötet som heter "Gemensamt möte"

⁃ Efteråt ansluter ni till möten som finns för varje seminariegrupp

(10)

Kort om uppdelning av kod i

funktioner

(11)

Funktioner: ta in argument, returnera resultat

Dåliga mönster

att använda globala variabler

koppla ihop funktioner "i onödan" - alla funktioner sitter ihop i en lång kedja;

a b c d

Ovanstående är inte skrivna i sten!

(12)

Funktioner: ta in argument, returnera resultat

Bra mönster

ta emot information som behövs som argument returnera resultat

huvudfunktion som kopplar ihop underfunktioner a

b c d

Ovanstående är inte skrivna i sten!

(13)

Datalogiskt tänkande

computational thinking

(14)

Datalogiskt tänkande

Problemlösningsprocess för att beskriva, analysera och lösa problem på ett sätt så att datorer kan hjälpa till, t.ex.

Bryta ner komplexa problem i mindre delar (dekomposition) Hitta mönster och utnyttja dessa

Skapa algoritmer för att automatisera lösningen av problem Representera data genom abstraktioner som modeller och simuleringar

Identifiera, analysera och implementera möjliga lösningar

Generalisera och överföra problemlösningsprocessen på andra typer av problem

Träna på datalogiskt tänkande genom programmering

(15)

Färdigheter

⁃ vana vid att hantera komplexitet

⁃ uthållighet vid arbete med svåra/stora problem

⁃ tolerans för tvetydighet/osäkerhet

⁃ förmåga att hantera öppna problemställningar (hitta gränser, begränsningar)

⁃ förmåga att kommunicera och samarbeta med andra för att komma fram till en gemensam lösning

(16)

Algoritmer

(17)

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.

(18)

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.

(19)

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.

(20)

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?

(21)

Komplexitet

(22)

Komplexitet

⁃ Hur mycket behöver datorn göra? Hur komplicerat är det att lösa detta problem, med den här algoritmen?

⁃ Exempel, for-loop, leta efter största elementet

Hur många operationer behöver algoritmen?

def get_max_value(values):

max_value = values[0]

for value in values:

if value > max_value:

max_value = value return max_value

(23)

Komplexitet

Antal operationer är proportionerligt mot len(values)

Ordo-notation (Big O notation)

För nedanstående funktion:

O(n), där n är storleken på input

def get_max_value(values):

max_value = values[0]

for value in values:

# Ju större len(values) är, desto mindre påverkar # spelar antalet operationer i for-loopen roll.

if value > max_value:

max_value = value return max_value

(24)

Komplexitet, nästlade loopar

⁃ Antalet par-kombinationer man kan bilda givet n värden

⁃ [ 1, 2, 3 ... n ]

def get_pairs(values) pairs = []

for v1 in values:

for v2 in values:

pairs.append(str(v1) + ":" + str(v2)) return pairs

⁃ O(n2)

(25)

Komplexitet i stigande ordning

⁃ O(1): konstant

⁃ O(log n): logaritmisk

⁃ O(n): linjär

⁃ O(n2): kvadratisk

⁃ O(n3): kubisk

⁃ O(2n): exponentiell

(26)

Komplexitet

(27)

Sorting out sorting

https://www.youtube.com/watch?v=SJwEwA5gOkM

(28)

Objektorienterad

programmering

(29)

Programmeringsparadigm

⁃ Funktionell programmering

⁃ Procedurell programmering

⁃ Logikprogrammering

⁃ Objektorienterad programmering

(30)

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

(31)

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).

(32)

I objektorienterad programmering

Klass

Variabel/Referens Objekt

(33)

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.

(34)

En klass är en mall som

används för att skapa ett objekt.

Objekt kallas också för

instanser.

(35)

Objekt är instanser av klasser

(36)

Varför skriva objektorienterad

kod?

(37)

Varför skriva objektorienterad kod?

⁃ Många problem kan modelleras i termer av objekt.

Att tillämpa objektorienterade principer är ett sätt att främja skrivandet av kod som i bästa fall underlättar

återanvändbarhet underhåll

läsbarhet felsökning

⁃ Inget av ovanstående är garanterat.

⁃ Vi kan skriva objektorienterad kod som är svår att återanvända, svår att underhåll, svår att läsa etc.

(38)

Hur ser ett objektorienterat

program ut?

(39)

Ett objektorienterat program

⁃ Modellerar komponenter som klasser

⁃ Programmet

skapar instanser av klasserna

beskriver hur instanserna ska interagera med varandra

Standard att använda UML (Unified Modeling Language) för att beskriva objektorienterade diagram (t.ex. med

klassdiagram)

(40)

Exempel på klassdiagram (UML) för

ett schackspel

(41)

Exempel på klassdiagram (UML) för

ett alfapetspel

(42)

Python som objektorienterat

språk

(43)

Objektorientering i Python

Alla värden i python är objekt

Till och med funktioner är objekt

En stor del av enkelheten att använda Python beror på att det finns ett stort utbud av standardiserade beteenden som

klasser kan implementera.

T.ex.

för att kunna översätta ett objekt till en behöver dess klass implementera metoden object.__str__()

för att använda "index"-syntax på ett objekt behöver dess klass implementera metoden object.__getitem__()

(44)

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")

(45)

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())

(46)

Exempel

⁃ RSS-flöden: nyheter, podcasts m.m.

⁃ Data i XML, t.ex.

https://insidan.liu.se/nyhetsarkiv/?format=rss&l=sv https://corren.se/rss/lokalt/linkoping

feedparser, ett Python-paket gjort för hantering av RSS- strömmar

https://github.com/kurtmckee/feedparser https://feedparser.readthedocs.io/en/latest/

Beter sig som ett dictionary.

(47)

Enkelt program som visar senaste nyheterna

#!/usr/bin/env python3 import feedparser

from time import strftime

feed = feedparser.parse("https://corren.se/rss/lokalt/linkoping")

# loopa igenom de 5 senaste nyheterna for entry in feed.entries[:5]:

# skriv ut nyheten

pub_time = strftime("kl. %H:%M", entry.published_parsed) print(f"* {pub_time}: {entry.title} [{entry.link}]")

(48)

Vad är en klass?

(49)

Objekt, dess egenskaper och beteenden

klassens namn

variabler

metoder

(50)

Klassdiagram i UML

Unified Modelling Language

Klassnamn

namn : attributtyp

namn : attributtyp = defaultvärde operation()

operation() : returdatatyp operation(parameterlista)

operation(parameterlista) : returdatatyp

(51)

Exempel

trial : str

image_file : str time : int

correct_answer : str subjects_answer : str degrees_rotated : int

DataRow

get_error_type() : int

(52)

Exempel på definition och

användning av en klass

(53)

Klassen Dog

(54)

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)

(55)

Skapa ett objekt: instantiera en klass

⁃ Inbyggda klasser, t.ex. listor och dictionaries har "syntaktiskt socker".

a_list = []

a_list = list() a_dict = {}

a_dict = dict()

⁃ För egna klasser använder vi dess namn följt av parenteser (och eventuella argument). T.ex.

dog = Dog("Fido")

(56)

Vad händer när vi skapar en instans av en klass?

⁃ Skapa instans av klass: Klassnamn(arg1, arg2 ... argn)

⁃ Python skapar ett objekt och kör klassens __init__()- metod

⁃ Objektet som skapats skickas som det första argumentet till

__init__().

⁃ Argument som skickats med vid anrop av klassnamnet skickas vidare till __init__() efter self.

(57)

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 = Dog("Pluto")

hund2 = Dog("Lassie")

Hund

name: "Pluto"

age: 0

talk

Hund

name: "Lassie"

age: 0

talk

hund1

hund2

(58)

Punktnotation

Vi har tidigare använt punktnotation för att komma åt en funktion från en modul. T.ex.

random.random()

Vi använder även punktnotation för att komma åt variabler och metoder för ett objekt:

objekt.variabel objekt.metod()

Exempel

a = [1, 2, 3]

a.append(4) s = "hejsan"

s.upper()

(59)

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()

(60)

Ändra värden

hund1.age = 4 hund2.age = 8

Hund

name: "Pluto"

age: 4

talk

Hund

name: "Lassie"

age: 8

talk

hund1

hund2

References

Related documents

Till skillnad från Microsofts Word, är XML en öppen standard och ägs inte av någon, det är fritt fram för alla som vill implementera stöd för XML i programvaror att göra

Detta är en studie inom ett större forskningsprojekt som ger oss möjlighet att, för första gången, kartlägga de positiva och negativa konsekvenserna av en större hjärna samt

• Notera att vi inte har skapat Dice-objekten än, utan enbart en vektor med plats för 5 referensvariabler som inte pekar på något (null). dices null

• Default genereras om ingen kopieringskonstruktor, operator och destruktor

Dessa visade en till synes normalutvecklad gosse som ledigt kunde vända sig från rygg till mage, i bukläge lyfta bröstet från underlaget med handlovsstöd mot golvet, flytta

⁃ Skalet kan dirigera om information som ett program skickar till stdout (standard output) så att det används som input till ett annat

förändring sker, antingen när någon läser från den, eller när någon skriver

Vilken väg ska en handelsresande välja för att minimera resvägen och besöka alla städer exakt en gång och börja och sluta i samma stad. Kan vi inte bara prova