Dagens föreläsningar

Storlek: px
Starta visningen från sidan:

Download "Dagens föreläsningar"

Transkript

1 Dagens föreläsningar Iteratorer Utvecklingsmönster och PyUnit Grafik och grafiska användargränssnitt (GUI) Orientering andra dynamiska språk Liten presentation av Ruby

2 Iteratorer

3 Iteratorer En av de vanligaste uppgifterna i ett program är att repetera kod. I många språk genomförs dessa loopar med hjälp av numeriska index. En annan lösning är att använda iteratorer. För att slippa loopar som tex: for i in range(len(a)) Designfilosofi: Låt varje objekt vara ansvarigt för sitt innehåll. En iterator säger "Jag kan gå igenom hela min datamängd ett objekt i taget". En användare av en iterator säger "Jag vill utföra något för alla objekt i den här samlingen".

4 Exempel med beräkningsdomän Anta att Mesh är en klass som definierar en tvådimensionell beräkningsdomän bestående av ett rutnät med värden i noder. Följande kodfragment skapar ett nät för nuvarande värden och ett för ändringen. Därefter uppdateras randen och innandömet med lämpliga FDM-stenciler. currentmesh = Mesh() changes = calculatechanges(currentmesh) # Returnerar ett Mesh-objekt for x in range(len(currentmesh.nx)): for y in range(len(currentmesh.ny)): if x > 0 and x < currentmesh.nx 1 and \ y > 0 and y > currentmesh.ny - 1: currentmesh[x][y] += changes[x][y] else: currentmesh[x][y] = BC(x,y)

5 Dags för uppdatering Anta nu att klassen Mesh utökas med en eller flera av följande förändringar: Stöd för N dimensioner. Diskretiseringen byts till triangelformade finita element. Parallellisering införs där nätet delas upp mellan olika processorer. Ett glest matrisformat används för lagring av värdena och värden mindre än ett tröskelvärde betraktas som 0. Möjlighet att ha ränder inuti domänen, eller flera icke sammanhängande domäner.

6 Konsekvenser Samtliga dessa förändringar resulterar i att vår existerande kod kanske inte fungerar som väntat. Betrakta nu följande kod: currentmesh = Mesh() for coord in currentmesh.innerpoints(): currentmesh.calcchange(coord) for coord in currentmesh.boundary(): currentmesh.calcboundarychange(coord) Här förutsätts ingenting om Mesh:s interna datastruktur. Därmed kan uppdateringarna göras oberoende av intern struktur. Kanske är for-loopen helt onödig? currentmesh = Mesh() currentmesh.calcchange()

7 En variant av range class my_range: def init (self,last=10): self.last=last; def iter (self): self.current_number = -1 return self def next(self): self.current_number += 1 if self.current_number == self.last: raise StopIteration return self.current_number $ python my_range.py if name == " main ": for n in my_range(10): print n

8 En användbar iterator # -*- coding: utf-8 -*- # iterator_01.py class ColorIterator: colors = ["Red", "Green", "Blue", "Yellow", "Black", "Brown"] def iter (self): self.current_color = -1 return self $> python iterator_01.py Red Green Blue Yellow Black Brown def next(self): self.current_color += 1 if self.current_color == len(self. class.colors): raise StopIteration return self. class.colors[self.current_color] if name == " main ": ci = ColorIterator() for color in ci: print color

9 Implementera med yield Satsen yield lagrar en funktions tillstånd. Nästa gång funktionen anropas kommer exekveringen att fortsätta efter yield-satsen, med lokala variabler intakta. Inte hela sanningen! Se help( yield ). # -*- coding: utf-8 -*- # iterator_02.py def colors(available = ["Red", "Green", "Blue", "Yellow", "Black", "Brown"]): for color in available: yield color $> python iterator_02.py Red Green Blue Yellow Black Brown if name == " main ": for color in colors(): print color

10 Fibonacciserie med iterator Fibonacciserien är en talserie som inleds med 0 och 1. Därefter är varje tal summan av föregående två tal, 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144 Serien dyker upp på många ställen inom exempelvis biologin. Serien är oändlig och passar därför bra för att implementeras som en iterator. Varför inte rekursivt i Python? # -*- coding: utf-8 -*- # iterator_03.py def fib(limit=10): x, y, count = 0, 1, 0 while count < limit: yield x x, y = y, x + y count += 1 if name == " main ": for num in fib(15): print num,

11 Skapa en lista från en operator menten i en iterator kan vi använda # -*- funktioner coding: utf-8 från -*- modulen iterto # iterator_04.py def fib( ): x, y = 0, 1 while True: yield x x, y = y, x + y if name == " main ": import itertools print list(itertools.islice(fib(), 10)) $> python iterator_04.py [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

12 Parallella iteratorer # -*- coding: utf-8 -*- gar parallellt används funktionen izip, också från itertools. # iterator_05.py import itertools era funktioner för iteratorer, se dokumentationen för detaljer. a = ["a1", "a2", "a3", "a4"] b = ["b1", "b2", "b3"] if name == " main ": for x, y in itertools.izip(a, b): print x, y $> python iterator_05.py a1 b1 a2 b2 a3 b3

13 k Filter och lambda Filter används för att ta bort element ur sekvenser. kort_sekvens=filter(funktion, sekvens) Lambda används för att skriva (anonyma) funktioner >>> g = lambda x: x*x >>> g(3) 9 >>> >>> nums = range(2, 50) >>> for i in range(2, 8):... nums = filter(lambda x: x == i or x % i, nums)... >>> print nums # ger vad?

14 Testdriven programutveckling

15 Testa kod För små program är det ofta enkelt att avgöra om det gör vad det ska. Ju mer komplext och omfattande ett program blir desto svårare blir det att överblicka. Ändringar i en del av koden får inte resultera i att existerande funktionalitet fallerar. Detta kräver någon form av systematisk testning av kod.

16 Unit testing Unit testing innebär att man isolerar olika beteenden hos ett objekt och verifierar att dessa fungerar som förväntat. Exempelvis kan man kontrollera att en kod som ska hantera lösenords giltighet godkänner respektive underkänner givna exempellösenord. Ofta kopplas ett test till varje objekt i en applikation. Ett bra unit test testar så stor del som möjligt av objektet samtidigt som varje deltest är så oberoende som möjligt. Genom att ha oberoende test minskar man den kod som behöver felsökas då ett fel uppstår.

17 Test Driven Development Test Driven Developmen, TDD, är en metod för att skapa testkod till applikationer. Då man använder TDD låter man unit testing vara en styrande del i utvecklingsprocessen. Enheter defineras av tester som skrivs innan enheten själv. Därmed kommer den färdiga applikaitonen ha en testsvit som kontrollerar att varje liten del fungerar som den ska. Det finns även andra former av testning.

18 TDD:s fem steg Lägg till ett test. Kontrollera att testet fallerar. Gör en minimal implementation för att klara testet. Kontrollera att hela testsviten klaras. Refaktorisera koden.

19 Exempel TDD Anta att vi har en klass som hanterar taxibilar. Vi har instansvariabler som hanterar körd sträcka och aktuell taxa. Förutsättningen är att programmet klarar alla test i nuvarande testsvit vid varje TDD-rundas början.

20 Existerande kod # -*- coding: utf-8 -*- # taxi.py Vi vill nu lägga till en metod som returnerar class Taxi: total kostnad för aktuell def init (self, fare, distance): resa. self.fare = fare self.distance = distance $> python taxi_test.py Ran 1 test in 0.000s # -*- coding: utf-8 -*- # taxi_test.rb import unittest from taxi import Taxi class TaxiTestCase(unittest.TestCase): def setup(self): self.taxi = Taxi(12, 87) def teardown(self): pass def testcreation(self): assert self.taxi.fare == 12 assert self.taxi.distance == 87 def suite(): suite = unittest.testsuite() suite.addtest(taxitestcase("testcreation")) return suite if name == " main ": unittest.main()

