TDB/IT, Uppsala universitet 1

Storlek: px
Starta visningen från sidan:

Download "TDB/IT, Uppsala universitet 1"

Transkript

1 Dagens föreläsningar Scriptprogrammering Sommaren 2007 Föreläsning 5 och 6 Grafik och grafiska användargränssnitt. Databashantering, MySQL. Test Driven Development med PyUnit. Iteratorer. Orientering andra dynamiska språk. Liten presentation av Ruby. IT Uppsala #2 Grafiska användargränssnitt Varför använda grafik (GUI)? Varför finns grafiska användargränssnitt? Hur är de uppbyggda? Skapa grafik i Python. Ett antal exempel. Händelsehantering. Tips inför projekten. Ö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. Siste men abslout inte minst: Psykologisk #4 Hur är ett GUI uppbyggt? Grafikbiblioteket Tkinter Färgyta Fönster Ram De facto standard, följer med alla standardinstallationer (sanning med modifikation). Står för Tk interface och kan ses som ett kopplingsbibliotek mellan Tk GUI toolkit och Python. Lätt att skriva men hopplöst att säga! Ett av flera sätt att skapa grafik i Python. "Välj färg"-etikett Textinmatningsruta #6 TDB/IT, Uppsala universitet 1

2 Vad är en widget? Widget betyder ordagrant "manick, liten grej". En widget är en komponent som tillsammans med andra widgets utgör ett grafiskt användargränssnitt. Vissa widgets är enkla medan andra är avancerade med mängder av metoder och attribut. Svenska motsvarigheterna har en klang av "luddighet" varför widget kommer användas. Ett första kodexempel # first_example.py my_widget = Label(root, text="hello world") #8 Genomgång av programmet # first_example.py my_widget = Label(root, text="hello world") my_widget.pack() Programmet följer en arbetsordning för att skapa widgets: 1. Skapa en huvudbehållare, i detta fall ett Tk-objekt. 2. Skapa en widget av den typ man vill ha, här ett Label-objekt. 3. Ange egenskaper för widgeten, tex. färg och form. 4. Anropa pack-metoden för att lägga till widgeten i gränssnittet. 5. Repetera steg 2-4 för alla widgets som ska finnas med. 6. Anropa mainloop-metoden för huvudbehållaren för att visa den och alla underliggande widgets. Plattformsoberoe grafik Python finns för en mängd plattformar, exempelvis Unix, Linux, Windows och Mac OS X. Utseet måste följa plattformarnas standarder utan att kräva ändringar i koden. Kräver en abstrakt beskrivning av ingåe widgets, snarare än exakta grafikdetaljer. Fördel: Portabel kod även för grafik. Nackdel: Svårt att skapa exakta #10 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. 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 betee vid förändringar i huvudbehållaren anges med expand och #12 TDB/IT, Uppsala universitet 2

3 Exempel på placeringar (PiP 12.2) Flera widgets # graphics02.py Button(text="En knapp").pack() mainloop() # graphics03.py Button(text="En knapp").pack(anchor=ne) mainloop() # graphics07.py 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() # graphics04.py Button(text="En knapp").pack(expand=yes, fill=both) #14 Packordningen är viktig Vanliga widgets # graphics08.py 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() 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 #16 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) Label, textetikett Används för att visa text och grafik. Främst för information, inte för #18 TDB/IT, Uppsala universitet 3

4 Klasser och arv i Tkinter Varje widgettyp i Tkinter är en klass. Varje widget i ett GUI är ett objekt. Ett GUI har en naturlig hierarkisk struktur. Huvudprogrammet kan skapas som subklasser till Tkinter-klasser, exempelvis Tk eller Toplevel. Grafikkomponenter skapas med fördel som subklasser till Tkinter, exempelvis Frame. En förbättrad textruta # entry01.py class ExtedEntry(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) currtext = StringVar() # Kontrollvariabel för texten currtext.set('klicka här för att ändra texten.') ExtedEntry(root, textvariable=currtext, #20 En återanvändbar komponent # ControlPanel.py 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)..fortsättning av koden if name == ' main ': # Testa ControlPanel-klassen cp = ControlPanel(root) # Packa hela ramen cp.pack(fill=x) # Starta väntfas För en applikation som använder denna komponent, se Programmering i Python #22 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. Rullbara listor # listbox01.py 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.app('val ' + str(i)) # Lägg till val Label(text='Dubbelklicka på ditt val.').pack() #24 TDB/IT, Uppsala universitet 4

5 Standardisera widgets Det kan vara smidigt att ändra standardutseet på widgets. # options.txt *background: LightGreen *Button.background: Red # standardvalues.py 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) 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 #26 Menyer (PiP 14.1) #menu01.py def notimplemented(): print 'Menyvalet är inte implementerat ännu.' def printmenuopened(): print "Du öppnade en meny." # 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) 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 #28 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. 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, beroe på vilken händelse som sker. Observera att händelsestyrda program inte nödvändigtvis måste vara baserade på ett #30 TDB/IT, Uppsala universitet 5

