Programmering grundkurs

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

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.

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

Programmering grundkurs

729G06 Programmering och logik. Grafiska gränssnitt och eventdriven programmering

729G06 Föreläsning 1 Objektorienterad programmering

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

Programmering grundkurs

Programmering grundkurs

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

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

729G75 Programmering och algoritmiskt tänkande. Grafiska gränssnitt och händelsedriven programmering

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

Objektorienterad Programmering (TDDC77)

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

729G75 Programmering och algoritmiskt tänkande. Grafiska gränssnitt och händelsedriven programmering

Objektorienterad programmering. Grundläggande begrepp

Programmering grundkurs

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

Imperativ programmering. Föreläsning 4

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Klasshierarkier - repetition

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Arv. Fundamental objekt-orienterad teknik. arv i Java modifieraren protected Lägga till och modifiera metoder med hjälp av arv Klass hierarkier

Objektorienterad programmering

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Objektorienterad Programmering (TDDC77)

"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde

Java, klasser, objekt (Skansholm: Kapitel 2)

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Objektorienterade programmeringsspråk. Objektorienterade språk. Den objekt-orienterade modellen. Jämför med icke-oo

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

Objektorienterad Programmering (TDDC77)

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

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

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Outline. Objektorienterad Programmering (TDDC77) Laborationsserie del två. Vad händer under HT2. Introduktion HT2 UML.

Föreläsning 2. Objektorienterad analys och design. Analys: att modellera världen. Design: att strukturera program.

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

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

Laboration 1 - Grunderna för OOP i Java

Objektorienterad Programmering (OOP) Murach s: kap 12-16

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

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

PROMETHEUS. Ett typat, objektorienterat programmeringsspråk av Tim Andersson.

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

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

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Historik: OOP. Objektorientering. Historik: OOP (forts) En Dum Fråga

Objektorienterad programmering, allmänt

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?

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

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

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

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Konstruktion av klasser med klasser

725G61 - Laboration 5 Grundläggande objektorientering. Johan Falkenjack

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

UML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Målen med OOSU. Objektorienterad programmering. Objektorienterad programmering. Karlstads Universitet, Johan Öfverberg 1

Objektorienterad programmering Föreläsning 4

Programmering, grundkurs

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

729G06 Programmering och logik. Grafiska gränssnitt och eventdriven programmering del 2

Outline. Objektorienterad Programmering (TDDC77) Åsidosättning. Signatur. Åsidosättning. Abstrakta klasser. Ahmed Rezine.

Sätt att skriva ut binärträd

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Typhierarkier del 1 Gränssnitt, ärvning mellan gränssnitt, ärvning mellan klasser

Hos vad? och bör därför vara instanseller klassvariabel i vilken klass?

DAT043 - Föreläsning 7

Klasser och objekt. Henrik Johansson. August 20, 2008

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 15: Repetition DVGA02

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

Exempel: Exempel: Exempel: Exempel: $djur=array("ko","katt","älg"); foreach ($djur as $d) { echo $d. " "; } Resultat. ko katt älg

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar

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

Objektorienterad programmering Föreläsning 15. Grafiska användargränssnitt (GUI Graphical User Interface)

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

Klasshierarkier. Klasser kan byggas på redan definierade klasser

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

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

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Övning 6. Ali Tofigh 24 Oktober, 2006

Mer grafik. Jan Erik Moström

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

Objektorienterad programmering

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

TDP005. Föreläsning 3 - UML. Filip Strömbäck

Transkript:

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

Föreläsningsöversikt, FÖ 8-9 Kurslogistik: nya pargrupper Programmeringsparadigm: Objektorienterad programmering (OOP) Klass, instans, instansvariabler, metoder Syntax för att skapa klasser Syntax för att använda klasser och objekt UML-diagram Funktioner som objekt Exempel på OOP, gränssnitt Standarder för Python. PEP8 och PEP257. Programmeringsmetod: analys, implementation, testning, felsökning

Sammanfattning av period 1 Syntax och användning av funktioner Grundläggande datatyper/datastrukturer Syntax för kontrollstrukturer (villkor, loopar) Iteration och rekursion Dela upp problem, bryta ut funktioner, introduktion till abstraktion

Objektorienterad programmering ett nytt programmeringsparadigm

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

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. (Att fundera på: jämför detta med hur moduler fungerar)