21 Steg 1: Lägg till ett test Ett test kan läggas till som en ny assertion i ett existerande test eller som ett nytt testfall. Vi väljer att lägga till ett nytt testfall. Vi utformar vårt test så att den färdiga koden ska klara det, väl medvetna om att existerande kod inte har denna funktionalitet än. # -*- coding: utf-8 -*- # taxi_test.rb import unittest from taxi import Taxi class TaxiTestCase(unittest.TestCase): def setup(self): self.taxi = Taxi(12, 87) def teardown(self): pass def testcreation(self): assert self.taxi.fare == 12 assert self.taxi.distance == 87 def testtotalprice(self): assert self.taxi.total_cost() == 12*87 def suite(): suite = unittest.testsuite() suite.addtest(taxitestcase("testcreation")) suite.addtest(taxitestcase("testtotalprice")) return suite if name == " main ": unittest.main()

22 Steg 2: Kontrollera att testet fallerar För att kunna kontrollera att testet misslyckas "på rätt sätt" måste vi lägga till en tom metod. $> python taxi_test.py.f ==================================== FAIL: testtotalprice ( main.taxitestcase) Traceback (most recent call last): File "taxi_test.py", line 20, in testtotalprice assert self.taxi.total_cost() == 12*87 AssertionError Ran 2 tests in 0.000s FAILED (failures=1) # -*- coding: utf-8 -*- # taxi.py class Taxi: def init (self, fare, distance): self.fare = fare self.distance = distance def total_cost(self): return 0

23 Steg 3 och 4: Minimal implementation och klarat test Här görs en så liten implementation som möjligt som klarar testet. Därefter kontrolleras om testsviten klaras. Om inte så görs förändringar i koden till sviten klaras. Om fel uppstår i programdelar som inte berörs av det aktuella testet indikerar detta oönskade kopplingar i koden. # -*- coding: utf-8 -*- # taxi.py class Taxi: def init (self, fare, distance): self.fare = fare self.distance = distance def total_cost(self): return self.fare * self.distance $> python taxi_test.py Ran 2 tests in 0.000s OK Båda testen klaras

24 Steg 5: Refaktorisering Refaktorisering innebär att ett objekt ändras internt utan att dess externa gränssnitt påverkas. I detta fall behövs inga ändringar men för större koder kan "uppstädning" behövas. Genom att köra testsviten kan vi garantera att refaktoriseringen fortfarande har samma funktion som tidigare. Refaktorisering kan introducera buggar som inte täcks av testsviten.

25 Korta kommentarer Undvik för omfattande test. Kan tyda på "gudsobjekt". TDD är en konst som kräver träning! Man tvingas bli konsument av sin egen kod. Även TDD-genererad kod innehåller buggar, men samma bugg behöver bara hanteras en gång.

26 Grafiska användargränssnitt

27 Grafiska användargränssnitt Varför finns grafiska användargränssnitt? Hur är de uppbyggda? Skapa grafik i Python. Ett antal exempel. Händelsehantering. Tips inför projekten.

28 Varför använda grafik (GUI)? Öka användbarheten. Minska inlärningströskeln. Inte alltid bästa lösningen, exempelvis kan terminalgränssnitt vara lämpligt för systemadministration. Kan vara bra att erbjuda flera olika gränssnitt. Sist men abslout inte minst: Psykologisk effekt.

29 Grafikbiblioteket Tkinter De facto standard, följer med (nästan) alla standardinstallationer. Står för Tk interface och kan ses som ett kopplingsbibliotek mellan Tk GUI toolkit och Python. (dvs en adapter eller wrapper) Ett av flera sätt att skapa grafik i Python.

30 Plattformsoberoende grafik Python finns för en mängd plattformar, exempelvis Unix, Linux, Windows och Mac OS X. Utseendet måste följa plattformarnas standarder utan att kräva ändringar i koden. Kräver en abstrakt beskrivning av ingående widgets, snarare än exakta grafikdetaljer. Fördel: Portabel kod även för grafik. Nackdel: Svårt att skapa exakta gränssnitt. De flesta GUI-moduler är sk abstract factories

31 Hur är ett GUI uppbyggt?

32 Ett första kodexempel # first_example.py from Tkinter import * root = Tk() my_widget = Label(root, text="hello world") my_widget.pack() root.mainloop()

33 Genomgång av programmet # first_example.py from Tkinter import * root = Tk() my_widget = Label(root, text="hello world") my_widget.pack() root.mainloop() Programmet följer en arbetsordning för att skapa widgets: apa en huvudbehållare, i detta fall ett Tk-objekt. apa en widget av den typ man vill ha, här ett Label-objekt. ge egenskaper för widgeten, tex. färg och form. nropa pack-metoden för att lägga till widgeten i gränssnittet. petera steg 2-4 för varje widget. ropa mainloop-metoden för huvudbehållaren för att visa den och alla underliggande widg

34 Packa widgets Packaren anropas för varje widget med önskemål om hur widgeten ska se ut och bete sig. Önskemålen innefattar dels ursprunglig placering och utsträckning i en behållare, dels hur widgeten ska förändras då behållaren ändrar storlek. Packaren försöker tillgodose alla önskemål. Om två önskemål krockar tar packaren hänsyn till packordningen, dvs. i vilken ordning pack anropats.

35 Placering En widgets placering styrs av argument till pack-metoden. Sida i behållaren anges med side och placering längs sidorna med anchor. Widgetens beteende vid förändringar i huvudbehållaren anges med expand och fill.

36 Exempel på placeringar (PiP 12.2) # graphics02.py from Tkinter import * Button(text="En knapp").pack() mainloop() # graphics03.py from Tkinter import * Button(text="En knapp").pack(anchor=ne) mainloop() phics04.py Tkinter import * n(text="en knapp").pack(expand=yes, oop() fill=both)

37 Flera widgets # graphics07.py from Tkinter import * Button(text="Knapp 1").pack(side=TOP, fill=x) Button(text="Knapp 2").pack(side=RIGHT, fill=y) Button(text="Knapp 3").pack(expand=YES, fill=both) mainloop()

38 Flera widgets # graphics08.py from Tkinter import * Button(text="Knapp 2").pack(side=RIGHT, fill=y) Button(text="Knapp 1").pack(side=TOP, fill=x) Button(text="Knapp 3").pack(expand=YES, fill=both) mainloop()

39 Vanliga widgets Label. Textetikett. (13.1) Button. Klickbar knapp. (13.2) Radiobutton. Välj ett alternativ av flera. (13.3) Checkbutton. Välj valfritt antal alternativ. (13.4) Entry. Läs in kortare text. (13.5) Frame. Ordna grupper av widgets. (13.6)

40 Mer avancerade widgets Menu. Vanliga menyer. (14.1) Menubutton. Knappar som öppnar en meny. (14.2) Canvas. Målarduk för sammansatt grafik. (14.3) Text. Textruta för längre texter. (14.4) Dialogrutor (egentligen inga widgets). (14.7)

41 Klasser och arv i Tkinter Varje widgettyp i Tkinter är en klass. Varje widget i ett GUI är ett objekt. Huvudprogrammet kan skapas som subklasser till Tkinter-klasser, exempelvis Tk eller Toplevel. Grafikkomponenter skapas med fördel som subklasser till Tkinter, exempelvis Frame.

42 En förbättrad textruta # entry01.py from Tkinter import * class ExtendedEntry(Entry): # Konstruktor def init (self, root, **options): # Anropa superklassens konstruktor Entry. init (self, root, options) # Koppla fokus till händelsehanterare self.bind('<focusin>', self.selectall) def selectall(self,event): # Markera all text och sätt markören sist self.select_range(0,end) self.icursor(end) root = Tk() currtext = StringVar() # Kontrollvariabel för texten currtext.set('klicka här för att ändra texten.') ExtendedEntry(root, textvariable=currtext, width=30).pack() root.mainloop()