6 En första händelsehanterare # events01.py 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.") 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) 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 #32 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. 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 #34 # events05.py Event-objektet def onmouseclick(event): print 'Du klickade med knapp', event.num button = Button(text="Klicka på mig") button.bind('<any-button>', onmouseclick) button.pack(fill=x) 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. Ä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 #36 TDB/IT, Uppsala universitet 6

7 Exempel på dynamisk grafik # events06.py def togglecolor(): if label.cget("background") == "red": label.config(background="green") else: label.config(background="red") 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) 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 #38 Exempel med kontrollvariabler # events07.py 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) Kryssrutor och kontrollvariabler # checkbutton01.py def printform(): if haslicence.get(): print 'Personen har körkort.' if hasowncar.get(): print 'Personen har egen bil.' import sys sys.exit() 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 = #40 Gruppera radioknappar # radiobutton01.py def onmealclick(): print mealvar.get() def ondrinkclick(): print drinkvar.get() Tidsberoe widgets För att ange att en händelse ska utföras efter en viss tid används metoden after. 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) w.after(time, func, *args) Här kommer funktionen/metoden func att anropas med argumenten *args efter time #42 TDB/IT, Uppsala universitet 7

8 Andra sätt att skapa grafik Några tips inför projekten Python Mega Widgets, PMW, tar vid där Tkinter slutar. Microsoft Foundation Classes, ast tillgängligt för Windows. wxpython, snabbt och på frammarsch. Jython, Pythonimplementation i Java, ger tillgång till Javas grafik. GTK+ (GIMP Toolkit). PyGTK. FOX (Free Objects for X). Plattformsoberoe trots sitt namn. FXPy. Qt. PyQt. Alternativ 1 Skriv låtsas -moduler som returnerar testdata i samma format som den slutgiltiga koden. Låt låtsasmodulerna skriva ut den indata de får från GUI:t innan ni börjar skriva den riktiga implementationen. Låt låtsasmodulerna returnera felaktiga värden för att se hur ert GUI hanterar #44 Alternativ 2 Skriv logikkoden först, utan GUI. Tänk igenom vilka värden er logikmodul behöver och vilka värden som ska returneras. Skicka in dessa parametrar från ett driver - script, som också kan skriva ut resultatet. När logiken fungerar som det ska kan driverscriptet ersättas med ett GUI. Installera programvara Ibland svårt att installera den programvara som krävs. LAMP och WAMP. Nyttig både för databaser och #46 Relationsdatabaser I en relationsdatabas ligger data ordnad som kolumner i tabeller. Varje tabell lagrar en "datastorhet" exempelvis personer, adresser och företag. Kopplingar mellan olika storheter anges som relationer mellan kolumner i tabeller, foreign keys och primary keys. Universitetet ger en kurs om databaser och matematiken bakom dem. Administrera MySQL Starta MySQL-konsollen via WAMP-menyn i Windows eller genom att skriva mysql i Linux. MySQL-konsollen likna Pythonprompten men används för att administrera MySQLdatabaser. Det finns ett stort antal grafiska verktyg som kan användas för att administrera databaser. Ett av de vanligaste är phpmyadmin som också medföljer #48 TDB/IT, Uppsala universitet 8

