Programmering grundkurs

Relevanta dokument
Programmering och algoritmiskt tänkande. Tema 3, föreläsning 1 Jody Foo

729G75: Programmering och algoritmiskt tänkande. Tema 3, föreläsning 2

729G06 Programmering och logik. OOP: Klassdiagram, arv Allmänt: Undantagshantering

729G75: Programmering och algoritmiskt tänkande. Tema 3, föreläsning 2

Programmering grundkurs

729G06 Programmering och logik. OOP: Arv Allmänt: Undantagshantering

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Programmering grundkurs

Programmering grundkurs

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Programmering grundkurs

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

729G06 Programmering och logik. Info om pythondelen & introduktion till objektorienterad programmering.

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsning 13 Datalogi 1 DA2001

Föreläsning 4 Programmeringsteknik DD1310. Felhantering. Syntax. try och except är reserverade ord som används för hantering av exekverings fel.

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Imperativ programmering. Föreläsning 4

DD1314 Programmeringsteknik

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Grundläggande datalogi - Övning 1

729G04 Programmering och diskret matematik. Föreläsning 7

Använda Python Laboration 1 GruDat, DD1344

729G04 Programmering och diskret matematik. Python 3: Loopar

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Ordlistor, filhantering och ut på webben. Linda Mannila

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 6 Programmeringsteknik och Matlab DD1312

Objektorienterad Programmering (TDDC77)

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

729G06 Föreläsning 1 Objektorienterad programmering

Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Grundläggande programmering med C# 7,5 högskolepoäng

Läsöversikt. Föreläsningar 2-6. Genomförande av laborationer

TDDE44 Programmering, grundkurs

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Övning 6. Ali Tofigh 24 Oktober, 2006

Programmering för språkteknologer II, HT2014. Rum

Variabler och konstanter

Föreläsning 2 Programmeringsteknik och C DD1316

729G04 PYTHON 6 JODY FOO. Department of Computer and Information Science (IDA) Linköping University, Sweden

Programmering för språkteknologer II, HT2011. Rum

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Skapa hashtabell. En hashtabell kan ses som en lista där programmeraren associerar egna nycklar (index) till varje element som ska läggas i tabellen :

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

TDDE44 Programmering, grundkurs

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Idag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15.

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Inledande programmering med C# (1DV402) Introduktion till C#

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

DD1311 Programmeringsteknik för S1 Laborationer läsåret

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 18

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

Uppgifter teknik HT17 (uppdaterad v. 40)

Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D.

TDP002 Imperativ programmering

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Objektorienterad Programmering (TDDC77)

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

Besiktningsprotokollet

Objekt, Klasser, Paket m. m.

Laboration 1 - Grunderna för OOP i Java

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 15

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Introduktion till programmering SMD180. Föreläsning 8: Listor

Grundläggande Datalogi

Grundläggande datalogi - Övning 2

Föreläsning 16 Arv. Jan Lönnberg T Grundkurs i programmering

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

729G04 Programmering och diskret matematik

Domänspecifika språk. TDP007 Konstruktion av datorspråk Föreläsning 5. Peter Dalenius Institutionen för datavetenskap

Sätt att skriva ut binärträd

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

729G04 PYTHON 5 JODY FOO. Department of Computer and Information Science (IDA) Linköping University, Sweden

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Java, klasser, objekt (Skansholm: Kapitel 2)

Objektorienterad programmering Föreläsning 4

Objektorienterad programmering

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Repetition av OOP- och Javabegrepp

Programmering, grundkurs

Objektorienterad Programmering (TDDC77)

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...

Att skriva till och läsa från terminalfönstret

729G04 Programmering och diskret matematik

Transkript:

Programmering grundkurs Föreläsning 9 Jody Foo, jody.foo@liu.se

Föreläsningsöversikt Repetition: klass, instans, objekt, instansvariabler, metoder Laboration 5 Klassdiagram med UML Undandtag - felhantering Programmeringsaktiviteten och att skriva kod Standarder för Python. PEP8 och PEP257. Funktionskommentarer och kommentarer för utvecklare Dela upp kod Omfaktorering av kod Testning och felsökning

Kort repetition

Terminologi Klass Objekt / Instans Egenskapsvariabel / Instansvariabel Metod

Objektorienterad programmering (OOP) En klass är en mall, en beskrivning (definition) av något som kan finnas när ett program körs. Det som finns i världen är instanser av klasser, även kallade för objekt. En klassdefinitioner används för att skapa ett objekt (instans av en klass) En klass beskriver vilka egenskaper (instansvariabler) dess instanser har och vilka beteenden (metoder) den har.

Instansvariabler och metodanrop class Book(object): def init (self, title): self.title = title self.author = "Unknown" self.year = "N/A" def str (self): citation = "{}. ({}). {}." return citation.format(self.author, self.year, self.title) bok1 = Book("The Practice of Computing using Python") bok2 = Book("PSwAaDSuP") print(bok1) print(bok2)