43 En återanvändbar komponent # ControlPanel.py from Tkinter import * class ControlPanel(Frame): def init (self, root, **options): # Anropa superklassens konstruktor Frame. init (self, root, options) # Etikett för titelboxen Label(self, text='aktuellt spår:').pack(side=top, fill=x) # Skapa textbox för titel currtracktitle = StringVar() # Kontrollvariabel för texten currtrack = Entry(self, textvariable=currtracktitle).\ pack(side=top, fill=x) # Skapa och packa knappar btnplay = Button(self, text='play') btnplay.pack(side=left, expand=yes, fill=x) btnrewind = Button(self, text='rewind') btnrewind.pack(side=left, expand=yes, fill=x) btnforward = Button(self, text='forward') btnforward.pack(side=left, expand=yes, fill=x) btnstop = Button(self, text='stop') btnstop.pack(side=left, expand=yes, fill=x)

44 ..fortsättning av koden if name == ' main ': # Testa ControlPanel-klassen root = Tk() cp = ControlPanel(root) # Packa hela ramen cp.pack(fill=x) # Starta väntfas root.mainloop() För en applikation som använder denna komponent, se Programmering i Python

45 Rullbara listor # listbox01.py from Tkinter import * class ScrollListbox(Frame): def init (self, options, parent=none): Frame. init (self, parent) self.pack(expand=yes, fill=both) sb = Scrollbar(self) # Skapa rullisten lb = Listbox(self, relief=sunken) # Skapa listboxen sb.config(command=lb.yview) # Korslänkning lb.config(yscrollcommand=sb.set) # - " - sb.pack(side=right, fill=y) lb.pack(side=left, expand=yes, fill=both) for option in options: # Lägg till valen lb.insert(end, option) # END är listboxens slut lb.bind('<double-1>', self.process) # Kopplar dubbelklick self.listbox = lb def process(self, event): print 'Du valde', self.listbox.get(active) options = [] for i in range(1,21): options.append('val ' + str(i)) # Lägg till val root = Tk() Label(text='Dubbelklicka på ditt val.').pack() ScrollListbox(options).pack() root.mainloop()

46 Standardisera widgets Det kan vara smidigt att ändra standardutseendet på widgets. # options.txt *background: LightGreen *Button.background: Red # standardvalues.py from Tkinter import * root = Tk() root.option_readfile ('options.txt') Label(root, text='detta är en etikett').pack(side=left) Button(root, text='detta är en knapp').pack(side=left) root.mainloop()

47 Bilder och bildhantering Bildhantering finns implementerat i Python Imaging Library, PIL. Detta är fritt nedladdningsbart. Hanterar de flesta vanliga (och ett antal ovanliga) bildformat, såsom JPEG, TIFF och PNG. Lägger till text och annan grafik i bilderna. Se PiP 12.7 för detaljer. /

48 Menyer (PiP 14.1) #menu01.py from Tkinter import * def notimplemented(): print 'Menyvalet är inte implementerat ännu.' def printmenuopened(): print "Du öppnade en meny." root = Tk() # Skapa meny med root som parent topmenu = Menu(root) # Skapa en undermeny med topmenu som parent file = Menu(topMenu, tearoff=0) file.add_command(label='ny', command=notimplemented, underline=0) file.add_command(label='öppna', command=notimplemented, underline=0) file.add_command(label='spara', command=notimplemented, underline=0) file.add_separator() file.add_command(label='avsluta', command=sys.exit, underline=0) # En undermeny till tools = Menu(topMenu,postcommand=printMenuOpened) tools.add_command(label='kompilera', command=notimplemented, underline=0) tools.add_command(label='jämför', command=notimplemented, underline=0)...

49 fortsättning på menykod. # Skapa en undermeny till sökalternativet searchmenu = Menu(tools, tearoff=0) searchmenu.add_command(label='källkod', command = notimplemented, underline=0) searchmenu.add_command(label='kommando', command = notimplemented, underline=0) searchmenu.add_command(label='dokumentation', command = notimplemented, underline=0) # Skapa menypost med undermeny tools.add_cascade(label='sök', menu=searchmenu, underline=0) # Skapa tvvägslänk mellan root och topmenu root.config(menu=topmenu) # Skapa tvåvägslänkar mellan topmenu och undermenyerna topmenu.add_cascade(label='fil', menu=file) topmenu.add_cascade(label='verktyg', menu=tools) # Innehåll i fönstret Label(root, height=10, width=50, text='välj något i menyerna.').pack() root.mainloop()

50 Arv inte alltid rätt lösning Att skapa program som subklasser till Tkinterklasser är inte alltid en bra lösning. I en objektorienterad design vill man helst separera logik och presentation (Model-View- Controller, MVC). Anta att vi har kod som hanterar bankkonton och kunder. Om vi skapar logiken som en separat modul kan denna kopplas till ett lokalt GUI, ett webbaserat GUI eller användas från terminalen. Att använda arv eller inte är ett designval. Båda alternativen har för- och nackdelar.

51 Händelsehantering Ett GUI är ointressant i sig, det måste kunna ta emot inmatning från användaren och agera utifrån denna. Inmatning kan ske via musen, tangentbordet eller annan liknande utrustning. Fokuseringen på händelser förändrar programstrukturen och designen. Passar bra för modularisering och objektorienterad programmering.

52 Linjärt eller händelsestyrt program I ett linjärt program: Utförs saker i en förutbestämd ordning. Sker all inmatning vid bestämda tillfällen. I ett händelsestyrt program: Finns ofta en central väntslinga (mainloop). Utförs programavsnitt, händelsehanterare, beroende på vilken händelse som sker. Observera att händelsestyrda program inte nödvändigtvis måste vara baserade på ett GUI.

53 En första händelsehanterare # events01.py from Tkinter import * def onleftclick(event): print event. class label.configure(text="du klickade vänster musknapp.") def onrightclick(event): label.configure(text="du klickade höger musknapp.") root = Tk() label = Label(root, text="") # Skapa etikett label.pack(fill=x) button = Button(root, text="klicka med valfri musknapp") button.bind('<button-1>', onleftclick) # Koppla vänsterklick button.bind('<button-3>', onrightclick) # Koppla högerklick button.pack(fill=x) root.mainloop()

54 Om händelsehanteraren Kan vara en funktion eller metod. Tar ett argument, ett Event-objekt som innehåller information om händelsen som ägt rum och den widget som genererade den. Samma händelsehanterare kan hantera händelser från flera olika widgets. När händelsehanteraren avslutas återgår programmet till väntfasen igen.

55 Att definiera en händelse En händelse beskrivs av en sekvens identifierare tillsammans med en eller flera modifierare. Identifierare är exempelvis Button-n, Activate, FocusIn, FocusOut. Se PiP 15.3 för en utförlig lista. Modifierare är exempelvis Alt, Control och Shift, se PiP <Control-ButtonRelease-1> anger att vänstra musknappen tryckts in och släppts samtidigt som control-tangenten hållts in.

56 Fler vanliga händelser Activate/Deactivate. Widgeten ändrar stateattributet. Configure. Widgeten ändrar storlek. Double-n. Musknapp n har dubbelklickats. KeyPress-key. Tangenten key har tryckts in. KeyRelease-key. Tangenten key har släppts. Enter. Muspekaren förs in över widgetens synliga delar. Leave. Muspekaren lämnar widgetens synliga delar.

57 Event-objektet # events05.py from Tkinter import * def onmouseclick(event): print 'Du klickade med knapp', event.num root = Tk() button = Button(text="Klicka på mig") button.bind('<any-button>', onmouseclick) button.pack(fill=x) root.mainloop() Andra användbara attribut för Event-objektet är: time, serial, widget, x och y. Se PiP 15.6 för en utförligare lista.

58 Ändra egenskaper dynamiskt Hittills har alla widgets egenskaper angetts då widgeten skapas. Naturligtvis går det även att ändra dessa dynamiskt under programmets gång. Egenskaperna sätts med metoden configure eller config. Egenskaper avläses med metoden cget. Egenskaper kan också sättas och avläsas med hakparenteser liknande ett dictionary: w[ foreground ] = red print w[ foreground ]

