Kontraktbaseret Design. Anker Mørk Thomsen
|
|
- Oscar Olsen
- 8 år siden
- Visninger:
Transkript
1 Kontraktbaseret Design Anker Mørk Thomsen 5. marts 2014
2 -2 Kontraktbaseret Design Anker Mørk Thomsen 1. udgave ISBN:
3 Forord Bogen er blevet til gennem undervisning i faget Kontraktbaseret Udvikling på bacheloruddannelsen i Softwareudvikling. Emnet har jeg opdelt i to dele. Den første del omfatter konstruktion og udvikling af algoritmer ved anvendelse af formelle metoder. Denne første del indeholder også den diskrete matematik, som danner grundlag for at kunne arbejde med de formelle metoder. Kontraktbaseret Design omhandler design af programmodulerne i et objektorienteret sprog og er inspireret af Design by Contract by example, se Mitchell and McKim [2002]. Januar 2014 Anker Mørk Thomsen -1
4 Indhold 1 Kontraktbaseret Design Specifikationer Spillet NIM Kontrakter Introduktion til JML Kontrakt for en procedure Uformelle prædikater i specifikationer Øvelser Kontrakt for en funktion Motivation for brug af kontrakter Interface Clock Øvelser Klassen Medlemsregister Grundlæggende regler for kontrakter på klasser Kontrakt for interface Personregister Øvelser Datatypen Stack Kontrakt for interface Stack<T> Proceduren Push Den begrebsmæssige model Specifikationen for proceduren push() Funktionen top Proceduren remove Samlet kontrakt for class Stack<T> I
5 INDHOLD II Kildekoden til interface Stack<T> Kontrakter for interface-moduler Den begrebsmæssige model Øvelser Uforanderlige sekvenser Sekvenser Repræsentation af sekvenser Basisfunktionerne Funktionen Head Funtionen Tail Funktionen isempty() De afledede funktioner Funktionen getcount() Funktionen precededby() Funktionen elemat() Funktionen concat() Funktionen equals() Funktionen subsequence() Afsluttende bemærkninger Øvelser Datatypen Queue<T> Kontrakt for proceduren insert() Kontrakt for proceduren Remove() Hvad skal vi kontrollere? Statisk check Dynamisk check Kontrakt for funktionen getfirst() Kontrakt for funktionen isempty() Det endelige design af interface Queue Kildetekst til interface Queue<T> Øvelser
6 INDHOLD III 5 Datatypen Mapping<K,V> interface Mapping<K,V> Procedurerne insert(k,v) og remove(k) Kildeteksten til interface Mapping<K,V> Øvelser Uforanderlige mængder Datatypen Set Kontrakt for funktionen has() Kontrakt for plus() Kildetekst til interface Set<T> Øvelser Kontrakter for Subtyper Open-closed principle (OCP) Liskovs substitutionsprincip (LSP) Et gammelt eksempel på brud på LSP Rektangel og Kvadrat Kildekode til programmet LiskovTest Kontrakter for Systemer Et rammesystem for designmønstret Observer Kontrakt for observer-systemet Proceduren Attach Proceduren detach(observer obs) Kontrakt for interface Observer Kildetekst til et observer-system Øvelser Løsninger til udvalgte øvelser 92
7 Introduktion Bogen er beregnet til brug som lærebog på kurset Kontraktbaseret Udvikling på erhvervsakademiernes bacheloruddannelse i Software Udvikling. Bogen indeholder pensum til den del af kurset, som omhandler design af programmoduler baseret på specifikationer. Indholdet er inspireret af Michell og McKims Design by Contract by Example Mitchell and McKim [2002]. Design by Contract er et varemærke, som ejes af Bertrand Meyer, som konstruerede programmeringssproget Eiffel. I Design by Contract by Example anvender Mitchell og McKim programmeringssproget Eiffel, hvor man kan skrive specifikationer direkte i koden. Eiffel udmærker sig ved, at specifikationssproget er simpelt og let forståeligt. I Kontraktbaseret Programmering Thomsen [2014] anvendte jeg en programnotation, som blev introduceret af E. W. Dijkstra blandt andet i bogen A Dicipline of Programming Dijkstra [1976] Dijkstra kaldte notationen Q. I denne notation anvendes operatoren := som tilordningsoperator og ikke = som i Java, C #, C og C ++. Anvendelse af = som tilordningsoperator giver det indtryk, at der er tale om lighed og ikke om en aktivitet. Sætningen int k=7 i Java skal ikke læses k er lig med 7 men k sættes til 7. Brugen af = som tilordningsoperator har konsekvensen, at logisk ækvivalens i boolske udtryk kræver en operator, der ikke kan forveksles med =. Sprogene Java, C #, C og C ++ anvender == til sammenligning af simple værdier og referencer. I notationen Q anvendes := som tilordningsoperator og = til sammenligninger. I Java betyder sætningen boolean p = (x==y); at variablen p får tildelt værdien af x = y. I Q skrives dette boolean p:= (x=y) Notationen i Q er bedre end notationen i Java og de andre ovennævnte sprog. Jeg har derfor overvejet at anvende Q, men indtil videre vil jeg bruge Java. Derved er det muligt at afprøve bogens eksempler uden at skulle oversætte dem fra Q til Java. Specifikationerne (kontrakterne) skrives i specifikationssproget JML. Referencemanualen til JML Leavens and et. al. [2002] er på 196 sider. Et skræmmende omfangsrigt og kompliceret dokument til beskrivelse af specifikationssproget. Det er vigtig, at et specifikationssprog er simpelt, og at beskrivelsen af syntaks og semantik kun fylder få sider. JML s kompleksitet afspejler også, at det er lykkedes at udvide Java, så også Java er blevet en programteknisk Jumbo Jet. 1
8 INDHOLD 2 De fleste af bogens eksempler anvender generiske typer. Anvendelse af exception er undgået. Specifikationerne skrives i en simpel delmængde af JML, hvor kun følgende nøglebegreber anvendes: pre Q; post R; assignable x; invariant C; JML indholder muligheden for at skrive specifikationer på flere niveauer, kaldet letvægts- og sværvægtsspecifikationer. Desuden kan man i JML specificere normal behaviour og exceptional behaviour. Vi anvender kun letvægtsspecifikationer, idet de er fuldt dækkende for en komplet specifikation. Bogens eksempler benytter ikke kald af exceptions undtagen i de tilfælde, hvor der er tale om en programmeringsfejl, eller hvor Java tvinger programmøren til at bruge exceptions (try-catch), f. eks. ved input/output. Anvendelse af exceptions anser jeg for at være en form for goto-programmering og kan kun medvirke til skrivning af programmer, som er vanskelige at gennemskue. Første kapitel indeholder en præsentation af, hvorledes man udformer og udvikler specifikationer for et spil-program samt at par almindeligt anvendte typer af moduler, der repræsenterer registre (objektsamlinger). Kapitlerne 2 til og med 6 behandler kontrakter for en række abstrakte datatyper. Derefter følger et kapitel, hvor bogen behandler kontrakter for sybtyper. I kapitlet om subtyper gennemgås Liskovs subsitutionsprincip. Bogens sidste kapitel behandler kontrakter for et rammesystem, der realiserer designmønstret Observer. Bogen er udformet, så den kan læses uafhængigt af bogen Kontraktbaseret Programmering.
9 Kapitel 1 Kontraktbaseret Design På engelsk kaldes emnet for Design by Contract. Begrebet er introduceret af Bertrand Meyer allerede i 1986 i programmeringssproget Eiffel. Sproget Eiffel blev beskrevet i en række artikler og senere i bogen Object Oriented Software Construction. I 2009 udgav Springer Verlag Bertrand Meyers nye bog Touch of Class med undertitlen Learning to Program Well with Object and Contracts. Her finder man en grundig indføring i objektorienteret programmering i Eiffel med brug af specifikationer og løkkeinvarianter, se Thomsen [2014]. Kontraktbaseret Design (KD) er idag et omfattende forskningsområde, og teknikken er begyndt at finde anvendelse i erhvervslivet især på områder, hvor det er af stor betydning at kunne skrive korrekte programmer. Et korrekt program overholder de krav, der stilles til programmets udførelse 1. Disse krav opdeles ofte i flere typer af krav. Det kan være krav til udførelsestid, krav til pladsforbrug under udførelsen og ikke mindst krav til funktionalitet. I KD koncentrerer vi os om de funktionelle krav. Vi beskæftiger os ikke generelt med krav til programmernes effektivitet, dvs. programmernes tids- og pladsforbrug. Alligevel vil vi undertiden skele til effektiviteten, dvs. tids- og pladskompleksiteten. De funktionelle krav vil i den udstrækning, det er muligt og hensigtsmæssigt, blive formuleret som formelle specifikationer. Der findes to måder, hvorpå man kan kontrollere, om et program overholder specifikationerne. Man kan udføre programmet med forskellige input og så kontrollere, at programmets resultater svarer til kravene i specifikationerne. Dette svarer til at udføre test. Hvis specifikationerne er formulerede i et formelt sprog, kan run-time-systemet foretage en automatisk kontrol af programudførelsens resultater. Dette kaldes dynamisk prøvning eller test af programmet. Den anden måde består i at analysere programteksten (kildekoden), og gennemføre et bevis for, at programmet overholder specifikationerne. Denne kontrol kaldes en statisk prøvning, og den kræver ikke, at programmet udføres. En statisk prøvning kan afgøre, om et program er korrekt, dvs. at programmet giver korrekte resultater uanset input. Den dynamiske prøvning kan derimod ikke afgøre korrektheden af et program men blot sandsynliggøre, at programmet ikke indeholder fejl. En test af et program kan kun vise tilstedeværelsen af fejl. En test kan ikke vise fravær af fejl. I bogen Thomsen [2014] gennemgås nogle fremgangsmåder til at konstruere korrekte algoritmer. 1 Det har god mening at definere, hvad der forstås ved et korrekt program. Næsten alle større programmer indeholder fejl, som bevirker, at programmerne ikke er korrekte. De udfører ikke i alle tilfælde den ønskede beregning. 3
10 KAPITEL 1. KONTRAKTBASERET DESIGN 4 Vi er interesseret i at kunne skrive kontrakter for programsystemer. Hvordan skal sådanne kontrakter udformes? Kan vi skrive en kontrakt, der omfatter et helt program endsige et system af programmer? Svaret er både ja og nej. Det vil være en uoverkommelig og meget kompliceret opgave at formalisere alle funktionelle specifikationer for et system af programmer. Vi kan dog indfange mange væsentlige dele af programmernes funktion gennem formelle specifikationer. 1.1 Specifikationer En specifikation for en algoritme består af tre prædikater (betingelser): en præbetingelse, en postbetingelse og en angivelse af, hvilke variabler, der må ændres af algoritmen (assignable). En specifikation for en procedure har følgende opbygning /*@ pre assignable post void <navn>(<param>); Nøgleordet void angiver i Java, at metoden er en procedure. <navn> er procedurens navn og <param> er listen af parametre. Procedurens krop indeholder den algoritme, som specifikationen vedrører. Metodesignaturen er også en del af specikationen, idet den definerer input til metoden. I java er alle metoder medlemmer i en klasse, og metoderne kan tilgå klassens variabler og i mange tilfælde også variabler i andre klasser. Metoden kan derfor operere på globale variabler. Selv om det er tilladt i Java, er det dårlig programmeringsskik at anvende globale variabler uden for den klasse, hvor metoden er medlem. Nøgleordet pre efterfølges af præbetingelsen i form af prædikatet Q. Præbetingelsen beskriver de programtilstande, i hvilke det er tilladt at kalde proceduren. Programmets variabler skal have værdier, der opfylder Q, hvis man vil kalde proceduren <navn>. Er Q ikke opfyldt, kan kalderen ikke stille krav til funktionens resultat. Procedurens parametre er input til proceduren. Nøgleordet assignable efterfølges af en liste af de variabler, som må ændres af proceduren. Det er underforstået, at ingen andre variabler må ændres af proceduren. I Java anvendes callby-value, hvilket indebærer, at argumenterne til et procedurekald kopieres til lokale variabler i proceduren. Hvis parametrenes værdier ændres af proceduren, ændrer dette ikke på argumenternes værdier. Der er derfor ingen grund til at nævne parametrene i en assignable-sætning. En ændring af parametrene i procedurens krop har ingen virkning på procedurens omgivelser og specielt ikke på objekttilstanden. Man skal altid nævne de globale variabler, der ændres af proceduren, i assignable-sætningen. Nøgleordet post efterfølges af et prædikat, der beskriver procedurens resultat. Proceduren skal, såfremt den er kaldt på legal vis, terminere i en tilstand, hvor postbetingelsen er opfyldt. Det fordres altså, at proceduren faktisk terminerer. Der må ikke være nogen uendelig løkke i procedurens krop. En algoritme er korrekt, hvis og kun hvis følgende er opfyldt:
11 KAPITEL 1. KONTRAKTBASERET DESIGN 5 Hvis man begynder udførelsen af algoritmen i en tilstand, hvor præbetingelsen er sand, så skal algoritmen terminere i en tilstand, hvor postbetingelsen er sand. Algoritmen må kun ændre værdierne for de variabler, der er nævnt i assignable-listen. Eksempel 1.1. Proceduren /*@ pre assignable post t == void inc(int x) Her er x en global variabel, f. eks. en instansvariabel i den klasse, hvor proceduren inc er defineret. En specifikation af en funktion har denne opbygning /*@ pre post <returtype> <navn>(<param>); <returtype> er angiver typen af den værdi, som funktionen returnerer. Normalt vil der ikke være nogen assignable i specifikationen, da vi normalt ikke tillader, at funktioner påvirker deres omgivelser. Dette indbærer, at globale variabler kun aflæses. Eksempel 1.2. Specifikation for en funktion: /*@ pre 0<=k && post \result == boolean gåropi(int[] b, int k, int x); Funktionen undersøger, om x går op i b[k]. Funktionen må kun kaldes, hvis k er et gyldigt indeks i b. 1.2 Spillet NIM Eksemplet nedenfor viser en funktionel specifikation af et spil mellem to spillere. Den ene spiller er en person. Den anden spiller er computeren.
12 KAPITEL 1. KONTRAKTBASERET DESIGN 6 Eksempel 1.3. Spillet NIM. Spillet NIM er et tændstikspil med to spillere A og B. Spillet består i, at der lægges nogle rækker med tændstikker, f. eks. fire rækker med henholdsvis (3, 6, 5, 8) tændstikker. Man trækker lod om, hvem der skal starte. På skift må hver af spillerne nu fjerne én eller flere tændstikker fra én række efter eget valg. Den spiller, som tager den sidste tændstik, har vundet. En specifikation for et program, der kan spille NIM mod en person, kan udvikles skridt for skridt. I første omgang beskrives programmets startbetingelse og slutbetingelse. Startbetingelsen skal beskrive, at der er n rækker, der hver indeholder en eller flere tændstikker. Dette modellerer vi med en liste, hvor hvert element i listen angiver antallet af tændstikker i den pågældende række. Lad os kalde listen tr. Udtrykket tr(i) angiver da antallet af tændstikker i række nummer i. Der skal være mindst én række tændstikker, når spillet begynder. Dette kan vi beskrive med betingelsen n > 0. At alle rækker skal indeholde mindst én tændstik, kan vi beskrive med: For alle hele tal i, hvor 0 i < n, skal tr(i) > 0. I matematisk notation skriver vi denne betingelse med prædikatet ( i : 0 i < n : tr(i) > 0) Udtrykket person() angiver, hvem der er i trækket. Hvis person() true er det personens tur til at trække tændstikker. Hvis person() f alse er det computerens (programmets) tur til at trække. Vi kan vælge at trække lod om, hvem der skal begynde spillet. I så fald er startbetingelsen for spillet true. Altså at det er uden betydning, hvilken værdi person() har, når spillet begynder. Læg mærke til, at vi anvender en boolsk funktion person() til at markere, hvem der skal trække. Hvis vi havde brugt en variabel, så ville det kræve, at denne variabel var tilgængelig i implementeringen af spillet. Ved at anvende en funktion overlades det til programmøren, hvorledes hvem skal trække skal implementeres. Spillet skal ende i en tilstand, hvor der ikke er flere tændstikker tilbage. Dette kan vi udtrykke ved at skrive, at summen af alle tallene i tr skal være 0. Specifikationen bliver i JML-notation: /*@ pre (\forall int i; 0<=i && i<n; tr(i)>0) && post (\sum int i; 0<=i && i<n; { glovar int n; Program } Præbetingelsen fordrer, at programmet begynder i en tilstand, hvor alle rækker indeholder tændstikker. Postbetingelsen kræver, at det korrekte program ender i en tilstand, hvor alle tændstikker er fjernet. Det er slutværdien af person(), der afgør, hvem der har vundet spillet. Programmet skal ændre på resultatet af funktionen tr() og på resultatet af funktionen person().
Kontraktbaseret Design. Anker Mørk Thomsen
Kontraktbaseret Design Anker Mørk Thomsen 19. februar 2014 -2 Kontraktbaseret Design Anker Mørk Thomsen 1. udgave ISBN: 9788740491500 Forord Bogen er blevet til gennem undervisning i faget Kontraktbaseret
Læs mereDesign by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater
Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design
Læs mereDesign by Contract. Design and Programming by Contract. Oversigt. Prædikater
Design by Contract Design and Programming by Contract Anne Haxthausen ah@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design by Contract er en teknik til at specificere
Læs mereUgeseddel 4 1. marts - 8. marts
Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,
Læs mereKontraktbaseret Programmering Anker Mørk Thomsen 1. udgave ISBN: 978-87-40-41315-1
-1 Kontraktbaseret Programmering Anker Mørk Thomsen 1. udgave ISBN: 978-87-40-41315-1 Forord Denne bog er blevet til gennem undervisning i faget Kontraktbaseret Udvikling på bacheloruddannelsen i Softwareudvikling.
Læs mere22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.
22 Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. Indsættelse i hobe. Sletning af minimalt element i hobe. Repræsentation. 327
Læs mereAbstrakte datatyper C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype
Læs mereAlgoritmeskabeloner: Sweep- og søgealgoritmer C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereSkriftlig eksamen i Datalogi
Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2
Læs mereAAU, Programmering i Java Intern skriftlig prøve 18. maj 2007
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal
Læs mereSoftware Construction 1 semester (SWC) Spørgsmål 1
Spørgsmål 1 Objekter #1 Giv en kort præsentation af begrebet objekt, samt hvorledes du erklærer(declare), opretter(create) og bruger objekter Du kan beskrive o Datatyper o Variable / Instans variable /
Læs mereJan B. Larsen HTX Næstved Computational Thinking Albena Nielsen N. Zahles Gymnasium 2018/2019
Forløb: Toksikologi Fag og emner Forløbet kan laves udelukkende i matematik og bioteknologi, men der er oplagt, at det implementeres i andre fag. Matematik modellering, differenceligninger, sandsynlighed,
Læs mereProgrammering, algoritmik og matematik en nødvendig sammenblanding?
Programmering, algoritmik og matematik en nødvendig sammenblanding? Oplæg til IDA møde, 29. november 2004 Martin Zachariasen DIKU 1 Egen baggrund B.Sc. i datalogi 1989; Kandidat i datalogi 1995; Ph.D.
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereÅrsagen til fejl. Erkendelse af fejl. Håndtering af fejl.
9 Fejlhåndtering Årsagen til fejl Erkelse af fejl Håndtering af fejl Fejlerkelse og -håndtering i objekt-orienterede sprog Fejlerkelse og -håndtering i Eiffel Udbredelse af fejl i Eiffel Nuanceret fejlhåndtering
Læs mereKlasser og objekter. (Afsnit i manualen)
Klasser og objekter (Afsnit 4 + 5 i manualen) Grundbegreber Klasser og objekter beskrivelse oprettelse Attributter og metoder tilstand opførsel Indkapsling afskærmning datarepræsentationsuafhængighed Klasser
Læs mereSproget Rascal (v. 2)
Sproget Rascal (v. 2) Til brug i K1 på kurset Oversættere Opdateret 29/11 2004 Abstract Rascal er et simpelt Pascal-lignende imperativt sprog. Dette dokument beskriver uformelt Rascals syntaks og semantik
Læs mere4 Basal Objekt-orienteret Programmering I.
4 Basal Objekt-orienteret Programmering I. Klasser i forhold til abstrakte datatyper og record-typer. Variable og operationer. Klasse-interfaces. Klasser og typer. Klasse-instantiering og initialisering.
Læs mereUdvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Abstrakte klasser.
10 Nedarvning I. Udvidelse og specialisering. Klassehierarkier. Nedarvningsterminologi. Interfaces. Statiske og dynamiske typer. Polymorfi. Dynamisk binding og virtuelle operationer. Decentraliseret/centraliseret
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således
Læs mereSproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract
Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget
Læs mereclass Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.
Programmering 1999 Forelæsning 4, fredag 10. september 1999 Klasser og objekter Felter, konstruktorer, this Eksempler på klasser: Time, Appointment Eksempler på metoder i Time og Appointment Klassefelter:
Læs mere26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.
26 Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler. Hvad er programverifikation? Bevisregel for 'tom kommando'. Bevisregel for assignment. Bevisregler for selektive
Læs mereSoftware Construction 1. semester (SWC) januar 2014 Spørgsmål 1
Spørgsmål 1 Grundlæggende objektorienterede begreber o Klasse (class) o Objekt (object) o Metode (method), herunder return type og parametre o Instansvariable (instance variables) & egenskaber (properties),
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2015 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 3. marts, 2015 Dette projekt udleveres i to dele. Hver del har sin deadline, således
Læs mereIntroduktion til funktioner, moduler og scopes i Python
Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for
Læs mere1 Opsumering fra tidligere. 2 Dagsorden 3 BIMS. 4 Programtilstande. Statements/kommandoer (Stm) i bims. 3.1 Abstrakt syntaks for bims
1 Opsumering fra tidligere Hvis A er kontekstfrit, S er der et p > 0 s Alle s A hvor s p kan splittes op som s = uvxyz så argument 1-3 holder A er ikke kontekstfrit, hvis for ethvert bud på p kan findes
Læs mereForelæsning Uge 4 Mandag
Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder
Læs mereSkriftlig Eksamen DM507 Algoritmer og Datastrukturer
Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Institut for Matematik og Datalogi Syddansk Universitet, Odense Mandag den 6. juni 2016, kl. 15:00 19:00 Besvarelsen skal afleveres elektronisk. Se
Læs mereObjektorienteret design med arv og polymorfi:
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Objektorienteret design med arv og polymorfi: Substitutionsprincippet Composite Design Pattern Finn Nordbjerg Side 1 Objektorienteret
Læs mereOpgaver hørende til undervisningsmateriale om Herons formel
Opgaver hørende til undervisningsmateriale om Herons formel 20. juni 2016 I Herons formel (Danielsen og Sørensen, 2016) er stillet en række opgaver, som her gengives. Referencer Danielsen, Kristian og
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mere4 Oversigt over kapitel 4
IMM, 2002-09-14 Poul Thyregod 4 Oversigt over kapitel 4 Introduktion Hidtil har vi beskæftiget os med data. Når data repræsenterer gentagne observationer (i bred forstand) af et fænomen, kan det være bekvemt
Læs mereÅben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser
3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse
Læs mereForelæsning Uge 5 Mandag
Forelæsning Uge 5 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Brug af klassen Collections og interfacet Comparable BlueJ s Debugger Nyttig til at inspicere
Læs mere13 Objekt-orienteret Design.
13 Objekt-orienteret Design. Analyse i forhold til design. Programbeskrivelse og designbeskrivelse. Sømløs udvikling. Design i forhold til OO Eiffel programmering. Kategorisering af klasser i et design.
Læs mereJavaScript. nedarvning.
JavaScript er et sprog, der kan give en hjemmeside mere funktionalitet og gøre den interaktiv, så den reagerer på læsernes handlinger. CGI (Common Gateway Interface) har hidtil været de protokoller, man
Læs mereProgrammering i C. Lektion september 2009
Programmering i C Lektion 1 8. september 2009 Målgruppe Motivation Indhold Form Materiale 2 / 47 Kursusintroduktion 1 Målgruppe 2 Motivation 3 Indhold 4 Form 5 Materiale Målgruppe Motivation Indhold Form
Læs mereSkriftlig Eksamen Algoritmer og Datastrukturer (dads)
Skriftlig Eksamen Algoritmer og Datastrukturer (dads) Datalogisk Institut Aarhus Universitet Mandag den 27. maj 2002, kl. 9.00 13.00 Opgave 1 (25%) Denne opgave handler om multiplikation af positive heltal.
Læs mereObjektorientering. Programkvalitet
1 PROSA-Bladet nr. 4 1993 Objektorientering = Programkvalitet? Af Finn Nordbjerg, adjunkt ved Datamatikeruddannelsen, Aalborg Handelskole 1. Indledning Objektorientering er blevet et edb-fagets mest udbredte
Læs mereEksempel: Skat i år 2000
Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)
Læs mereGrundlæggende Algoritmer og Datastrukturer
Grundlæggende Algoritmer og Datastrukturer Om kurset Grundlæggende Algoritmer og Datastrukturer Undervisningsformer Forelæsninger: 4 timer/uge (2+2). Øvelser: 3 timer/uge. Café. Obligatorisk program 13
Læs mereUdarbejdet af CFU Absalon
Chatbots i Scratch Introduktion: En chatbot er et lille program, der kan chatte. De bruges mange steder på internettet, enten for at kunne hjælpe i nogle bestemte situationer eller for at underholde. De
Læs mere8 Specifikation med Logiske Udtryk.
8 Specifikation med Logiske Udtryk. Specifikation kontra program. Specifikation af funktioner. Specifikation af funktions-orienterede ADT-er. Integreret specifikation og program i Eiffel. Korrekthed af
Læs mereProgramming Language Design and Analysis motivated by Hardware Evolution
Programming Language Design and Analysis motivated by Hardware Evolution Alan Mycroft Presenter: Thomas Bøgholm September 24, 2007 Alan Mycroft Professor på Cambridge Universitet Cambridge Programming
Læs mereDokumentation af programmering i Python 2.75
Dokumentation af programmering i Python 2.75 Af: Alexander Bergendorff Jeg vil i dette dokument, dokumentere det arbejde jeg har lavet i løbet opstarts forløbet i Programmering C. Jeg vil forsøge, så vidt
Læs mereProgrammering 2. dprog2 E2012. http://www.cs.au.dk/dprog2/
Programmering 2 dprog2 E2012 http://www.cs.au.dk/dprog2/ Læringsmål Deltagerne skal ved afslutningen af kurset kunne: forklare og anvende både basale og videregående elementer af et moderne programmeringssprog,
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Institution Uddannelse Fag og niveau Lærer(e) Hold Termin hvori undervisningen afsluttes: maj-juni 2014 HTX
Læs meret a l e n t c a m p d k Matematiske Metoder Anders Friis Anne Ryelund 25. oktober 2014 Slide 1/42
Slide 1/42 Hvad er matematik? 1) Den matematiske metode 2) Hvad vil det sige at bevise noget? 3) Hvor begynder det hele? 4) Hvordan vælger man et sæt aksiomer? Slide 2/42 Indhold 1 2 3 4 Slide 3/42 Mængder
Læs mereKapitel 3 Betinget logik i C#
Kapitel 3 i C# er udelukkende et spørgsmål om ordet IF. Det er faktisk umuligt at programmere effektivt uden at gøre brug af IF. Du kan skrive små simple programmer. Men når det bliver mere kompliceret
Læs mereRekursion C#-version
Note til Programmeringsteknologi Akademiuddannn i Informationsteknologi Rekursion C#-version Finn Nordbjerg 1 Rekursion Rekursionsbegrebet bygger på, at man beskriver noget ved "sig selv". Fx. kan tallet
Læs mereForelæsning Uge 4 Mandag
Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder
Læs mereTal og algebra. I kapitlet arbejdes med følgende centrale matematiske begreber: algebra variable. Huskeliste: Tændstikker (til side 146) FRA FAGHÆFTET
I kapitlet skal eleverne arbejde med fire forskellige vinkler på algebra de præsenteres på kapitlets første mundtlige opslag. De fire vinkler er algebra som et redskab til at løse matematiske problemer.
Læs mereUdsagnslogik. Anker Mørk Thomsen. 6. december 2013
Udsagnslogik Anker Mørk Thomsen 6. december 2013 Logiske Udsagn Sætningstyper Spørgende (interrogative): Hvor længe bliver du i byen? Befalinger (imperative): Gå tilvenstre efter næste sving? Ønsker (optative):
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Introduktion til kurset Rolf Fagerberg Forår 2019 1 / 20 Hvem er vi? Underviser: Rolf Fagerberg, Institut for Matematik og Datalogi (IMADA) Forskningsområde: algoritmer
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Programmering C ved mst Termin Juni 117 Institution Uddannelse Fag og niveau Lærer Hold Erhvervsskolerne Aars hhx Programmering C Michael Stenner (mst) 2-3g16 pro Forløbsoversigt
Læs mereRolf Fagerberg. Forår 2013
Forår 2013 Mål for i dag Dagens program: 1 2 3 4 5 6 Forudsætninger: DM536 og DM537 Timer: 50% forelæsninger, 50% øvelser Forudsætninger: DM536 og DM537 Eksamenform: Skriftlig eksamen: Timer: 50% forelæsninger,
Læs mere3 Algebra. Faglige mål. Variable og brøker. Den distributive lov. Potenser og rødder
3 Algebra Faglige mål Kapitlet Algebra tager udgangspunkt i følgende faglige mål: Variable og brøker: kende enkle algebraiske udtryk med brøker og kunne behandle disse ved at finde fællesnævner. Den distributive
Læs mereOBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8
Kursusgang 8 OBS! Prøveeksamen med syntaks på tirsdag! Kursusgang 8 Matematik Arkæologi Eksempel Semantik Bims (Basic Imperative Statements / Begrænset Imperativt Sprog) Abstrakt syntaks Transitionssystemer
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin August 2009 - juni 2010 Institution HTX Sukkertoppen/Københavns Tekniske Skole Uddannelse Fag og niveau Lærer(e)
Læs mereHvem er vi? Kursus Introduktion. Kursuslærerne. Agenda for i dag
Hvem er vi? Kursus Introduktion Anne Haxthausen ah@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark 100 studerende med forskellig baggrund: software teknologi It og Kom
Læs mereLær Python dag 1 - modul 1
Lær Python dag 1 - modul 1 Introduktion, basis python Steffen Berg Klenow Jonas Bamse Andersen Syddansk Universitet Indhold 1. Velkommen 2. Programmering i python 3. Typer, variabler og udtryk 1 Velkommen
Læs mereDatalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning
Datalogi OB, Efterår 2002 OH er, forelæsning 10/9-2002 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Eftermiddagens opgave:
Læs mereForelæsning Uge 4 Torsdag
Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (sidste mandag) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?
Læs mereObjects First with Java A Practical Introduction Using BlueJ
Objects First with Java A Practical Introduction Using BlueJ En introduktion til objektorienteret programmering for begyndere ud fra et software engineering aspekt Om at programmere i Java, ikke om værktøjet
Læs mereProgrammering 2. dprog2 E2013. http://www.cs.au.dk/dprog2/
Programmering 2 dprog2 E2013 http://www.cs.au.dk/dprog2/ Læringsmål Deltagerne skal ved afslutningen af kurset kunne: forklare og anvende både basale og videregående elementer af et moderne programmeringssprog,
Læs mereIntroduktion til DM507
Introduktion til DM507 Rolf Fagerberg Forår 2017 1 / 20 Hvem er vi? Underviser: Rolf Fagerberg, IMADA Forskningsområde: algoritmer og datastrukturer 2 / 20 Hvem er vi? Underviser: Rolf Fagerberg, IMADA
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Termin Juni 119 Institution Uddannelse Fag og niveau Lærer Hold Erhvervsskolerne Aars hhx Programmering B Patrick Bøgsted Sørensen (pbs) 2k18 Forløbsoversigt (4) Forløb 1 Forløb
Læs mereAlgoritmer og Datastrukturer 1. Gerth Stølting Brodal Aarhus Universitet
Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Aarhus Universitet Kursusbeskrivelsen Kursusbeskrivelsen: Algoritmer og datastrukturer 1 Formål Deltagerne vil efter kurset have indsigt i algoritmer
Læs mereForelæsning Uge 2 Torsdag
Forelæsning Uge 2 Torsdag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser Klassevariabler og klassemetoder Variabler og metoder der et tilknyttet klassen (i stedet for at være tilknyttet
Læs mereLæseplan for valgfaget teknologiforståelse. (forsøg)
Læseplan for valgfaget teknologiforståelse (forsøg) Indhold Indledning 3 Trinforløb for 7.- 9. klassetrin 4 Design 4 Programmering 5 Indledning Valgfaget teknologiforståelse er etårigt og kan vælges i
Læs mereNoter til C# Programmering Selektion
Noter til C# Programmering Selektion Sætninger Alle sætninger i C# slutter med et semikolon. En sætning kontrollerer sekvensen i programafviklingen, evaluerer et udtryk eller gør ingenting Blanktegn Mellemrum,
Læs mere16. december. Resume sidste gang
16. december Resume sidste gang Abstrakt problem, konkret instans, afgørlighedsproblem Effektiv kodning (pol. relateret til binær kodning) Sprog L : mængden af instanser for et afgørlighedsproblem hvor
Læs mereForelæsning Uge 6 Mandag
Forelæsning Uge 6 Mandag Tingene i denne forelæsning er ikke eksamenspensum Forelæsningen afrunder kurset, og forklarer nogle af de begreber, som I har mødt under kurset uden at få detaljeret forklaring
Læs mereDatalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 - forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)
Datalogi OB, Efterår 2002 OH er, forelæsning 3/9-2002 Datastrukturer og algoritmer Henning Christiansen henning@ruc.dk http://www.ruc.dk/~henning Formål: at kunne - forstå datastrukturer og algoritmer
Læs mereStudieordning for diplomuddannelsen i informationsteknologi
Studieordning for diplomuddannelsen i informationsteknologi April 2007 [v3] 1 Introduktion... 2 2 Formål... 2 3 Indhold... 2 4 Adgangskrav... 3 5 Eksaminer... 3 6 Studieplan... 3 6.1 Formelle modeller
Læs mereProgrammering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.
Programmering 1999 Forelæsning 5, tirsdag 14. september 1999 Oversigt Mere om klasser og objekter Klassefelter: static Konstante felter: final Indkapsling og synlighed: private og public Overlæsning af
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Institution Uddannelse Fag og niveau Lærer(e) Hold Termin hvori undervisningen afsluttes: maj-juni 2013 HTX
Læs mereExceptions i Delphi. Try except
Exceptions i Delphi Exceptions er en teknik til at fange fejl under programafviklingen. Ikke programmeringsfejl, men fejl der opstår i forskellige situationer, f.eks. en fil der mangler en fil der er skrivebeskyttet,
Læs mereForelæsning Uge 4 Torsdag
Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?
Læs mereKursus i OOP og Java. Kursus i Objektorienteret programmering i Java
Kursus i OOP og Java Kursus i Objektorienteret programmering i Java Åben Dokumentlicens Dette foredragsmateriale er under Åben Dokumentlicens (ÅDL) Du har derfor lov til frit at kopiere dette værk Bruger
Læs mereProjekt arbejde til kurset Advanced Models and Programs, SASP-AMP 2008 Poul Brønnum, IT Universitetet i København, Maj 2008. Indholdsfortegnelse
Udvidelse af MicroC compileren til at kunne håndtere struct- og union typer samt switch-, break- og continue statement. Yderligere er ovenstående konstruktioner anvendt til at indføre malloc og free kald
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin 2017-2018 Institution Rybners Tekniske Gymnasium Uddannelse HTX Fag og niveau Programmering C Lærer(e) David
Læs merePolymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion
Polymorfi Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type Coercion Tvangskonvertering (forfremmelse og begrænsning) Oversigt Abstrakt klasse abstrakt
Læs mereLæseplan for valgfaget teknologiforståelse
Læseplan for valgfaget teknologiforståelse (forsøg) Indhold Indledning 3 Trinforløb for 7.- 9. klassetrin 4 Design 4 Programmering 5 Indledning Valgfaget teknologiforståelse er etårigt og kan vælges i
Læs mereSproget Limba. Til brug i G1 og K1. Dat1E 2003
Sproget Limba Til brug i G1 og K1 Dat1E 2003 Abstract Limba er et simpelt imperativt sprog med hoballokerede tupler. Dette dokument beskriver uformelt Limbas syntaks og semantik samt en fortolker for Limba,
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 15. marts, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereUndervisningsbeskrivelse
Undervisningsbeskrivelse Stamoplysninger til brug ved prøver til gymnasiale uddannelser Termin Institution Uddannelse Fag og niveau Lærer(e) Hold Termin hvori undervisningen afsluttes: maj-juni 2013 HTX
Læs mereDat 2/F6S: Syntaks og semantik 2005 Centrale emner og eksamenspensum
Dat 2/F6S: Syntaks og semantik 2005 Centrale emner og eksamenspensum Hans Hüttel 14. juni 2005 Indhold 1 Centrale emner 1 2 Fuldt pensum 2 3 Reduceret pensum 3 3.1 Hvad er fjernet her?........................
Læs mereSkriftlig eksamen i Datalogi
Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%
Læs mereBOSK F2012, 1. del: Prædikatslogik
ε > 0. δ > 0. x. x a < δ f (x) L < ε February 8, 2012 Prædikater Vi skal lære om prædikatslogik lad os starte med prædikater. Et prædikat er et orakel der svarer ja eller nej. Eller mere præcist: Prædikater
Læs mereRolf Fagerberg. Forår 2015
Forår 2015 Dagens program 1 2 3 4 5 Underviser:, IMADA Forskningsområde: algoritmer og datastrukturer Underviser:, IMADA Forskningsområde: algoritmer og datastrukturer Deltagere: BA i Datalogi BA i Software
Læs mereNoter til Perspektiver i Matematikken
Noter til Perspektiver i Matematikken Henrik Stetkær 25. august 2003 1 Indledning I dette kursus (Perspektiver i Matematikken) skal vi studere de hele tal og deres egenskaber. Vi lader Z betegne mængden
Læs mereKreativ programmering
Kreativ programmering Mads Remvig Lærer og digital læringsvejleder Beder skole - Aarhus Underviser i matematik, fysik/kemi, håndværk og design Frivillig i Coding Pirates i Århus Kodeklub Master i It, Kommunikation
Læs mereForelæsning Uge 1 Torsdag
Forelæsning Uge 1 Torsdag Objekters tilstand og opførsel Java og BlueJ Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Java's for løkke Parametre i metoder Forskellige
Læs mereStudiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen
Studiepraktik Thomas Bøgholm boegholm@cs.aau.dk Mikkel Hansen mhan@cs.aau.dk Jacob Elefsen jelefs12@student.aau.dk 1 Studiepraktik -- program Program onsdag 10.00 10.15 Registrering af fremmøde og gennemgang
Læs mereSkriftlig eksamen i Datalogi
Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Sommer 1999 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 15% Opgave 2 15% Opgave 3 8% Opgave
Læs mereNye testteknikker fra ISTQB - direkte fra hylderne. Ole Chr. Hansen
Nye testteknikker fra ISTQB - direkte fra hylderne Ole Chr. Hansen TestExpo 29. Januar 2015 Præsentation Ole Chr. Hansen Managing Consultant Fellow SogetiLabs Global Innovation Team Blog - http://ochansen.blogspot.com
Læs mere