Terminologi Klass Objekt / Instans Egenskapsvariabel / Instansvariabel Metod

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

Jobba med klasser och objekt (förhandsvisning)

Definition av en klass class Book(object): def init (self, title): self.title = title self.author = "Unknown" self.year = "N/A" def print_citation(self): citation = "{}. ({}). {}." print(citation.format(self.author, self.year, self.title))

Objekt, dess egenskaper och beteenden klassens namn variabler metoder

Skapa/instansiera ett objekt av en viss klass Inbyggda klasser, t.ex. listor och dictionaries har syntaktiskt socker {}, [] För användardefinierade klasser använder vi klassens namn följt ett parentespar med eventuella argument. T.ex. bok = Bok() Ett anrop till namnet på en klass skapar en instans av den klassen.

Definiera klasser, skapa objekt

Definiera en klass Python för bok över vilka klasser som finns. Varje klass lagras i en hierarki av klasser. Klasshierarkin finns för att vi ska kunna återanvända kod från "klassföräldrar", basklasser (kallas ibland även för superklasser). För att definiera en klass använder vi nyckelordet class följt av ett namn, samt ett parentespar med den nya klassens basklass. Tills vidare låter vi denna vara klassen object. Definition av ny klass, Bok. class Bok(object): pass

Skapa/instansiera ett objekt av en viss klass Inbyggda klasser, t.ex. listor och dictionaries har syntaktiskt socker {}, [] För användardefinierade klasser använder vi klassens namn följt ett parentespar med eventuella argument. T.ex. bok = Bok() Ett anrop till namnet på en klass skapar en instans av den klassen.

Vad händer när en instans av en klass skapas? 1. Python skapar ett nytt objekt (låt oss referera till den som obj1) som får en referens till den klass den tillhör samt vilken klass som är dess basklass. 2. Om metoden init är definierad i obj1s klass, anropas den metoden med en referens till obj1. 3. Om metoden init inte är definierad i obj1s klass, letar Python vidare i obj1s basklass. 4. Om metoden init inte är definierad i obj1s basklass, letar python vidare i obj1s basklass basklass 5.... o.s.v. tills python hittar en definierad init varpå den metoden körs med en referens till obj1.

Struktur hos klassdefinitioner

Klassen dess egenskaper och beteenden namn egenskaper beteenden

Klassen dess egenskaper och beteenden klassnamn instansvariabler (instans-)metoder

Definition av en klass class Book(object): def init (self, title): self.title = title self.author = "Unknown" self.year = "N/A" def print_citation(self): citation = "{}. ({}). {}." print(citation.format(self.author, self.year, self.title))

Definition av en klass class Book(object): def init (self, title): self.title = title self.author = "Unknown" self.year = "N/A" def print_citation(self): citation = "{}. ({}). {}." print(citation.format(self.author, self.year, self.title)) Nyckelordet class berättar att vi definierar en klass. Klassnamn bör vara substantiv och ska enligt standard börja med stor bokstav. Efter klassnamnet kommer namnet på klassens basklass class Book(object): betyder alltså "vi ska nu definiera klassen Book som har object som basklass"

Definition av en klass class Book(object): def init (self, title): self.title = title self.author = "Unknown" self.year = "N/A" def print_citation(self): citation = "{}. ({}). {}." print(citation.format(self.author, self.year, self.title)) Nyckelordet "def" används för att definiera metoder i en klass. Alla metoder tar in en referens till den instans som de tillhör som första argument. Python skickar detta automatiskt. Variabler som hör till en instans har "self." som prefix.

Definition av en klass class Book(object): def init (self, title): self.title = title self.author = "Unknown" self.year = "N/A" def print_citation(self): citation = "{}. ({}). {}." print(citation.format(self.author, self.year, self.title)) Metoden init är speciell. Den beskriver det som händer när en instans av klassen skapas. self är en referens till den instans metoden anropas ifrån. Python skickar med den automatiskt när ett anrop på formen objekt.metod() görs. Instansvariabler, variabler som tillhör en instans av en klass används med referensen self.

Använda objekt

Skapa en instans av en klass Klassens namn följt av ett parantespar med eventuella argument skapar en instans av en klass. Klassnamn(arg1, arg2)