59 Exempel på dynamisk grafik # events06.py from Tkinter import * def togglecolor(): if label.cget("background") == "red": label.config(background="green") else: label.config(background="red") root = Tk() label = Label(root, text="text", background="green") label.pack(expand=yes, fill=both) Button(root, command=togglecolor, text="byt färg").pack(side=bottom,fill=x) root.mainloop()

60 Kontrollvariabler Används för att smidigt hantera data från widgets. Kan kopplas till flera widgets som därmed hålls synkroniserade. Innehållet kan antingen ändras av användaren via en widget eller av programmet via kontrollvariablen.

61 Exempel med kontrollvariabler # events07.py from Tkinter import * root = Tk() t = StringVar() # Skapa kontrollvariabel t.set('detta värde ges till båda objekten') # Sätt startvärde # Knappens och textrutans text kopplas till samma variabel Button(root,textvariable=t).pack(fill=X) Entry(root, textvariable=t).pack(fill=x) root.mainloop()

62 Kryssrutor och kontrollvariabler # checkbutton01.py from Tkinter import * def printform(): if haslicence.get(): print 'Personen har körkort.' if hasowncar.get(): print 'Personen har egen bil.' import sys sys.exit() root = Tk() haslicence = IntVar() Checkbutton(root,text = 'Körkort', variable =haslicence).pack(anchor=w) hasowncar = IntVar() Checkbutton(root,text = 'Egen bil',variable = hasowncar).pack(anchor=w) Button(root,text = 'Spara',command = printform).pack(anchor=s) root.mainloop()

63 Gruppera radioknappar # radiobutton01.py from Tkinter import * def onmealclick(): print mealvar.get() def ondrinkclick(): print drinkvar.get() root = Tk() mealvar = StringVar() meals = ['Frukost','Lunch','Middag'] for meal in meals: Radiobutton(root,command = onmealclick, text = meal, value = meal, variable = mealvar).pack(anchor=w) drinkvar = StringVar() drinks = ['Mjölk','Vatten','Läsk'] for drink in drinks: Radiobutton(root,command = ondrinkclick, text = drink, value = drink, variable = drinkvar).pack(anchor=w) root.mainloop()

64 Tidsberoende widgets För att ange att en händelse ska utföras efter en viss tid används metoden after. w.after(time, func, *args) Här kommer funktionen/metoden func att anropas med argumenten *args efter time millisekunder. Kan användas för att tex visa en klocka.

65 Andra sätt att skapa grafik Python Megawidgets, PMW, tar vid där Tkinter slutar. Microsoft Foundation Classes, endast tillgängligt för Windows. wxpython, snabbt och på frammarsch. Jython, Pythonimplementation i Java, ger tillgång till Javas grafik. GTK+ (GIMP Toolkit). PyGTK. Qt. PyQt. (inte helt gratis) Ncurses (nästa slide) g

66 Nästan GUI - ncurses

67 Andra dynamiska språk

68 Andra språk Förutom Python finns många andra dynamiska språk som kan vara lämpliga att känna till. Varje språk har en egen (mer eller mindre väl definierad) nisch och har fördelar och nackdelar. Python har vi redan stiftat bekantskap med. Perl kommer att presenteras torsdag 25:e juni. Ruby kommer få en lite närmare introduktion nedan. Här kommer en kort-kort presentation av andra språk som kan vara av intresse (långt från komplett).

69 PHP Utvecklades ursprungligen för att generera dynamiska webbplatser. Används nästan uteslutande på webben även om fristående applikationer är möjliga. Stöder OOP såväl som procedurbaserad programmering. Fördelar: Enorm användarbas. Väl anpassat för webben med många bibliotek. Nackdelar: Ej komplett stöd för Unicode. Inga namnrum. Typhanteringen kan ställa till problem.

70 ECMAScript Standardiserades i ECMA-262-specifikationen. Används ofta synonymt med de två vanligaste implementationerna JavaScript och JScript. Används främst i webbläsare. Fördelar: Möjliggör exekverandet av kod hos klienten utan installation av ny programvara. Nackdelar: Frågetecken kring säkerhet. Olika dialekter (håller på att standardiseras).

71 Groovy OO-språk designat för Javaplattformen. Lånade delar från Python, Ruby och Smalltalk. Groovy har Javaliknande syntax som kompileras dynamiskt till bytekod. Några skillnader mot standard-java Statisk och dynamisk typning Inbyggt stöd för listor, mappningar, fält och reguljära uttryck.

72 Lisp En språkfamilj. Skapades ursprungligen av John McCarthy Används ofta för programmering av artificiell intelligens. Har fått ett uppsving på 2000-talet med open sourcevarianten Common Lisp.

73 Smalltalk Finns i många varianter, oftast åsyftas Smalltalk-80. Rent objektorienterat språk. Allt sker genom att objekt skickar meddelanden till andra objekt. Smalltalk har inspirerat funktionalitet i många andra språk, exempelvis Ruby.

74 Ruby Skapades av Yukihiro "Matz" Matsumoto i början an talet. Språket släpptes officiellt 1995 och har de senaste fem åren vuxit enormt snabbt. Ruby är designat för att ge ökad produktivitet samtidigt som det ska inspirera kreativ och vacker programmering. "Principle of least surprise" I grunden objektorienterat. "Allt är objekt" är inte bara en floskel. Kan även hantera funktionell eller procedurbaserad programmering. Mest likt Perl och Python men har även byggt vidare på många idéer från Smalltalk.

75 Likheter mellan Python och Ruby Det finns en interaktiv prompt, irb. Det finns en motsvarighet till pydoc, ri. Inga radbrytningstecken behövs. Listor och hashtabeller har samma notation. Har stark, dynamisk typning. Alla variabler är referenser. Felhantering fungerar på samma sätt, men med andra nyckelord. I stort känns Ruby väldigt välbekant för en Pythonprogrammerare och vice versa.

76 Skillnader mellan Python och Ruby I Ruby är strängar inte statiska. finns äkta konstanter. styrs variablers räckvidd av namnkonventioner. är reguljära uttryck en inbyggd typ. är parenteser valfria i metodanrop. ersätter mixins (liknande interface i Java) multipelt arv. kan klasser öppnas och modifieras under exekvering. används iteratorer mer konsekvent. används block för att skapa flexibel och lättanvänd kod.

77 Öppna klasser I Ruby är klassdefinitionerna inte stängda. Detta medför att existerande objekt kan ges nya metoder efter det att de skapats. class ExampleClass def talk() print "Hejsan\n" end end e = ExampleClass.new() e.talk class ExampleClass def talk_more() print "Hej igen\n" end end e.talk e.talk_more

78 Individuellt beteende inom klassen I Ruby kan även enskilda existerande objekt utökas med nya metoder. Detta innebär att objekt inom samma klass inte nödvändigtvis har samma uppsättning metoder. class ExampleClass def talk() print "Hejsan\n" end end e = ExampleClass.new() e.talk def e.talk_more() print "Hej igen\n" end e.talk e.talk_more e2 = ExampleClass.new() e2.talk_more # => Method missing

79 Inkrementell klassdefinition Vad får detta för konsekvenser för programdesignen i Ruby? Inkrementella klassdefinitioner gör att det blir lättare att strukturera källkoden. Det går inte att identifiera ett objekts metoder genom att enbart studera källkoden Introspektion blir en viktig del av programmet.

80 Callbacks eller krokar En dynamisk ingrediens i Ruby är möjligheten att hantera callbacks för vissa händelser. Callbacks kan ses som händelsehanterare för händelser som genereras av Rubytolken. Exempel på callbacks är: En metod som inte finns anropas. En klass blir ärvd. En metod läggs till ett objekt.