9 Skapa en databas Skapa poster i databasen mysql> CREATE DATABASE pythondb; Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO books VALUES (1, 'Programmering i Python',' ', 20 06); Query OK, 1 row affected (0.17 sec) mysql> USE pythondb; Database changed mysql> CREATE TABLE books ( -> bookid INTEGER UNSIGNED AUTO_INCREMENT, -> title VARCHAR(45), -> isbn VARCHAR(45), -> year INTEGER UNSIGNED, -> PRIMARY KEY (bookid) -> ); Query OK, 0 rows affected (0.73 sec) mysql> describe books; Field Type Null Key Default Extra bookid int(10) unsigned NO PRI NULL auto_increment title varchar(45) YES NULL isbn varchar(45) YES NULL year int(10) unsigned YES NULL rows in set (0.14 sec) mysql> INSERT INTO books VALUES (2, 'Precious Python',' ', 2004); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO books VALUES (3, 'My Python Guide',' ', 2007); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM books; bookid title isbn year Programmering i Python Precious Python My Python Guide rows in set (0.03 sec) mysql> SELECT title AS book_title, year FROM books WHERE year > 2005; book_title year Programmering i Python My Python Guide rows in set ( #50 Användarrättigheter Lägga till en användare Databaser innehåller ofta mycket och känslig information. Databasen måste därmed skyddas från obehörig användning. MySQL möjliggör avancerad användarhantering där man i detalj kan ange vilka användare som kan utföra vad. Användarhantering utförs enklast i ett grafiskt gränssnitt, exempelvis #52 Använda MySQL från Python Att använda MySQL från Python handlar i stort sett om att skicka SQL-kommandon till servern. För avancerad databasanvändning ökar komplexiteten i SQL-frågorna, inte i Pythonkoden. För mer information om SQL hänvisas till Programmering i Python kapitel 17 eller någon av de otaliga SQL-tutorials som finns på #54 TDB/IT, Uppsala universitet 9

10 MySQL-exempel # mysql_01.py import MySQLdb database = MySQLdb.connect( db="pythondb", user = "erikl", passwd = "abc123" ) c = database.cursor() c.execute("select * FROM books") for row in c.fetchall(): print row $> python mysql_01.py (1L, 'Programmering i Python', ' ', L) (2L, 'Precious Python', ' ', 2004L) (3L, 'My Python Guide', ' ', 2007L) Svaret hanteras som en samling tupletter. 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 #56 Unit Testing Unit testing innebär att man isolerar olika beteen 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å oberoe som möjligt. Genom att ha oberoe test minskar man den kod som behöver felsökas då ett fel uppstår. Unit test används inom många andra områden. 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. Tester implementeras parallellt med att ny funktionalitet läggs till. Därmed kommer den färdiga applikaitonen ha en testsvit som kontrollerar att varje liten del fungerar som den ska. Även andra former av testning används men här fokuserar vi på unit #58 TDD:s fem steg 1. Lägg till ett test. 2. Kontrollera att testet fallerar. 3. Gör en minimal implementation för att klara testet. 4. Kontrollera att hela testsviten klaras. 5. Refaktorisera koden. 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 #60 TDB/IT, Uppsala universitet 10

11 Existerande kod Steg 1: Lägg till ett test # taxi.py class Taxi: def init (self, fare, distance): self.fare = fare self.distance = distance $> python taxi_test.py Ran 1 test in 0.000s Vi vill nu lägga till en metod som returnerar total kostnad för aktuell resa. # 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() 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. # 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 ": #62 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) # 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() 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. # 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 #64 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. Korta kommentarer Varning för kopplade test. Undvik för omfattande test. Kan tyda på "gudsobjekt". Vad är minimal implementation? 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 #66 TDB/IT, Uppsala universitet 11

12 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örsök undvika konstruktioner som: for i in range(len(a)) 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 konsument av en iterator säger "Jag vill utföra något för alla objekt i den här samlingen". for-loopar vs. iteratorer Försök undvika konstruktioner som: for i in range(len(a)) Låt varje objekt vara ansvarigt för sitt innehåll och itereringen över det. En iterator säger "Jag kan gå igenom hela min datamängd ett objekt i taget". En konsument av en iterator säger "Jag vill utföra något för alla objekt i den här #68 Exempel med beräkningsdomän Anta att Mesh är en klass skriven av tredje part som definierar en 2-dimensionell beräkningsdomän beståe 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() # 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) 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 #70 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 coords in currentmesh.innerpoints(): currentmesh.calcchange(coords) for coords in currentmesh.boundary(): currentmesh.calcboundarychange(coords) # iterator_01.py En enkel iterator class ColorIterator: colors = ["Red", "Green", "Blue", "Yellow", "Black", "Brown"] def iter (self): self.current_color = -1 return self def next(self): self.current_color += 1 if self.current_color == len(self. class.colors): raise StopIteration return self. class.colors[self.current_color] Här förutsätts ingenting om Mesh:s interna datastruktur. Därmed kan uppdateringarna göras utan att existerande kod behöver ändras. Kanske är for-loopen helt onödig: currentmesh = Mesh() currentmesh.calcchange() if name == " main ": ci = ColorIterator() for color in ci: print color $> python iterator_01.py Red Green Blue Yellow Black #72 TDB/IT, Uppsala universitet 12

13 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. # iterator_02.py def colors(available = ["Red", "Green", "Blue", "Yellow", "Black", "Brown"]): for color in available: yield color if name == " main ": for color in colors(): print color $> python iterator_02.py Red Green Blue Yellow Black Brown Fibonacciserie med iterator Fibonacciserien är en talserie som inleds med 0 och 1. Därefter är varje tal summan av föregåe 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. # 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 #74 Skapa lista från en operator Om vi vill spara de genererade elementen i en iterator kan vi använda funktioner från modulen itertools. # 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] Parallella iteratorer För att iterera över två samlingar parallellt används funktionen izip, också från itertools. Modulen itertools innehåller flera funktioner för iteratorer, se dokumentationen för detaljer. # iterator_05.py import itertools 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 a #76 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 onsdagen 27: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). Pos. juni Pos. juni Marknadsandelar Språk % Java 20 C 16 C++ 11 (Visual) Basic 9,3 PHP 8,8 Perl 6,2 C# 3,5 Python 3,2 JavaScript 2,6 Ruby 2,1 PL/SQL 2,0 SAS 1,8 Delphi 1,6 D 1,3 Lisp/Scheme 0,7 ABAP 0,6 Ada 0,6 FoxPro/xBase 0,6 COBOL 0,6 Ändring -1,1-2,3 +0,5-0,9-0,7 +0,2 +0,3-0,3 +1,2 +1, Fortran #78 TDB/IT, Uppsala universitet 13

14 Kort-kort presentation av andra språk PHP. ECMAScript och dess varianter. Groovy. Lisp. Smalltalk. PHP Utvecklades ursprungligen för att generera dynamiska webbplatser. Används nästan uteslutande på webben även om friståe 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 #80 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). 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 #82 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 source-varianten Common Lisp. 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 #84 TDB/IT, Uppsala universitet 14

15 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. Varningens ord Att ge en introduktion till ett komplext språk på mycket kort tid är vanskligt. Rubys fördelar är ofta subtila men i praktiken enormt viktiga. Kontentan är att Ruby ger kod som är lätt att utveckla och #86 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. 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. returnerar nästan alla uttryck värden som kan användas för nya anrop. används iteratorer mer konsekvent. används block för att skapa flexibel och lättanvänd #88 Ö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" e = ExampleClass.new() e.talk class ExampleClass def talk_more() print "Hej igen\n" e.talk e.talk_more Individuellt betee 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" e = ExampleClass.new() e.talk def e.talk_more() print "Hej igen\n" e.talk e.talk_more e2 = ExampleClass.new() e2.talk_more # => Method #90 TDB/IT, Uppsala universitet 15

16 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. 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 #92 Exempel på callbacks Överlagring av hela språket Klassen Cookbook är en samling med egna data. Genom att implementera method_missing kan alla beteen 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 = [] def Mekanismerna som möjliggör att utöka och ändra klasser gäller såväl egna som inbyggda klasser. Detta gör att alla standardklasser i Ruby kan ändras fritt. Eftersom ändringarna kan utföras medan ett program kör kan även klienters tolkar #94 Uniform Access Model Betrakta en klass Account som ska hålla reda på ett bankkontos saldo och vilka transaktioner som gjorts på kontot. Vid designen av klassen bestäms att klassen ska ha en instansvariabel transactions för att lagra data om transaktionerna. Datatypen blir en lista med siffror som anger hur saldot förändras. Nuvarande saldot räknas ut genom att räkna samman transaktionerna i metoden balance. Användning av Account Följande kod implementerar och använder klassen i Python: class Account: def init (self): self.transactions = [1000, -180, 50] def balance(self): balance = 0 for t in self.transactions: balance += t return balance account = Account() print #96 TDB/IT, Uppsala universitet 16

17 Förändring En bättre designmodell Anta nu att vi tycker att det blir för kostsamt att räkna ut saldot vid varje anrop till balance. Vi lägger till en instansvariabel för saldot och kallar den balance. class Account: def init (self): self.transactions = [1000, -180, 50] self.balance = 870 account = Account() print account.balance Vi måste nu ändra alla anrop till metoden balance till referenser till instansvariabeln balance. Bytet till en instansvariabel kan resultera i stora mängder ändringar. Många IDE har refaktoriseringsfunktioner. Detta löser dock inte problemet med extern kod som behöver ändras. Språk som implementerar Uniform Access Modell, exempelvis Ruby, har inte detta problem. I Ruby ser användningen av balance likadan ut i båda fallen. Om det är en instansvariabel eller en metod spelar ingen #98 Åter till getters och setters Naturligtvis kan vi undvika framtida förändringar genom att alltid använda metoder för att manipulera instansvariabler. Semantiskt sämre. Tappar enkelheten i syntaxen. Med uniform access får vi möjligheten att använda virtuella instansvariabler, metoder som agerar som instansvariabler men som inte svarar mot någon faktisk instansvariabel. På ett högre plan frikopplar uniform access intern och extern datastruktur. Risker Dynamiken i Ruby är mycket kraftfull och möjliggör helt andra designmönster än ett statiskt språk. Det innebär dock även risker, exempelvis att göra förändringar i standardklasserna. Kan även ge problem med olika versioner av #100 Utvecklingsmetodik Dynamiska språk passar bra för flera moderna utvecklingsmetoder. Agile/XP TDD - Test Driven Development DRY - Don t Repeat Yourself Ruby on Rails Vore tjänstefel att inte nämna Ruby on Rails. Rails är ett ramverk för snabb utveckling av webbapplikationer. Rails utnyttjar Rubys dynamik för att åstadkomma saker som vore omöjliga i andra språk. Jag rekommerar alla som är intresserade av webbprogrammering att titta på Rails. Om fem år kommer det att vara ett krav på en CV! Om man inte är intresserad av webbprogrammering är en studie av Rails ändå att rekommera. Ramverket innehåller många exempel på hur dynamisk programmering kan användas i #102 TDB/IT, Uppsala universitet 17

Grafiska användargränssnitt

Grafiska användargränssnitt Dagens föreläsningar Grafik och grafiska användargränssnitt. Databashantering, MySQL. Test Driven Development med PyUnit. Iteratorer. Orientering andra dynamiska språk. Liten presentation av Ruby. Grafiska

Läs mer

Dagens föreläsningar

Dagens föreläsningar 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 Iteratorer Iteratorer En av de vanligaste

Läs mer

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

Idag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15. Skolan för Datavetenskap och kommunikation Idag: DD1311 Programmeringsteknik med PBL Granskning Felhantering GUI Föreläsning 15 På torsdag: Mer om GUI På grupptimmen: genomgång av granskningsprotokollet

Läs mer

Skolan för Datavetenskap och kommunikation. Programmeringsteknik. Föreläsning 16

Skolan för Datavetenskap och kommunikation. Programmeringsteknik. Föreläsning 16 Skolan för Datavetenskap och kommunikation Programmeringsteknik Föreläsning 16 Grafiskt användargränssnitt (GUI) Använd modulen tkinter, som har klasser för komponenter. Se "Referenser" på kursens webbsida:

Läs mer

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

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 15 Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 15 Grafiska gränssnitt - GUI Tkinter Tillstånd Komponenter Layout Händelser LÄNKAR & EXEMPEL...finns på kurswebsidan under "GUI

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

Mer till P-uppgiften: Dokumentation. Nyheter. Algoritm för sökning. Mer hjälp. DD1311 Programmeringsteknik med PBL

Mer till P-uppgiften: Dokumentation. Nyheter. Algoritm för sökning. Mer hjälp. DD1311 Programmeringsteknik med PBL Skolan för Datavetenskap och kommunikation Mer till P-uppgiften: DD1311 Programmeringsteknik med PBL Föreläsning 15 & 16 Hjälpsidor Sökning Rekursion Felhantering Grafiska gränssnitt Nästa tisdag: Mer

Läs mer

Grafiska användargränssnitt i Java

Grafiska användargränssnitt i Java TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Grafiska användargränssnitt i Java En genomgång av de viktigaste begreppen Alternativ 2 Från början fanns AWT, Abstract Window Toolkit Stora delar har

Läs mer

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

Objektorienterad programmering Föreläsning 15. Grafiska användargränssnitt (GUI Graphical User Interface) Objektorienterad programmering Föreläsning 15 Copyright Mahmud Al Hakim mahmud@dynamicos.se www.webacademy.se Agenda Grafiska användargränssnitt (GUI Graphical User Interface) Standardklassen (Control)

Läs mer

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?

Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket? Jonas Kvarnström jonkv@ida.liu.se 2013 Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket? Rena OO-språk (allt är objekt) Scala, Smalltalk, Eiffel, Ruby,

Läs mer

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

Laboration: Whitebox- och blackboxtesting

Laboration: Whitebox- och blackboxtesting Tilda11 höstterminen 2011 Laboration: Whitebox- och blackboxtesting Mål med laborationen Du ska lära dig begreppen white-box testing och black-box testing Du ska öva dig på att konstruera testfall Du ska

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

Grafiska användargränssnitt i Java

Grafiska användargränssnitt i Java jonas.kvarnstrom@liu.se 2017 Grafiska användargränssnitt i Java En genomgång av de viktigaste begreppen Alternativ 2 Från början fanns AWT, Abstract Window Toolkit Till stor del ersatt av Swing: Mer omfattande,

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

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

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta

Läs mer

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,

Läs mer

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

729G04 Programmering och diskret matematik. Föreläsning 7 729G04 Programmering och diskret matematik Föreläsning 7 Föreläsningsöversikt Information Interaktion via text Läsa från fil Skriva till fil Spara och läsa abstrakta datatyper från fil Information Felaktigt

Läs mer

Nya webbservern Dvwebb.mah.se

Nya webbservern Dvwebb.mah.se Nya webbservern Dvwebb.mah.se Bakgrund: BIT (Bibliotek och IT) beslutar att ta ner Novell systemet 28/3 som är en katalogtjänst som styr bland annat alla studenter s.k. hemkataloger på Malmö högskola såväl

Läs mer

Komponenter med COM (och COM+/VC++ 7.0)

Komponenter med COM (och COM+/VC++ 7.0) MÄLARDALENS HÖGSKOLA Komponenter med COM (och COM+/VC++ 7.0) Med Visual C++ 7.0 COM-komponent EI0230 Komponentbaserad applikationsutveckling oktober 2003 Om denna sammanfattning Denna sammanfattning innehåller

Läs mer

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Introduktion till Java -- för Pythonprogrammerare Historia: C, C++ 3 Historia: Oak 1 4 1990: Sun Microsystems påbörjade projekt StarSeven Avancerad

Läs mer

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata

Innehåll MySQL Intro. Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata Innehåll MySQL Intro Allmänt om Lagrade Procedurer Enkel utformning Skapa en lagrad procedur Använda parameter som indata 1 Lagrad procedur / Stored Procedure Lagrad procedur har många namn, förkortningen

Läs mer

Windows Forms Winstrand Development

Windows Forms Winstrand Development 2013-01-23 1 Winstrand Development Användargränssnitt Hittills har vi skapat program för kommandoraden. Den bakomliggande koden fungerar som den ska, men vi upptäcker snabbt att programmen är begränsade

Läs mer

Objektorienterad programmering

Objektorienterad programmering Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad

Läs mer

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass Övningstillfälle 4 Klasser och objekt (s. 221 ff.) Syfte 1: En naturlig fortsättning på koncepten abstraktion och inkapsling! Funktion (återanvändning av skyddad, säker och testad kod) Modul (återanvändning

Läs mer

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 729G75: Programmering och algoritmiskt tänkande Tema 1. Föreläsning 1 Jody Foo Föreläsningsöversikt Kursinfo / Om kursen Algoritmer Objektorienterad programmering i praktiken terminologi använda objekt

Läs mer

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript?

JavaScript. Innehåll. Historia. Document object model DHTML. Varför Javascript? Innehåll JavaScript En introduktion till skriptspråket JavaScript och till DOM Scripting Introduktion till JavaScript och DOM JavaScript Syntax DOM och DOM Scripting Händelsehantering och CSS Historia

Läs mer

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras. Laboration 1, Databashantering med MySQL Av: Marcus Rejås I denna laboration skall du se till att du kommer åt databasmotorn och att det fungerar. Du kommer också att skapa en tabell

Läs mer

FactoryCast HMI. Premium & Quantum PLC. MySQL Server och FactoryCast HMI databastjänst 2004-10-29

FactoryCast HMI. Premium & Quantum PLC. MySQL Server och FactoryCast HMI databastjänst 2004-10-29 FactoryCast HMI Premium & Quantum PLC MySQL Server och FactoryCast HMI databastjänst 2004-10-29 INNEHÅLLSFÖRTECKNING 1 DATABASTJÄNSTEN...3 1.1 KONFIGURERING AV DATABASTJÄNST...3 2 KONFIGURERING MYSQL...6

Läs mer

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Java: Utvecklingsverktyg, datatyper, kontrollstrukturer Sven-Olof Nyström Uppsala Universitet 13 juni 2005 1 Utvecklingsverktyg för Java Vi rekommenderar Suns utvecklingsverktyg (SDK, tidigare JDK), se

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

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

Objektorienterad programmering. Grundläggande begrepp

Objektorienterad programmering. Grundläggande begrepp Objektorienterad programmering Grundläggande begrepp Hur beskriver vi objekt? Vill ha en representationsoberoende beskrivning Abstrakta datatyper! Data Operationer Objekt Representerar en verklig eller

Läs mer

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08

Programmering A C# VT 2010. Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Programmering A C# VT 2010 Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson 2010 02 08 Innehåll Hjälp och referenser... 3 Kap 1 Introduktion... 3 Steg för steg... 3 Kapitel 2 Variabler...

Läs mer

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010 Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010 interface, motivation och bakgrund Antag att vi gör en generell listklass: public class List { protected static class ListNode { public

Läs mer

Innehåll. MySQL Grundkurs

Innehåll. MySQL Grundkurs MySQL Grundkurs Copyright 2014 Mahmud Al Hakim mahmud@dynamicos.se www.webbacademy.se Innehåll Introduktion till databaser Installera MySQL lokalt Webbserverprogrampaket (XAMPP) Introduktion till phpmyadmin

Läs mer

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare

TDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Introduktion till Java -- för Pythonprogrammerare Historia: C, C++ 3 Historia: Oak 1 4 1990: Sun Microsystems påbörjade projekt StarSeven Avancerad

Läs mer

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA för SY2 1999-03-17, kl 14.00-18.00 Hjälpmedel: En lärobok i Java programmering Återlämningstillfälle:

Läs mer

1.Lär känna MS SQL Observera. Tips. Förberedelse

1.Lär känna MS SQL Observera. Tips. Förberedelse 1.Lär känna MS SQL 2008 Observera Övningar som finns tillgängliga är till för att du ska kunna testa dina kunskaper och träna på dem. Det är helt upp till dig när du vill genomföra och om du vill genomföra

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

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

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

Objektorienterad programmering, allmänt

Objektorienterad programmering, allmänt Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 juni 2005 1 Vilka egenskaper vill vi att program ska ha? Förslag (en partiell lista): De ska... gå snabbt att skriva vara

Läs mer

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

Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha? Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 mars 2005 1. Korrekthet 2. Robusthet 3. Utökbarhet 4. Återanvändbarhet 5. Kompatibilitet

Läs mer

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

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering! Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering! Gränssnitt igen För att kunna ändra på olika delar av programmet utan att andra delar

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016

Objektorienterad Programkonstruktion. Föreläsning 3 7 nov 2016 Objektorienterad Programkonstruktion Föreläsning 3 7 nov 2016 Klass/instans Med hjälp av nyckelordet static kan vi bestämma att en metod eller ett fält ska tillhöra själva klassen i stället för en specifik

Läs mer

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik)

Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik) Databasföreläsning Databasens består av: Tabell Kolumner fält Rader poster (varje post är unik) Tabeller Personer Databas Nummer Namn Födelseår 1 Tina 1950 2 Siv 1965 3 Olle 1980 Platt databas: all information

Läs mer

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Kopiering av objekt i Java

Kopiering av objekt i Java 1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom

Läs mer

Grafiska användargränssnitt i Java

Grafiska användargränssnitt i Java TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Grafiska användargränssnitt i Java En genomgång av de viktigaste begreppen Alternativ 2 Från början fanns AWT, Abstract Window Toolkit Stora delar har

Läs mer

(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

(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 (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

Läs mer

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14

Labb LABB 1. Databassagan och en rundtur i databasers märkliga värld. Plushögskolan Frågeutveckling inom MSSQL - SU14 Labb LABB 1 Databassagan och en rundtur i databasers märkliga värld Plushögskolan Frågeutveckling inom MSSQL - SU14 I Microsoft SQL-Server Management Studio kan man arbeta på olika sätt. Antingen via användargränssnittet

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

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

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Prova på-laboration i Ruby

Prova på-laboration i Ruby Prova på-laboration i Ruby Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet 2008-08-06 1. Introduktion till objektorienterade språk Programmeringsspråket Ruby började

Läs mer

Classes och Interfaces, Objects och References, Initialization

Classes och Interfaces, Objects och References, Initialization Classes och Interfaces, Objects och References, Initialization Objekt-orienterad programmering och design (DIT953) Niklas Broberg/Johannes Åman Pohjola, 2018 Abstract class En abstract class är en class

Läs mer

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1. Schenker har interna system som handhar information som är av intresse för våra kunder/partners. Idag finns ett flertal av dem tillgängliga via Internet, sk Online-tjänster. Dessa erbjuder inte bara hämtning

Läs mer

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... } En klassdefinition class A extends B {... Arv definierar en klass A som ärver av B. Klassen A ärver alla fält och metoder som är definierade för B. A är en subklass till B. B är en superklass till A. class

Läs mer

Skapa din egen MediaWiki

Skapa din egen MediaWiki Skapa din egen MediaWiki Inledning och syfte I detta moment skall du installera en egen wiki (Mediawiki), som du skall konfigurera. Du har möjligheten att använda en egen wiki på din dator eller webbhotell

Läs mer

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

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga

Läs mer

Imperativ programmering. Föreläsning 4

Imperativ programmering. Föreläsning 4 Imperativ programmering 1DL126 3p Föreläsning 4 Imperativa paradigmer Ostrukturerad programmering Strukturerad programmering Procedurell programmering Objektorienterad programmering Klassbaserad programmering

Läs mer

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets

Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets GUI (forts) Objektorienterad programmering med Java Swing: Händelser, lyssnare och applets Sven-Olof Nyström Uppsala Universitet 18 mars 2005 Skansholm: Kapitel 6 Användaren kan kommunicera med programmet

Läs mer

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen ID1004 Objektorienterad programmering October 29, 2013 Tentamen för ID1004 Objektorienterad programmering (vilande kurs), 29 oktober 2013, 9-13 Denna tentamen examinerar 3.5 högskolepoäng av kursen. Inga hjälpmedel är tillåtna. Tentamen består av tre sektioner.

Läs mer

TDP002 - Imperativ programmering

TDP002 - Imperativ programmering TDP002 - Imperativ programmering Introduktion till kursen och Python Eric Elfving Institutionen för datavetenskap 1 Programmering - en översikt 2 Python Inbyggda typer Satser och uttryck 1 Programmering

Läs mer

Översikt. Installation av EasyPHP 1. Ladda ner från http://www.easyphp.org/ Jag använder Release 5.3.4.0 2. Installera EasyPHP.

Översikt. Installation av EasyPHP 1. Ladda ner från http://www.easyphp.org/ Jag använder Release 5.3.4.0 2. Installera EasyPHP. Laboration 1 Översikt 1. Att komma igång med laborationsmiljön a. installera Aptana Studio 3 b. Installera EasyPHP 2. Testa lite programmering a. Testa enkla uppgifter b. Testa automatiskt 3. Skapa inloggningsformulär

Läs mer

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter

ITK:P1 Föreläsning 4. Grafiska gränssnitt i Java. AWT-komponenter ITK:P1 Föreläsning 4 Grafiska gränssnitt och händelsehantering 1 DSV Peter Mozelius Grafiska gränssnitt i Java Efterfrågan på program med grafiskt gränssnitt har ökat avsevärt de senaste åren I Java finns

Läs mer

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015

Objektorienterad Programkonstruktion. Föreläsning 3 9 nov 2015 Objektorienterad Programkonstruktion Föreläsning 3 9 nov 2015 Kursnämnd Namn kommer... UML: Klassdiagram UML: Relationer Ärver från superklass Implementerar gränssnitt Dubbelriktad eller oriktad relation

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

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

Objektorienterad Programmering (OOP) Murach s: kap 12-16 Objektorienterad Programmering (OOP) Murach s: kap 12-16 2013-01-28 1 Winstrand Development Objektorienterad Programmering Förkortas OOP Objektorientering innebär att man delar in koden i olika block,

Läs mer

Objektorienterad Programmering (TDDC77)

Objektorienterad Programmering (TDDC77) Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Felhantering Eclipse Felsökning Command line argumenter

Läs mer

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

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016 Command line argumenter Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 /* Cla. java * Programmet illustrerar

Läs mer

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15

Objekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15 DAVA15 Objekt, klasser Vad är det? Vad är sambandet mellan dem? Vad är skillnaden mellan dem? Tillstånd Signatur Kommunikation Typ Fält, parametrar och lokala variabler Likheter och skillnader Räckvidd

Läs mer

Programmering grundkurs

Programmering grundkurs 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,

Läs mer

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

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

Grundläggande datalogi - Övning 1

Grundläggande datalogi - Övning 1 Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b

Läs mer

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else Förkunskaper från tidigare föreläsningar: Objektorienterad Programmering (TDDC77) Föreläsning IX: Klasser och Objekt, Instantiering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2015 I STONE I Variabler,

Läs mer

INSTALLATION...3 ATT KOMMA IGÅNG...3 PROGRAMMETS DESIGN...4 LÄGGA TILL TABELL...4 EDITERA TABELL...4 EDITERA RELATION...5 SPARA OCH AVSLUTA...

INSTALLATION...3 ATT KOMMA IGÅNG...3 PROGRAMMETS DESIGN...4 LÄGGA TILL TABELL...4 EDITERA TABELL...4 EDITERA RELATION...5 SPARA OCH AVSLUTA... INSTALLATION...3 ATT KOMMA IGÅNG...3 PROGRAMMETS DESIGN...4 LÄGGA TILL TABELL...4 EDITERA TABELL...4 EDITERA RELATION...5 SPARA OCH AVSLUTA...6 2 (6) 2D1954 Programutvecklingsprojekt vt 2003 Installation

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

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

Programmeringsteknisk översiktskurs för yrkeshögskoleprogram

Programmeringsteknisk översiktskurs för yrkeshögskoleprogram Programmeringsteknisk översiktskurs för yrkeshögskoleprogram Föreläsning 2 Våren 2005 Innehåll Hur skapar man formulär i Visual Basic, design av användarytor Vad är objekt? Egenskaper och metoder Läsanvisningar:

Läs mer

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF!

Spara papper! Skriv inte ut sammanfattning utan ladda ner PDF! Denna beskrivning har gjorts på Windows XP Professional (men bör fungera även på Home Edition och Windows 2000/2003). Att installera Oracle 9i Personal Edition kräver ca. 3 GB hårddiskplats och ca. 200

Läs mer

Tentamen i TDP004 Objektorienterad Programmering Praktisk del

Tentamen i TDP004 Objektorienterad Programmering Praktisk del Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2010-04-07 Tid: 8-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 285607 Jourhavande kommer att besöka skrivsalarna ungefär

Läs mer

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Introduktion till integrering av Schenkers e-tjänster. Version 2.0 Introduktion till integrering av Schenkers e- Version 2.0 Datum: 2008-06-18 Sida 2 av 8 Revisionshistorik Lägg senaste ändringen först! Datum Version Revision 2008-06-18 2.0 Stora delar av introduktionen

Läs mer

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

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/3 2014 Innehåll Kursöversikt Javarepetition/Javaintroduktion UML - klassdiagram-introduktion i anslutning till Java-exemplen Kursmål,

Läs mer

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

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

Läs mer

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2 2001-03-16, kl 14.00-18.00 Hjälpmedel: Inga hjälpmedel är tillåtna

Läs mer

Webbprogrammering, grundkurs 725G54

Webbprogrammering, grundkurs 725G54 Webbprogrammering, grundkurs 725G54 Bootstrap jquery SEO RWD MuddyCards. Tidigare Muddycards Många positiva kommentarer Ibland för högt tempo på föreläsning Lägg ut labbar tidigare Mer föreläsningar (2

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

Instruktion för användande av Citrix MetaFrame

Instruktion för användande av Citrix MetaFrame Instruktion för användande av Citrix MetaFrame Öppna valfri browser, t ex Internet Explorer eller Firefox, och ange url en www.git.ltu.se. Detta medför att följande bild presenteras. OBS! Ny version av

Läs mer

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

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser Introduktion till programmering Föreläsning 2: Variabler, uttryck och satser 1 1 Värden De grundläggande saker som en dator manipulerar resultaten av beräkningar kallas värden Värden vi stött på: 2 och

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

Databaser och Datamodellering Foreläsning IV

Databaser och Datamodellering Foreläsning IV Webbprogrammering - 725G54 Databaser och Datamodellering Foreläsning IV Agenda Databaser ERD SQL MySQL phpmyadmin Labb 4 Databaser Databas - samling med data Databashanterare Enkelt Kraftfullt Flexibelt

Läs mer

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

Hos vad? och bör därför vara instanseller klassvariabel i vilken klass? Övningstillfälle 5 Lite kort repetition om klasser och objekt class EnKlass(KlassAttÄrvaFrån): klassvariabel = 5 def init (self) KlassAttÄrvaFrån. init (self) self.instansvariabel = 10 s = 'klassvariabel=

Läs mer

Java, klasser, objekt (Skansholm: Kapitel 2)

Java, klasser, objekt (Skansholm: Kapitel 2) Java, klasser, objekt (Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Objectorienterad programmering Sida 1 Vad är en klass? En klass är ett sätt att beskriva en mängd objekt och deras gemensamma

Läs mer

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 729G75: Programmering och algoritmiskt tänkande Tema 1, föreläsning 1 Jody Foo Föreläsningsöversikt Kursinfo / Om kursen Algoritmer Objektorienterad programmering i praktiken terminologi använda objekt

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

Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner

Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner INNEHÅLL Uppstart Inloggning SSMS Skapa Databas Skapa Tabell Skapa Diagram, Fk, RI Hantering av Index, Pk, Fk, Ix Constraints Beräknande fält Några funktioner Kapitel 5 och 6. Beginning SQL Server 008

Läs mer