Använda metoder och instansvariabler Använda metod (metodanrop) objekt.metodnamn(arg1, arg2) returvärde Använda instansvariabel (hämta värde) objekt.instansvariabel värde Tilldelning av värde till en instansvariabel objekt.instansvariabel = 5 objekt.instansvariabel = ["lista"]

Punktnotation (modul.)variabel (modul.)funktion() (modul.)klass() objekt.metod() objekt.instansvariabel a = [1, 2, 3] a.append(4) s = "hejsan" s.upper()

Vi skapar böcker class Book(object): def init (self, title): self.title = title self.author = "Unknown" self.year = "N/A" def pretty_print(self): citation = "{}. ({}). {}." print(citation.format(self.author, self.year, self.title)) bok1 Book title: "The Practice of Computing Using Python" author: "Unknown" year: "N/A" pretty_print bok1 = Book("The Practice of Computing using Python") bok2 = Book("PSwAaDSuP") bok2 Book title: "PSwAaDSuP" author: "Unknown" year: "N/A" pretty_print

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

Instansvariabler och metodanrop 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

Instansvariabler och metodanrop 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()

Instansvariabler och metodanrop class Book(object): def init (self, title): self.title = title self.author = "Unknown" self.year = "N/A" def pretty_print(self): citation = "{}. ({}). {}." print(citation.format(self.author, self.year, self.title)) bok1 = Book("The Practice of Computing using Python") bok2 = Book("PSwAaDSuP") print(bok1.title) print(bok2.author) bok1.pretty_print() print(bok2.title) print(bok2.author) bok2.pretty_print() bok1.author = "Punch, W. F., & Enbody, R" bok1.year = "2017" bok1.pretty_print()

Terminologi Klass Objekt / Instans Egenskapsvariabel / Instansvariabel Metod

Klassdiagram i UML

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

Speciella metoder i Python exempel: init, str

Speciella metoder, börjar och slutar med Metoden init används när en instans av en klass skapas Metoden str används när en instans av en klass (ett objekt) ska visas som en sträng

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)

Funktionsobjekt Alla värden (data) är objekt i Python. Definierade funktioner kan också ses som en typ av värden - funktionsobjekt

Funktionsobjekt Klasser kan instansieras och producera objekt I Python är även funktioner objekt. En funktion: def hejsan(): print("hejsan") Ett funktionanrop: hejsan() Funktionsobjektet: hejsan

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

Grafiska gränssnitt exempel på tillämpning av objektorienterad programmering

GUI = Graphical User Interface Grafiskt gränssnitt Gränssnitt - något som ligger mellan två andra saker. I vårt fall: det mellan användaren och programmet

Widgets (window gadgets) Label Text input field Label Text input field Drop Down Radio Button 1 Radio Button 2 Radio Button 3 Selected Checkbox Unselected Checkbox Selected Checkbox Unselected Checkbox Button 1 Button 2

"Bakom" kulisserna Widgets, instanser av olika typer av GUI-element. Olika typer av fönster: dialogrutor, öppna dokument etc Behållare (Containers) som kan innehålla widgets: Frame, Panel, Canvas Funktionalitet för att ordna layout av widgets etc Koppling mellan widgets och funktioner/metoder.

Program- och interaktionsflöd för grafiska gränssnitt

Exempel: GUI

Exempel: GUI Name Title Sex Amanda the Giant Slayer Female Male This is the story of Amanda, the Giant Slayer. Ever since the day she was born, Amanda had a unwashed look. Amanda had a magic bag. Sadly, there is not much else to say about her. Appearance unwashed Other has magic bag is happy has secret Reset Quit

Programflöde: GUI Icke-linjär interaktion Reaktivt gränssnitt - tät återkoppling Interaktion via mus och tangentbord Interaktion med en begränsad och standardiserad uppsättning widgets (oftast)

Syfte med att skapa grafiska gränssnitt i Python med tkinter Introduktion till GUI-programmering Widgets i tkinter få saker att hända när man interagerar med widgets bestämma layout för widgets i ett GUI

Om tkinter Olika widgetklasser finns: faktiska gränssnittskomponenter är instanser av klasserna Olika inställningar kan ges när man skapar en widget. Widgets kan placeras i ett GUI på tre sätt - det finns tre "geometry managers" (i andra språk också kallade för "layout managers").

Widgets http://pythonwiki.tiddlyspot.com/#%5b%5bvisual%20guide%20to%20tkinter%20widgets%5d%5d