81 Exempel på callbacks Klassen Cookbook är en samling med egna data. Genom att implementera method_missing kan alla beteenden som är förknippade med skickas vidare. Detta gör att metoder kan anropas direkt för Cookbook-instanser som om de definierats i Cookbook-klassen. class Cookbook attr_accessor :title, :author def = [] end end def end

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

Kort om klasser och objekt En introduktion till GUI-programmering i Java Kort om klasser och objekt En introduktion till GUI-programmering i Java Klasser En klass är en mall för hur man ska beskriva på något. Antag att vi har en klass, Bil. Den klassen innehåller en lista på

Läs mer

Starta ett fönster... Hur håller tkinter reda på musklick? Olika sätt att organisera fönsterinnehåll. Och för att placera våra widgets

Starta ett fönster... Hur håller tkinter reda på musklick? Olika sätt att organisera fönsterinnehåll. Och för att placera våra widgets Grafik Python levereras med ett grafikpaket tkinter De flesta av dagens applikationsprogram hanterar grafik Grafikhantering är komplicerat så använd färdigutvecklade grafikpaket Mycket att hålla reda på

Läs mer

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

Föreläsning 16 Arv. Jan Lönnberg 3.11.2011. T-106.1212 Grundkurs i programmering Föreläsning 16 Arv Grundkurs i programmering Jan Lönnberg Institutionen för datateknik -universitetets högskola för teknikvetenskaper 3.11.2011 Varför? I ett studieregister har vi både studenter och lärare.

Läs mer

TDP002 Imperativ programmering

TDP002 Imperativ programmering TDP002 Imperativ programmering Introduktion till kursen och python Eric Elfving Institutionen för datavetenskap (IDA) Översikt Programmering En introduktion Python Köra och skriva program Python grunderna

Läs mer

Klasshierarkier - repetition

Klasshierarkier - repetition Klasshierarkier - repetition Klasser kan byggas på redan denierade klasser, egna och/eller färdigskrivna, genom: I att klassobjekt används som attribut (instansvariabler): har-relation. Exempel: traksystemet

Läs mer

Objektorienterad programmering Föreläsning 2

Objektorienterad programmering Föreläsning 2 Objektorienterad programmering Föreläsning 2 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Inläsning av data via dialogrutor Repetitioner (While-satsen och For-satsen) Nästlade

Läs mer

TDP002 - Imperativ programmering

TDP002 - Imperativ programmering . TDP002 - Imperativ programmering Introduktion till kursen och Python Eric Elfving Institutionen för datavetenskap 14 augusti 2015 Översikt 2/29 Programmering - en översikt Python - Köra och skriva program

Läs mer

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan. Bankkonto - övning Övningar att göra efter lärardemostration. Filen bankkonto.zip innehåller ett projekt med klassen Bankkonto. Zippa upp denna fil och öppna projektet i BlueJ och skriv vidare på klassen

Läs mer

Kursplanering Objektorienterad programmering

Kursplanering Objektorienterad programmering Kursplanering Objektorienterad programmering Fakta Ämne Programmering Poäng 40 Yh-poäng Kurskod YSYS-OOP Klass Systemutvecklare.NET 2 Syfte och koppling till yrkesrollen Syftet är att få en stabil grund

Läs mer

PROV. 12 Egenskaper (provavsnitt)

PROV. 12 Egenskaper (provavsnitt) 12 Egenskaper (provavsnitt) 12.1 Egenskaper 12.2 Deklaration av egenskaper 12.3 Åtkomsttjänster för egenskaper 12.4 Åtkomsttjänster med genererade instansvariabler 12.5 Åtkomsttjänster med egna instansvariabelnamn

Läs mer

Föreläsnings 11 - GUI, Händelsestyrda program, MVC

Föreläsnings 11 - GUI, Händelsestyrda program, MVC Föreläsnings 11 - GUI, Händelsestyrda program, MVC Josef Svenningsson Tisdag 20/11 Boken Denna föreläsning går igenom följande sektioner i boken: 10.1 och 10.2 11.1 Notera att kapitel 11 inte finns i boken

Läs mer

Föreläsning 15: Repetition DVGA02

Föreläsning 15: Repetition DVGA02 Föreläsning 15: Repetition DVGA02 Vad handlar kursen om? Kursen kan i grova drag delas upp i tre delar: 1. Objekt-orienterad programmering 2. Grafiska användargränssnitt 3. Datastrukturer Dessutom genomsyras

Läs mer

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering

2I1049 Föreläsning 8. Grafiska gränssnitt i Java. AWT-komponenter. Grafiska gränssnitt, Java interface och händelsehantering 2I1049 Föreläsning 8 Grafiska gränssnitt, Java interface och händelsehantering 1 KTH-MI Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste

Läs mer

Chapter 4: Writing Classes/ Att skriva egna klasser.

Chapter 4: Writing Classes/ Att skriva egna klasser. Chapter 4: Writing Classes/ Att skriva egna klasser. I dessa uppgifter kommer du att lära dig om hur man definierar egna objekt genom att skriva klasser. Detta är grunden för att förstå objekt orienterad

Läs mer

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

Är en-relation. Har en-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde Föreläsning 7 "Har en"-relation Arv "Har en" "Är en" Superklassen Object Överskuggning Fordonsexempel Seminarium 2 Relevanta uppgifter Uppgift 31 I exemplet Boll från förra föreläsningen gällde följande

Läs mer

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,

Läs mer

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT 2013 1 / 42

Programmering i C++ EDA623 Arv. EDA623 (Föreläsning 6) HT 2013 1 / 42 Programmering i C++ EDA623 Arv EDA623 (Föreläsning 6) HT 2013 1 / 42 Arv Innehåll Härledda klasser Konstruktorer och destruktorer vid arv Tillgänglighet Polymorfism och dynamisk bindning Abstrakta klasser

Läs mer

Ingenjörsfirman Stéen 2001-12-13 Java Sida 1 av 1

Ingenjörsfirman Stéen 2001-12-13 Java Sida 1 av 1 Java Sida 1 av 1 Java Mål och Syfte Målet med denna kurs i Java är att du direkt efteråt ska kunna börja utveckla dina första Javaapplikationer. Kursen ger dig många konkreta exempel på hur detta effektiva

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

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

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten? Programmeringsteknik och Matlab Övning 4 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312

Läs mer

Introduktion till programmering. Programspråk och paradigmer

Introduktion till programmering. Programspråk och paradigmer Introduktion till programmering Programspråk och paradigmer Vad är ett programspråk? Aprogramming languageis a formal constructedlanguagedesigned to communicate instructions to a machine, particularly

Läs mer

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

Inledande programmering med C# (1DV402) Introduktion till C# Introduktion till C# Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så här: Allt innehåll i

Läs mer

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized.

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas (inbyggda monitor) synchronized. 2EMHNWRULHQWHUDG5HDOWLGVSURJUDPPHULQJ Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized. previous next Java Java är konstruerat på