Laboration 5 Del 1: syntax för att skapa och använda klasser Del 2: använda objekt + öva på att skriva kommentarer, följa kodstandarder

Del 2 Kodskelett: random-layout.py Gränssnitt: lab5.py

random-layout.py #!/usr/bin/env python3 """Laboration 5 -- TDDE44 Exempel på slumpmässig layout-funktion. Layout-funktionen skickas som argument när en instans av lab5.layouttester skapas. """ # Läs denna fil för att se hur gränssnittet skapats. import lab5 import random def random_layout(squares, frame_height, frame_width): """Placera ut fyrkanterna i listan squares slumpmässigt. Argument: squares -- Lista som innehåller tkinter.label-objekt frame_height -- Höjden (int) på den Fram som fyrkanterna ligger i frame_width -- Bredden (int) på den Frame som fyrkanterna ligger i """ # Slumpa ut positioner för alla fyrkanter utan att de hamnar utanför framen for square in squares: square_size = square.winfo_width() xpos = random.randint(0, frame_width - square_size) ypos = random.randint(0, frame_height - square_size) square.place(x=xpos, y=ypos) if name == " main ": layout_tester = lab5.layouttester(random_layout, 600, 600)

Exempel på funktionsobjekt def print_hello(): print("hello World!") bacon = print_hello bacon() # utskrift # Hello World!

Demonstration

Klassdiagram i UML ett slags pseudokod för OOP

Klassdiagram i UML Unified Modelling Language Klassnamn namn : attributtyp namn : attributtyp = defaultvärde operation() operation() : returdatatyp operation(parameterlista) operation(parameterlista) : returdatatyp

Exempel DataRow trial : str image_file : str time : int correct_answer : str subjects_answer : str degrees_rotated : int get_error_type() : int

UML, klassdiagram: relationer mellan objekt Objekt kan ha någon form av relation till andra objekt association: allmän relation. kardinalitet (antal) och roll (i praktiken variabelnamn) "lästa_böcker 0..*"

UML: Relationer Yanpas. Wikimedia Commons En dubbelriktad association kan ritas utan pilar.

Exempel LayoutTester layout_func : callable squares_frame_height : int squares_frame_width : int size_options : list ui_xpadding : int ui_ypadding : int squares 0..* tkinter.tklabel winfo_width() : float place(x : float, y : float) init_ui() init_control_panel() create_size_panel() create_num_squares_panel() create_start_pos_panel() create_run_quit_panel() create_squares() clear_squares() run_layout()

Programmeringsmetod Undersökning och analys av problemet, felhantering, implementation, testning, felsökning

Namngivning Namngivning av klasser: substantiv i singular Namngivning av metoder: verb Namngivning av instansvariabler: substantiv OBS! Om klassen representerar en samling objekt, dvs fungerar som en behållare, använd inte beskrivning av innehållet. Ett vanligt mönster är att använda ett suffix, t.ex. Collection, Set eller List

Exempel på klassnamn DataPoint DataPointCollection Word Sentence Paragraph Document Person ContactList Book Library BookCollection

Vanliga prefix till metodnamn get_: hämta ett värde från ett objekt (antingen beräknat eller direkt från ett attribut) set_: sätt att värde (ändra hela) add_: lägg till ett värde remove_: ta bort ett värde load_: ladda data från fil save_: spara data till fil

Felhantering med undantag Exceptions

Exceptions - undantag Exceptions (sv undantag) är ett sätt att hantera fel i kod som kan utlösas (eng throw/raise). Vid fel kan ett undantag utlösas. Programmet avbryter sitt normala flöde för att gå in i "undantagsläge". Finns inget specificerat undantagsläge, kraschar programmet.

Undantag i Python Om man vill hantera undantag i Python lägger man koden som kan utlösa undantag i ett try-block. Undantag hanteras sedan i ett except-block.

Exempel på undantag i Python ZeroDivisionError IOError IndexError KeyError TypeError

Mönster för undandagshantering i Python try: # här lägger man koden som kan utlösa ett undantag except [typ av exception] [as <namn på undantagsinstans>]: # här lägger man koden för vad som ska hända Här ska inte hakparenteserna skrivas ut, utan visar att det som står innanför dem är valfritt. Det som står inom mindre än/större än-tecken måste vara med. I det här fallet bara om 'as' används. Mindre än/större än-tecknena ska inte heller stå med.

Exempel: Fånga undantag letters = ["a", "b", "c", "d", "e", "f"] try: l_index = 0 while True: print(letters[l_index]) l_index += 1 except: print("an exception was raised.")