Läs mer

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye DD2310 Javaprogrammering för Pythonprogrammerare Johan Boye James Gosling pappa till Java Hej.java public class Hej { public static void main( String[] args ) { System.out.println( "Hej" ); Java basics

Läs mer

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur

Objekt-orienterad utveckling. Objektorienterad analys och design. Objekt-orienterad programutveckling. Objekt-orienterad analys och design: Litteratur Objekt-orienterad utveckling Saker man vill uppnå: Objektorienterad analys och design Sven-Olof Nyström Uppsala Universitet 16 mars 2005 en systematisk metod för att gå från problembeskrivning till färdigt

Läs mer

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

Domänspecifika språk. TDP007 Konstruktion av datorspråk Föreläsning 5. Peter Dalenius Institutionen för datavetenskap 2013-02-11 Domänspecifika språk TDP007 Konstruktion av datorspråk Föreläsning 5 Peter Dalenius Institutionen för datavetenskap 2013-02-11 Domänspecifika språk Ett domänspecifikt språk (eng. domain specific language,

Läs mer

Programmering B med Visual C++ 2008

Programmering B med Visual C++ 2008 Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,

Läs mer

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Inledning Starta Microsoft Visual Studio 2005. Välj create Project Välj VB + Vindows Application och välj ett nytt

Läs mer

Institutionen för datavetenskap HT 1 2007/2008. Testning med JUnit

Institutionen för datavetenskap HT 1 2007/2008. Testning med JUnit LUNDS TEKNISKA HÖGSKOLA EDA690 Algoritmer och datastrukturer Institutionen för datavetenskap HT 1 2007/2008 Enhetstestning Testning med JUnit När man implementerat en klass måste man, innan den kan användas,

Läs mer

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 1 2 - Block, räckvidd Dagens föreläsning Programmering i Lisp - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning - Felhantering (kap 17) icke-normala återhopp catch

Läs mer

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

MATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och... Allt du behöver veta om MATLAB: Industristandard för numeriska beräkningar och simulationer. Används som ett steg i utvecklingen (rapid prototyping) Har ett syntax Ett teleskopord för «matrix laboratory»

Läs mer

Att öva på och förstå ett program med flera samverkande klasser.

Att öva på och förstå ett program med flera samverkande klasser. Inlämningsuppgift 4 klassen Kund (Customer) Att öva på och förstå ett program med flera samverkande klasser. Redovisning: Uppgiften redovisas i datasal: o Körning av programmet. o Redogöra för vad de olika

Läs mer

JavaRats. Kravspecifikation. Version 1.1. Gustav Skoglund gussk258@student.liu.se. Marcus Widblom marwi026@student.liu.se. Senast ändrad: 13 / 05 / 08

JavaRats. Kravspecifikation. Version 1.1. Gustav Skoglund gussk258@student.liu.se. Marcus Widblom marwi026@student.liu.se. Senast ändrad: 13 / 05 / 08 JavaRats Kravspecifikation Version 1.1 Gustav Skoglund gussk258@student.liu.se Marcus Widblom marwi026@student.liu.se Senast ändrad: 13 / 05 / 08 Sammanfattning Kravspecifikationen för JavaRats har skrivit

Läs mer

Laboration 1 Introduktion till Visual Basic 6.0

Laboration 1 Introduktion till Visual Basic 6.0 Laboration 1 Introduktion till Visual Basic 6.0 Förberedelse Förbered dig genom att läsa föreläsningsanteckningar och de kapitel som gåtts igenom på föreläsningarna. Läs även igenom laborationen i förväg.

Läs mer

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder

Introduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i

Läs mer

Språket Python - Del 1 Grundkurs i programmering med Python

Språket Python - Del 1 Grundkurs i programmering med Python Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR

Läs mer

729G06 Föreläsning 1 Objektorienterad programmering

729G06 Föreläsning 1 Objektorienterad programmering Översikt Formalia Vad är objektorienterad programmering 729G06 Föreläsning 1 Objektorienterad programmering Definieria klasser Skapa och använda objekt Annika Silvervarg Ciltab, IDA, Linköpings universitet

Läs mer

Innehållsförteckning

Innehållsförteckning Innehållsförteckning Ämne Sida Program Hur ska man lära sig programmering med Java? 11 Kapitel 1 Introduktion till programmering 13 1.1 Vad är programmering? 14 1.2 Vad är en algoritm? 16 1.3 Olika sätt

Läs mer

Avancerade Webbteknologier

Avancerade Webbteknologier Projektledning, Business Knowledge Användbarhet & Layout Avancerade Webbteknologier Lkti Lektion 1 Kommunikation Tobias Landén tobias.landen@chas.se Avancerade webbteknologier del 1 (4 KY poäng) Syfte

Läs mer

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

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a. Översikt UML Sekvensdiagram (dynamic structure) Informationsflöde genom programmet Användningsfall (use cases) Aktörers interaktion med systemet Paketdiagram Beroenden mellan paket abstrakta klasser Multipel

Läs mer

Tentamen i Grundläggande programmering STS, åk 1 lördag 2002-05-25

Tentamen i Grundläggande programmering STS, åk 1 lördag 2002-05-25 Tentamen i Grundläggande programmering STS, åk 1 lördag 2002-0-2 Skrivtid: 09.00 14.00 Hjälpmedel: Inga Lärare: Anders Berglund. Elena Fersman besöker tentan vid två tillfällen: cirka kl. 10.30 samt cirka

Läs mer

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET UMEÅ UNIVERSITET Datavetenskap 010824 TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET Datum : 010824 Tid : 9-15 Hjälpmedel : Inga Antal uppgifter : 7 Totalpoäng : 40 (halva poängtalet krävs normalt

Läs mer

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

DD1311 Programmeringsteknik för S1 Laborationer läsåret 2007-2008 DD1311 meringsteknik för S1 Laborationer läsåret 2007-2008 Fyll i ditt namn och personnummer med bläck eller motsvarande. Kursledare är Linda Kann, linda@nada.kth.se. Namn... Personnr... Laborationer Labb

Läs mer

3.5 Visuell programmering

3.5 Visuell programmering 3.5 Visuell programmering Alla våra program hittills har varit C# Console Applications (sid 41) inkl. programmet MessageBox fast det genererade en grafisk meddelanderuta. Nu vill vi utnyttja grafikens

Läs mer

Grundläggande Datalogi

Grundläggande Datalogi s delar Grundläggande Datalogi s delar s delar s delar Dataabstraktion Rekursion Algoritmanalys s delar Sortering Trädstrukturer Grafalgoritmer Optimering Stavning Strängmatchning Datakompression Versionshantering

Läs mer

Föreläsning 3: Händelsestyrda program och användargränssnitt

Föreläsning 3: Händelsestyrda program och användargränssnitt (2 september 2015 F3.1 ) Föreläsning 3: Händelsestyrda program och användargränssnitt Idag Från sekventiella till händelsestyrda program Lyssnare Kontroller Layout för ordning av kontroller (2 september

Läs mer

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

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer. Översikt Klasshierarkier UML klassdiagram Relation mellan klasser mellan klasser och objekt Association ning ing andling Programmering tillämpningar och datastrukturer 2 UML UML Unified Modeling Language

Läs mer

Paneler - VCPXX.2. Programmeringsmanual för VCP-paneler. Revision 2

Paneler - VCPXX.2. Programmeringsmanual för VCP-paneler. Revision 2 Paneler - VCPXX.2 Programmeringsmanual för VCP-paneler Revision 2 Innehållsförteckning Innehållsförteckning... 2 1 Symbolfiler för kommunikation via IndraLogic... 3 2 Uppsättning i IndraWorks... 6 3 Programmering

Läs mer

TDP002 Imperativ programmering. Laborationsmaterial emacs python-mode

TDP002 Imperativ programmering. Laborationsmaterial emacs python-mode TDP002 Imperativ programmering Laborationsmaterial emacs python-mode Höstterminen 2008 Innehållsförteckning Introduktion...3 Redovisning av laborationer...3 Laboration 1 emacs python-mode...4 Uppgift 1

Läs mer

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT 2013 1 / 33

Programmering i C++ EDA623 Objektorienterad programutveckling. EDA623 (Föreläsning 5) HT 2013 1 / 33 Programmering i C++ EDA623 Objektorienterad programutveckling EDA623 (Föreläsning 5) HT 2013 1 / 33 Objektorienterad programutveckling Innehåll Grundläggande begrepp Relationer mellan objekt Grafisk representation

Läs mer

Introduktion. Lagom är bäst. OO eller ej? TDP004 Objektorienterad Programmering Fö 7 Objektorienterad design, tips och råd

Introduktion. Lagom är bäst. OO eller ej? TDP004 Objektorienterad Programmering Fö 7 Objektorienterad design, tips och råd Introduktion TDP004 Objektorienterad Programmering Fö 7 Objektorienterad design, tips och råd Vi har diskuterat vilka möjligheter till OO som erbjuds i C++. Vilka vill vi använda och varför? Allt har användningsområden

Läs mer

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5. Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 5 Laboration 4 Lådplanering Exempel på grafik, ett avancerat program Frågor 1 Laboration 4 - Introduktion Syfte: Öva på självständig problemlösning

Läs mer

Föreläsning 1: Introduktion till kursen

Föreläsning 1: Introduktion till kursen (18 januari 2015 F1.1 ) Föreläsning 1: Introduktion till kursen Lärare: Anna, Carl, Johan, Tom och ca 20 assistenter Registrering / avregistrering Undervisningsformer: föreläsningar och laborationer Kursmaterial

Läs mer

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto Objekt och klasser - Introduktion Objekt Ð Begreppet objekt Ð Hur klasser anvšnds fšr att skapa objekt Ð Fšr-definierade klasser Ð Metoder och parameteršverfšring Ð Definiera klasser Ð Modifierare Ð Statiska

Läs mer

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio

Inledande programmering med C# (1DV402) Ditt första C#-program med Visual Studio Ditt första C#-program med Visual Studio Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får använda detta verk så

Läs mer

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen. TT Kapitel 3. Husdjur & Fisk Javaklasser Translation by Leif Lourié Java program består av klasser som beskriver saker (objekt) som finns på riktigt. Även om det finns många olika sätt att skriva program

Läs mer

Objektorienterad programmering Föreläsning 4

Objektorienterad programmering Föreläsning 4 Objektorienterad programmering Föreläsning 4 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webbacademy.se Agenda Introduktion till objektorientering Klasser och Objekt Instansvariabler Metoder Introduktion

Läs mer

E13 "Behind the Wild"

E13 Behind the Wild E13 "Behind the Wild" Föreläsning 13, HT2014 Det vi missat och lite till Kurs: 1dv403 Webbteknik I Johan Leitet E13 Behind the Wild Dagens agenda Cookies Web storage Context/ändra context Augmentation

Läs mer

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner

Läs mer

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert 20130205 AWT. Paket för hantering av grafik

Fortsättningskurs i programmering F 5. GUI händelsehantering - undantagshantering Hugo Quisbert 20130205 AWT. Paket för hantering av grafik Fortsättningskurs i programmering F 5 GUI händelsehantering - undantagshantering Hugo Quisbert 20130205 1 Abstract Window Toolkit Paket för hantering av grafik dvs skapa grafisk användargränssnitt java.awt

Läs mer

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402

Övningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Övningsuppgift Bankkonton Steg 2 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering

Läs mer

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

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel Programmeringsteknik för Bio1 och I1 Övning 2 Kort repetition Övningsgrupp 3 (Sal E33) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1310/

Läs mer

Visual Basic, en snabbgenomgång

Visual Basic, en snabbgenomgång Visual Basic, en snabbgenomgång Variabler och Datatyper En variabel är som en behållare. Olika behållare passar bra till olika saker. I Visual Basic(härefter VB) finns olika typer av behållare för olika

Läs mer

Lösningsförslag övning 2.

Lösningsförslag övning 2. Objektorienterad programmering, Z1 Lösningsförslag övning 2. Uppgift 1. public class SIUnits { public static double yardspermeter = 1.093613; public static double poundperkilo = 2.204623; public static

Läs mer

Zimplit CMS Manual. Introduktion. Generell Information

Zimplit CMS Manual. Introduktion. Generell Information Zimplit CMS Manual Introduktion Detta dokument ger en överblick av Zimplit CMS (Content Management System) användargränssnitt och dess funktioner. (För mer information och hjälp-forum, se zimplit.org.)

Läs mer

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng

TENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,

Läs mer

Trädstrukturer och grafer

Trädstrukturer och grafer Översikt Trädstrukturer och grafer Trädstrukturer Grundbegrepp Binära träd Sökning i träd Grafer Sökning i grafer Programmering tillämpningar och datastrukturer Varför olika datastrukturer? Olika datastrukturer

Läs mer

Laboration 4: Digitala bilder

Laboration 4: Digitala bilder Objektorienterad programmering, Z : Digitala bilder Syfte I denna laboration skall vi återigen behandla transformering av data, denna gång avseende digitala bilder. Syftet med laborationen är att få förståelse

Läs mer

Introduktion till programmering, hösten 2011

Introduktion till programmering, hösten 2011 Föreläsning 1 Programmering är ett hantverk. Det betyder att man inte kan läsa sig till den förmågan, man måste träna och man tränar genom att skriva mer och mer avancerade program. Programmering förutsätter

Läs mer

PROGRAMMERING A VB 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL BASIC

PROGRAMMERING A VB 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL BASIC lektion 1 PROGRAMMERING A VB 2008 EXPRESS UTVECKLINGSVERKTYGET VISUAL BASIC VB är ett applikationsutvecklingsverktyg med programmeringsspråket är basic, gränssnittet är grafiskt och man arbetar hela tiden

Läs mer

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT 2013 1 / 26

Programmering i C++ EDA623 Mer om klasser. EDA623 (Föreläsning 6) HT 2013 1 / 26 Programmering i C++ EDA623 Mer om klasser EDA623 (Föreläsning 6) HT 2013 1 / 26 Mer om klasser Innehåll Konstanta objekt Statiska medlemmar Pekaren this Vänner (friends) Överlagring av operatorer EDA623

Läs mer

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass).

Arv innebär att man skapar en ny klass (subklass) utifrån en redan existerande klass (superklass, basklass). 3 Arv och gränssnitt 3.1 Vad innebär arv? Ett objektorienterat språk bygger på att programmeraren ges möjligheten att modellera verkligheten med hjälp av objekt. Objekt låter sig definieras i form av klasser.

Läs mer

DOM (Document Object Model) är modellen efter vilken en webbläsaren är uppbyggd. Alla objekt/element i webbläsaren finns hierarkiskt ordnade i DOM.

DOM (Document Object Model) är modellen efter vilken en webbläsaren är uppbyggd. Alla objekt/element i webbläsaren finns hierarkiskt ordnade i DOM. JavaScript del1 Syftet med detta häfte är att sammanfatta det viktigaste i JavaScript så kort och koncist som möjligt men ändå tillräckligt omfattande för att ge god kännedom om en av de vanligaste teknikerna

Läs mer

Modern Programmering (2546) Tentamen lördag 30.09.2000

Modern Programmering (2546) Tentamen lördag 30.09.2000 Modern Programmering (2546) Tentamen lördag 30.09.2000 Svara på minst sex frågor. Om du svarar på alla sju frågorna faller den fråga bort som ger minst antal poäng. Maximalt 70 poäng. Det krävs 35 poäng

Läs mer

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna

Swing. MER Java Foundation Classes (JFC) Hur lära sig? Vad är farorna. LayoutManagers. Exempel på några av komponenterna MER Java Foundation Classes (JFC) Swing Swing Många klasser Vettigt att lära sig dem utantill - Tror inte det -... men det kan vara bra att ha en liten överblick över vad som finns - Idag (och med fortsättning

Läs mer

Objektorienterad programmering Föreläsning 6. Mer om klasser och typer Namnrymder Inkapsling Synlighet Statiska variabler Statiska metoder

Objektorienterad programmering Föreläsning 6. Mer om klasser och typer Namnrymder Inkapsling Synlighet Statiska variabler Statiska metoder Objektorienterad programmering Föreläsning 6 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webbacademy.se Agenda Mer om klasser och typer Namnrymder Inkapsling Synlighet Statiska variabler Statiska

Läs mer

FactoryCast HMI. Premium & Quantum PLC. Applets 2004-10-28

FactoryCast HMI. Premium & Quantum PLC. Applets 2004-10-28 FactoryCast HMI Premium & Quantum PLC Applets 2004-10-28 INNEHÅLLSFÖRTECKNING 1 OM DETTA DOKUMENT...3 2 FÖRUTSÄTTNINGAR...3 3 PROJEKT I J++...4 3.1 LÄSA PLC-VARIABLER...4 3.1.1 Gränssnittet...4 3.1.2 Upprätta

Läs mer

LabelLogic. Bruksanvisning. www.planglow.com info@planglow.com. Innehåll. Label Choices. Data Library. Print Centre. Design Centre

LabelLogic. Bruksanvisning. www.planglow.com info@planglow.com. Innehåll. Label Choices. Data Library. Print Centre. Design Centre www.planglow.com info@planglow.com Innehåll Label Choices Så här lägger du till en etikett Data Library Så här lägger du till smörgåsinformation Print Centre Så här skriver du ut etiketter Design Centre

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration

Läs mer

Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på:

Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på: Bilaga C Eclipse 1 Inledning Här beskrivs Eclipse, den programutvecklingsmiljö som utnyttjas i programmeringskurserna. Mera information finns på: www.eclipse.org help.eclipse.org www.eclipse.org/downloads/

Läs mer

PROGRAMMERING. Ämnets syfte. Kurser i ämnet

PROGRAMMERING. Ämnets syfte. Kurser i ämnet PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration

Läs mer

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition):

Översikt. Varför lära sig detta? Motivering Syntax och semantik Imperativa språkets byggstenar och Python. PL-boken Kap 1 (repetition): Översikt Motivering Syntax och semantik Imperativa språkets byggstenar och Python Datatyper Tilldelning och uttryck Kontrollstrukturer (på satsnivå) Subprogram Relaterade avsnitt: PL 3.1-3.2, 5.1-5.3,

Läs mer

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna. 1 Uppgift 1 Klassen Company Banken FinanceTrust som tidigare bara haft privatpersoner som kunder vill nu bygga ut sitt datasystem så att även företag kan registreras som kunder. Skriv klassen Company som

Läs mer

Migrera till PowerPoint 2010

Migrera till PowerPoint 2010 I den här guiden Microsoft Microsoft PowerPoint 2010 skiljer sig rent utseendemässigt mycket, så vi har skapat den här guiden för att hjälpa dig att snabbare lära dig programmet. Här kan du läsa om de

Läs mer

Att arbeta med. Müfit Kiper

Att arbeta med. Müfit Kiper Att arbeta med Müfit Kiper Att skriva nya inlägg Alla inlägg som är postade visas i kronologisk ordning, det vill säga det senast postade inlägget kommer visas först om inget annat angetts i temafilerna.

Läs mer

ASP.NET MVC. Copyright Mahmud Al Hakim mahmud@dynamicos.se http://www.webbacademy.se. Innehåll

ASP.NET MVC. Copyright Mahmud Al Hakim mahmud@dynamicos.se http://www.webbacademy.se. Innehåll ASP.NET MVC Copyright Mahmud Al Hakim mahmud@dynamicos.se http://www.webbacademy.se Innehåll Introduktion till MVC Controller Action-metoder Views Arbeta med Layout-sidor och sektioner Route konfiguration

Läs mer

Insamlingsverktyg - teknisk beskrivning av metadataformuläret

Insamlingsverktyg - teknisk beskrivning av metadataformuläret Digitala leveranser Insamlingsverktyg - teknisk beskrivning av metadataformuläret Innehåll: Allmänt Layout och uppbyggnad Hur man använder programmet Starta Fylla i metadata Skapa metadatafiler och leverera

Läs mer

Lite logik. Kap 6: Sid 2

Lite logik. Kap 6: Sid 2 6 Loopar och val Lite logik Val mellan två alternativ Val mellan flera alternativ Sammansatta villkor Boolska variabler Jämför strängar While-loopar Do-loopar For-loopar Kortformer Kap 6: Sid 2 Lite logik

Läs mer

Objektorientering/1.2. 3 Klasser

Objektorientering/1.2. 3 Klasser 3 Klasser 3.1 Att hantera många objekt 3.2 Klasser 3.3 Krav för att bilda en klass 3.4 Får två objekt vara helt identiska? 3.5 Måste vi använda klasser i objektorientering? 3.6 En klassbeskrivning 3.7

Läs mer

2014-2015 Alla rättigheter till materialet reserverade Easec

2014-2015 Alla rättigheter till materialet reserverade Easec 1 2 Innehåll Introduktion... 3 Azure Client SDK Libraries... 4 Översikt: Azure Client Libraries... 5 Azure SDK... 6 Azure SDK (forts.)... 7 Azure SDK (forts.)... 8 Cloud Services... 10 Cloud Services...

Läs mer

SMULTRON. Fredrik Li, Ester, Anders, Jessica, Philip. Malmö Högskola Konst Kultur Kommunikation OOP5 - Mobile Applications IDK 05 - April/Maj 2007

SMULTRON. Fredrik Li, Ester, Anders, Jessica, Philip. Malmö Högskola Konst Kultur Kommunikation OOP5 - Mobile Applications IDK 05 - April/Maj 2007 SMULTRON av Fredrik Li, Ester, Anders, Jessica, Philip Malmö Högskola Konst Kultur Kommunikation OOP5 - Mobile Applications IDK 05 - April/Maj 2007 - När man har turen att hitta en plats där man trivs

Läs mer

Steg 1 Minnen, mappar, filer Windows 7

Steg 1 Minnen, mappar, filer Windows 7 Steg 1 Minnen, mappar, filer Windows 7 Maj -13 Liljedalsdata.se Liljedalsdata Steg 1 Sida 1 Inledning Välkommen till denna kurs. Att jobba med datorer är ofta som att jobba med matematik. Det nya bygger

Läs mer

Laboration: Grunderna i MATLAB

Laboration: Grunderna i MATLAB Laboration: Grunderna i MATLAB 25 augusti 2005 Grunderna i MATLAB Vad är MATLAB? MATLAB är ett interaktivt program för vetenskapliga beräkningar. Som användare ger du enkla kommandon och MATLAB levererar

Läs mer

Inställningstips. Visuella anpassningar Windows 10 2015-08-06

Inställningstips. Visuella anpassningar Windows 10 2015-08-06 Inställningstips Visuella anpassningar Windows 10 2015-08-06 Innehåll Inledning... 3 Anpassa bildskärmen... 4 Ändra storlek för text, appar och andra objekt... 4 Ändra muspekare och markör... 6 Egenskaper

Läs mer

Användarhantering Windows 7 I denna laboration kommer vi att skapa nya användare och grupper och titta på hur man hantera dessa.

Användarhantering Windows 7 I denna laboration kommer vi att skapa nya användare och grupper och titta på hur man hantera dessa. Användarhantering Windows 7 I denna laboration kommer vi att skapa nya användare och grupper och titta på hur man hantera dessa. Antal: Enskilt Material: En dator med Windows 7 (Vista, Windows 8 eller

Läs mer

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

Objekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar Klassbegreppet och C++ OOP UML Klasser och objekt i C++ Uppdelning i filer Attribut och metoder Inkappsling - åtkomst Klassattribut - objektattribut Objekt-orienterad programmering Att använda ett objektorienterat

Läs mer

KURSMÅL WINDOWS STARTA KURSEN

KURSMÅL WINDOWS STARTA KURSEN KURSMÅL WINDOWS Detta är en introduktionskurs för dig som är nybörjare. Du kommer att få bekanta dig med datorns viktigaste delar och lära dig grunderna i operativsystemet Windows, vilket är en förutsättning

Läs mer

Användar- och systemdokumentation

Användar- och systemdokumentation Användar- och systemdokumentation Linköpings universitet Examinator:, IDA marme647@student.liu.se Utskriftsdatum: Innehållsförteckning Inledning... 3 Användarhandledning... 4 Systemkrav och installation...4

Läs mer

En grundkurs i hemsidor och hur de är uppbyggda

En grundkurs i hemsidor och hur de är uppbyggda En grundkurs i hemsidor och hur de är uppbyggda Den här artikeln tänkte väldigt grundligt gå igenom koncepten kring en hemsida och hur den är uppbyggt, för att ge dig grundkunskap att bygga vidare på och

Läs mer