Exempel: Fånga och instansiera undantag letters = ["a", "b", "c", "d", "e", "f"] try: l_index = 0 while True: print(letters[l_index]) l_index += 1 except Exception as error: print("an exception was raised.") print(error)

Exempel: Fånga specifikt undantag letters = ["a", "b", "c", "d", "e", "f"] try: l_index = 0 while True: print(letters[l_index]) l_index += 1 except IndexError: print("index " + str(l_index) + " is out of bounds.")

Exempel: Fånga och instansiera specifikt undantag letters = ["a", "b", "c", "d", "e", "f"] try: l_index = 0 while True: print(letters[l_index]) l_index += 1 except IndexError as index_error: print("index " + str(l_index) + " is out of bounds.") print(index_error)

Olika sätt att använda undantag För att fånga potentiella fel i koden och åtgärda dem Som ett alternativ till "vanlig" flödeskontroll/if-satser

Kontroll av argument med hjälp av flera undantag def get_dog_desc(dog_dict): try: output_string = "My name is " + dog_dict['name'] + " " output_string += "and I am " + str(dog_dict['age']) + " years old." return output_string except TypeError as type_error: print("argument not a dictionary") print(type_error) except KeyError as key_error: print("wrong keys in dictionary.") print(key_error)

Kontroll av argument med hjälp av flera undantag som ett fall def get_dog_desc(dog_dict): try: output_string = "My name is " + dog_dict['name'] + " " output_string += "and I am " + str(dog_dict['age']) + " years old." return output_string except (TypeError, KeyError) as error: print("not a dictionary or key not present in dictionary.") print(error)

Konsten att skriva bättre kod 1. kommentera 2. skriv kod 3. testa 4. rätta buggar 5. omfaktorera

Kommentarer och kodstandard

Kod- och kommentarsstandard Standard för att skriva pythonkod: PEP8 krav på att följa PEP8 fr.o.m. laboration 5 https://www.python.org/dev/peps/pep-0008/ Indentering: 4 mellanslag (rekommenderas) Radlängd: 79 tecken Rader bryts på rätt sätt med rekommenderad indentering Användning av tomma rader, mellanrum mellan operatorer etc. Variabelnamn, funktionsnamn, klassnamn

Kod- och kommentarsstandard Standard för att skriva pythonkommentarer: PEP257 krav på att följa från och med laboration 5 https://www.python.org/dev/peps/pep-0257/ Funktionskommentarer, "docstrings", för användaren Löpande kommentarer för utvecklaren Olika detaljnivå på funktionskommentarer och löpande kommentarer

Automatisk kontroll av PEP8 och PEP257 Aktivera virtuella miljön som har pycodestyle och pep257 installerade: source /courses/tdde44/kursmaterial/venv_pep/bin/activate PEP8: Använd kommandot pycodestyle PEP257: Använd kommandot pep257

Dela upp problem, bryta ut funktioner, abstraktion

Dela upp problem Vad är det övergripande problemet? Vilka delsteg finns? Finns det återkommande moment? Kan man skriva en funktion som utför det återkommande momentet? Använd "Dela upp problem" på varje delsteg

Dela upp funktioner/metoder Målet är att en funktion/metod gör en sak. Varför? det är lättare att köra flera funktioner/metoder i sekvens än att uttrycka "kör allt i funktionen X förrutom..." Man kan alltid anropa på andra funktioner/metoder från en annan funktion/metod

OOP och problemuppdelning OOP kombinerar: procedurell abstraktion - abstraktion av processer dataabstraktion - abstraktion av data

Omfaktorering

Omfaktorering, exempel Dela upp långa funktioner i mindre funktioner Förbättra variabelnamn Ändra på datastrukturer

Många olika sätt att lösa ett och samma problem Program som håller koll på när ett rum är bokat Exempel på funktionella lösningar en lista för varje rum. listan innehåller textsträng med bokad tid en gemensam lista med alla rum, listan innehåller listor med namn på rum, samt bokad tid Exempel på lösningar med OOP en klass som definierar ett rum med som innehåller en lista med bokade tider en klass som definierar en bokning med tidpunkt för bokningen en klass som definierar en bokning med tidpunkt för bokningen samt namn på rummet

Testning och felsökning

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? Interaktivt läge: ipython3 -i <filnamn> Kommandon: ls, cd, cat etc fungerar %run <filnamn> - kör fil %reset - rensa minnet från användarens variabler Ctrl-D för att avsluta (Ctrl-D är även kontrolltecknet för EOT, End of Transmission)

Använda python interaktivt Anropa funktioner, skapa instanser av klasser från fil(er) som laddats in i minnet. Allt man kan göra från en textfil. Kom dock ihåg att allt ligger kvar i minnet: globala variabler moduler som laddats in

Rätta buggar syntaxfel logiska fel runtime-fel (inträffar under körning) behövs omfaktorering?