Sprogkonstruktion til beskrivelse af betingelser, som man forventer vil være opfyldt på bestemte steder i programmet

Størrelse: px
Starte visningen fra side:

Download "Sprogkonstruktion til beskrivelse af betingelser, som man forventer vil være opfyldt på bestemte steder i programmet"

Transkript

1 Forelæsning Uge 14 Defensiv programmering Metoder og konstruktører bør tjekke de parameterværdier, som de kaldes med Derved kan man ofte undgå ulovlige handlinger, såsom at dividere med nul eller tilgå et element, som ikke eksisterer Exceptions Sprogkonstruktion til rapportering af fejl En kaldt metode kan kaste en exception, som så efterfølgende gribes (behandles) på det sted, hvor metoden blev kaldt Assertions Sprogkonstruktion til beskrivelse af betingelser, som man forventer vil være opfyldt på bestemte steder i programmet Fil-baseret input/output Hvordan læser og skriver man en fil? Område, hvor der let kan ske fejl (forkert filnavn, disk full, no permission, netværksfejl, osv.) Sådanne fejl håndteres elegant ved hjælp af exceptions Afleveringsopgave: Computerspil 4 Modifikation af den grafiske brugergrænseflade Husk at deltage i kursusevalueringen Den er åben til og med onsdag den 28. november Husk træningen i mundtlig præsentation Den er uhyre vigtig for jeres succes ved mundtlig eksamen

2 Defensiv programmering En server er karakteriseret ved, at den er reaktiv og kun handler, når en klient anmoder om det Serveren gør intet på egen hånd To mulige strategier for programmering af servere Vi kan antage, at klienterne ved, hvad de gør, og kun foretager fornuftige og veldefinerede serverkald Vi kan antage, at klienterne indeholder fejl eller med vilje forsøger at udføre illegale serverkald Ovenstående introducerer fire spørgsmål Skal serveren kontrolellere om de parametre, den modtager fra klienterne har rimelige værdier? Hvordan og til hvem rapporterer serveren eventuelle fejl? Hvordan kan en klient forudse/foregribe, at kald til serveren kan fejle? Hvad bør en klient gøre, når et af dens serverkald fejler? Det er ikke kun for klient/server systemer, at defensiv programmering er relevant Kan bruges overalt, hvor metoder/konstruktører kalder hinanden 2

3 AddressBook projektet Lad os betragte et program, der implementerer en adressebog Systemet har tre klasser AddressBookGUI implementerer programmets grafiske brugergrænseflade AddressBook implementerer programmets øvrige funktionalitet. Klassen indeholder metoder til at tilføje, ændre, fjerne og søge i kontaktinformation ContactDetails indeholder kontaktinformationen, der består af navn, telefonnummer og adresse AddressBook gemmer kontaktinformation i en Map, hvor de kan findes ved at bruge enten navnet eller telefonnummeret som nøgle Et AddressBook objekt er et typisk eksempel på en server Objektet gør intet på egen hånd Det handler kun, når en klient (GUI-objektet) anmoder om det 3

4 removedetails metoden i AddressBook Parameterværdien bruges til at finde et sæt ContactDetails, hvis indgange derefter fjernes fra Map'en public void removedetails(string key) { ContactDetails details = book.get(key); book.remove(details.getname()); book.remove(details.getphone()); Find numberofentries--; Fjern Ovenstående giver os et problem Hvis den angivne nøgle ikke er i brug, vil metodekaldet book.get(key) returnere null Det betyder at metodekaldet details.getname() fejler med en NullPointerException Det er ikke nødvendigvis forkert Men det er en farlig fremgangsmåde specielt hvis man ikke selv har kontrol over, hvordan klienterne programmeres 4

5 Kontrol af parameterværdier Servere er særligt sårbare, når deres konstruktører og metoder modtager værdier via deres parametre Hvis man ved, at disse parameterværdier er fornuftige, er der ingen grund til at spilde tid på at teste dem I mange tilfælde har man dog ingen eller kun ringe indflydelse på, hvordan klienter programmeres, og så bør alle parameterværdier tjekkes Derved kan man ofte undgå ulovlige handlinger, såsom at dividere med 0, kalde en metode på en variabel, der har værdien null, eller tilgå et element som ikke eksisterer (i en arrayliste eller et array) Vi har nu "pakket" de fire sætninger ind i en if sætning Hvis nøglen er i brug gøres det samme som før Ellers gør man ingen ting public void removedetails(string key) { if( keyinuse(key) ) { ContactDetails details = book.get(key); book.remove(details.getname()); book.remove(details.getphone()); numberofentries--; 5

6 Rapportering af fejl Hvad bør serveren gøre, hvis den finder en illegal parameter? Serveren kan undlade at udføre det foretagne request Det gjorde vi for removedetails metoden Serveren kan også (sommetider) ændre parameterværdien til noget "fornuftigt" Serveren kan rapportere fejlen til brugeren Serveren kan printe en fejlmeddelelse eller bringe en dialogboks op på skærmen Begge dele har kun effekt, hvis der er en bruger til at se beskeden, og selv da vil de fleste brugere ikke forstå beskeden / vide hvad de skal gøre Hvad vil I gøre, hvis en hæveautomat fortæller jer, at der er en Fejl 5614 eller kaster en NullPointerException? Serveren kan rapportere fejlen til klienten Hvis metoden har returtypen void kan denne ændres til boolean, således at legale requests returnerer true og illegale returnerer false Hvis metoden har en non-void returtype kan man returnere en speciel værdi, der ikke er i brug (f.eks. null, 0, eller en negativ værdi) Serveren kan kaste en exception, som efterfølgende gribes af klienten (i den programkode, der kaldte den fejlende metode) 6

7 Forskellige strategier til at rapportere fejl Brug af exception Det tjekkes om parameterværdien er null Hvis det er tilfældet skabes et exception objekt, og dette kastes ved hjælp af det reserverede ord throw Exception objektets type beskriver fejlen Herudover kan der være en tekststreng med yderligere information om fejlen Brug af returtype If sætningen er ændret til en if-else sætning Returværdien angiver om operationen lykkedes eller ej Returtypen er ændret fra void til boolean public boolean removedetails(string key) { if(key == null){ throw new IllegalArgumentException( "Null key in removedetails"); if( keyinuse(key) ) { ContactDetails details = book.get(key); book.remove(details.getname()); book.remove(details.getphone()); numberofentries--; return true; else { return false; Returtype kontra exception Klienter kan undlade at tjekke returværdien De har sværere ved at ignorere exceptions Derfor er exceptions i mange tilfælde bedst 7

8 Exceptions Exceptions tillader klienter at forsøge at overleve/reparere fejl, som rapporteres fra servere Exceptions kastes af serveren (throw) og gribes af klienten (catch) Det er ikke kun i klient/server systemer, at exceptions er nyttige Nedenstående klassediagram viser det hierarki som exceptions indgår i Alle exceptions er en subtype af Exception klassen Errors er alvorlige fejl, som et program ikke med fornuft kan forsøge at overleve, f.eks. AWTError, IOError, ThreadDeath, VirtualMachineError, osv De fleste exceptions er checked, hvilket betyder at oversætteren tjekker, at de håndteres af den kaldende klient Throwable RuntimeExceptions og dets subklasser er unchecked, hvilket betyder at oversætteren ikke tjekker de håndteres af klienten Alle de exceptions, I har set indtil nu, har været unchecked (ellers skulle I jo have håndteret dem) Error MyCheckedException Exception Checked RuntimeException MyUncheckedException sta us Unchecked 8

9 Unchecked versus checked exceptions Unchecked exceptions bruges i situationer, hvor fejlen bør føre til at programmet stopper Typisk fordi programmøren har lavet en logisk fejl, såsom at dividere med nul, kalde en metode på en variabel, der har værdien null, eller tilgå et element som ikke eksisterer (i en arrayliste eller et array) Sådanne fejl kan undgås hvis programmøren er kompetent og omhyggelig Checked exceptions bruges i situationer, hvor det giver mening, at klienten forsøge at reparere fejlen Checked exceptions bruges bl.a. i forbindelse med input/output Hvis brugeren har angivet et filnavn, som ikke eksisterer, kan man lade brugeren vælge/indtaste et nyt Hvis systemet ikke kan skrive en fil fordi disken er fuld, eller brugeren har manglende permissions, kan man lade brugeren angive et nyt sted at placere filen 9

10 Når en exception kastes Metoden (der kaster en exception) stopper øjeblikkeligt Efter en throw sætningen udfører metoden ikke flere sætninger (statements) public boolean removedetails(string key) { if(key == null){ throw new IllegalArgumentException( "Null key in removedetails"); if( keyinuse(key) ) {... return true; else { return false; Eksemplet fra før Hvis throw sætningen udføres stopper metoden Hvis der kastes en exception returnere metoden ikke et resultat Det protesterer oversætteren ikke over Den vil derimod protestere, hvis der efter throw sætningen indsættes en return sætning, idet denne aldrig vil kunne blive udført 10

11 Kontrol af parameterværdier Unchecked exceptions bruges ofte til at standse programmet, hvis der anvendes en ulovlig parameterværdi Der gøres intet forsøg på at gribe den kastede exception, hvilket betyder at programmet standser I stedet rettes den logiske fejl i programmet, således at der ikke fremover kastes en exception i denne situation Det tjekkes om parameteren er null Det tjekkes om parameteren er den tomme eller en blank streng Hvis alt er ok, bruges nøglen til at hente den ønskede kontaktinformation public ContactDetails getdetails(string key) { if(key == null) { throw new IllegalArgumentException( "Null key in getdetails"); if(key.trim().length() == 0) { throw new IllegalArgumentException( "Empty key in getdetails"); return book.get(key); 11

12 Check af parameterværdier i konstruktør Konstruktører kan også modtage illegale parameterværdier Det tjekkes om en eller flere parameterværdier er null. I så fald sættes de til den tomme streng Feltvariablerne initialiseres Hvis både name og phone er den tomme streng, kastes en exception Her kan exceptions forhindre, at der skabes "sære" objekter public ContactDetails(String name, String phone, String address) { if(name == null) { name = ""; if(phone == null) { phone = ""; if(address == null) { address = ""; this.name = name.trim(); this.phone = phone.trim(); this.address = address.trim(); if(this.name.isempty() && this.phone.isempty() { throw new IllegalStateException( "Either name or phone must be non-empty"); Det giver ikke mening at oprette objektet, idet man ikke har nogen fornuftig nøgle, hvormed det kan tilgås (i Map'en) 12

13 Checked exceptions En metode, der kan kaste en checked exception, skal angive dette i sit hoved ved hjælp af det reserverede ord throws Det er også tilladt at anvende throws for unchecked exceptions men dette anbefales ikke public void savetofile(string filename) throws IOException {... Når man kalder en metode, der kan kaste en checked exception, skal man være parat til at gribe denne Dette gøres ved at placere kaldet i try blokken af en try-catch sætning try blokken indeholder de sætninger, der kan føre til, at der kastes en exception catch blokken indeholder de sætninger, der skal udføres for at reparere situationen, dvs. gribe den kastede exception try { filename =... // Request filename from user addressbook.savetofile(filename); successful = true; catch( IOException e ) { Den exception som kan kastes, og som skal gribes Metodekald, der kan kaste exception System.out.println("Unable to save to " + filename); successful = false; Hvis der kastes en exception, overføres kontrollen fra try-blokken til catch blokken Catch blokken udføres kun, hvis der kastes en exception i try blokken 13

14 Try sætning try-catch sætningen kan indeholde flere catch blokke I så fald søges catch blokkene igennem forfra (som i en switch sætning) Den første catch blok, hvor exception typen matcher, udføres Rækkefølgen af catch blokkene er vigtig Hvis catch blokken med IOException flyttes op foran de to andre, vil disse aldrig kunne udføres (og vi vil få en compile-time fejl) Via variablen e kan man få information om, hvad der gik galt Giver adgang til "detailed message", "stack trace", osv. try-catch sætningen kan også indeholde en finally blok Denne er placeret efter catch blokkene Ting der altid skal udføres uanset om, der kastes en exception eller ej F.eks. lukning af fil, der er åbnet i try blokken try {... object-reference.method(...);... catch (EOFException e) { // Handle end of file exception... catch (FileNotFoundException e) { // Handle file not found exception catch (IOException e) { // Handle other IOExceptions finally { // Any actions common to whether or // not an exception is raised... 14

15 Eksempel på unyttig try sætning Checked exceptions er kun nyttige, hvis programmøren (på kaldsstedet) forsøger at reparere situationen Nedenstående try sætning er ikke nyttig Metodekaldet book.search kaster en exception, hvis det er umuligt at returnere en fornuftig værdi Når dette sker, udskriver den kaldende metode en fejlmeddelelse ContactDetails details = null; try { details = book.search(...); catch(exception e ) { System.out.println("Error " + e); String phone = details.getphone(); Herefter fortsætter man ufortrødent Men details er stadig null Kaldet af getphone giver derfor ikke mening, og vil kaste en NullPointerException 15

16 Eksempel på nyttig try sætning Filnavn fra brugeren Erklæring af to lokale variabler til kontrol af den efterfølgende løkke do-while løkke Forsøg at gemme på en fil Hvis det mislykkes kastes en exception I catch blokken beder man så brugeren specificere et alternativt filnavn Kroppen af do-while løkken udføres, indtil det lykkes at gemme, eller man har forsøgt MAX gange filename =... // Request filename from user // Try to save the address book boolean successful = false; int attempts = 0; do { try contacts.savetofile(filename); successful = true; catch(ioexception e) { System.out.println("Unable to save to " + filename); attempts++; filename =... // Request alternative filename while(!successful && attempts < MAX); if(!successful) { System.out.println("Unable to save file"); Rapportér, hvis man blev nødt til at give op 16

17 Videresendelse af exceptions (propagering) I stedet for at gribe en exception, kan den videresendes til omgivelserne (propagering) Den kaldende metode indeholder så ikke længere en try-catch sætning til at gribe den kastede exception I stedet har den en throws clause i sit hoved Dette indikerer, at den kastede exception videresendes til omgivelserne, dvs. til den metode, der har kaldt metoden med throws clause'n Videresendelse bruges Når en metode er ude af stand til selv at reparere situationen Normalt kun for checked exceptions Når en metode kan kaste en checked exception, tjekker oversætteren, at alle kaldende metoder, enten indeholder en try-catch sætning, der "beskytter" kaldet og specificerer, hvordan en kastet exception gribes, Det hedder en checked exception, eller fordi compileren checker dette throws clause, der videresender den kastede exception til omgivelserne 17

18 Erklæring af nye exception klasser Man kan definere sine egne exception klasser Dette gøres ved at lave en subklasse af en eksisterende exception klasse Hvis klassen er en subklasse af RuntimeException, vil dens exceptions være unchecked, ellers vil de være checked Der er intet nyt i erklæringen af exception klasser Checked exception Feltvariabel Konstruktør Accessor metode tostring metode public class NoMatchingDetailsException extends Exception { private String key; public NoMatchingDetailsException(String key) { this.key = key; public String getkey() { return key; public String tostring() { return "No details matching: " + key + " were found"; Hvis den kastede exception gribes, kan den "dårlige" key, tilgås via getkey metoden Ellers kan den læses i den røde tekst i terminalvinduet, som udskrives ved hjælp tostring metoden 18

19 Assertions Vi har ofte en forventning om at visse betingelser er opfyldt på bestemte steder i vores program Efter udførelsen af removedetails metoden vil vi forvente, at nøglen, der blev anvendt som parameterværdi, ikke længere forekommer i adressebogen størrelsen af adressebogen er konsistent, dvs. at værdien af feltvariablen numberofentries er lig med, antallet af kontaktinformationer public void removedetails(string key) { if(key == null){ throw new IllegalArgumentException( "Null key in removedetails"); if( keyinuse(key) ) { ContactDetails details = book.get(key); book.remove(details.getname()); book.remove(details.getphone()); numberofentries--; assert!keyinuse(key); assert consistentsize() : "Inconsistent book size in removedetails"; Dette tjekkes ved hjælp af to assertions indeholdende det reserverede ord assert et boolske udtryk en (optional) tekststreng som beskriver, hvad der gik galt Hvis det boolske udtryk evaluerer til false stopper programudførelsen med en AssertionError 19

20 Metoderne keyinuse and consistentsize I eksemplet på foregående side bestod de to boolske udtryk af to metodekald metoder Den første metode er simpel Bruger containskey metoden fra Map interfacet private boolean keyinuse(string key) { return book.containskey(key); Den anden metode er lidt mere kompleks Lokal variabel, der initialiseres til at indeholde alle værdierne fra AddressBook Værdierne kopieres over i en mænge (Set), hvorved dubletter elimineres private boolean consistentsize() { Collection<ContactDetails> allentries = book.values(); Set<ContactDetails> uniqueentries = new HashSet<>(allEntries); return numberofentries == uniqueentries.size(); Tjek at størrelsen at numberofentries er identisk med antal elementer i mængden Bemærk, at vi i de to erklæringer bruger Collection< > og Set< > i stedet for at angive den præcise implementering via f.eks. ArrayList< > og HashSet< > 20

21 Brug af assertions En assertion sætning opfylder to formål Den beskriver en betingelse, som vi forventer er opfyldt på det sted, hvor assertion sætningen er indsat en sådan betingelse kaldes en invariant og gør vores kode mere læselig og lettere at forstå Under programudførelsen kan det tjekkes, at betingelsen virkelig er opfyldt, og hvis dette ikke er tilfældet kastes en AssertionError (subklasse af Error) Assertions kan let slås til og fra de vil typisk være slået til mens programmet udvikles og testes fra når programmet anvendes af brugere (produktionsmode) BlueJ's testfaciliteter bruger assertions Metoderne assertequals, asserttrue og assertfalse, som I har brugt i forbindelse med jeres testmetoder, er implementeret ved hjælp af en assert sætning De rejste AssertionErrors kan inspiceres i BlueJ's testvindue 21

22 Fil-baseret input/output Hvordan læser og skriver man en fil? Område, hvor der let kan ske fejl, som er helt uden for programmørens kontrol (forkert filnavn, disk fuld, manglende permission, netværksfejl, osv.) Sådanne fejl håndteres ved hjælp af checked exceptions Java's oprindelige support for i/o findes i pakken java.io Denne indeholder en lang række subklasser, som supporter input/output operationer Herudover definerer den IOException, som er en checked exception IOException her mere end 30 subklasser heriblandt FileNotFoundException and EOFException (EOF end of file) Senere versioner af Java API'en har introduceret pakken java.nio Java.nio har en række tilhørende pakker såsom java.nio.file og java.nio.charset Klasserne i nio pakkerne erstatter delvis klasserne i java.io pakken (på samme måde som Swing delvist erstatter AWT) 22

23 Files og streams Input/output opdeles i Tekstfiler Indeholder tegn-baseret information i en form, som kan læses og forstås af mennesker f.eks. html filer, programfiler og dokumentationsfiler Svarer til char og String typerne Håndteres ved hjælp af readers og writers såsom FileReader, BufferedReader og FileWriter Streams Indeholder binær information såsom billeder eller eksekverbare programmer Svarer til byte typen Streams håndteres ved hjælp af stream handlers Bemærk at disse streams intet har med de streams at gøre, som I kender fra funktionel programmering 23

24 File klassen og Path interfacet En fil er ikke blot et navn og noget indhold Filer ligger i foldere (directories) De indeholder information om størrelse, hvem der ejer dem, hvem der kan tilgå/ændre i dem, hvornår de blev skabt og sidst er ændret, om de er skjulte (hidden), osv. java.io pakken indeholder File klassen, som har en lang række metoder til at understøtte ovenstående Et File objekt indeholder information om en fils egenskaber (men indeholder ikke filens indhold) Ved hjælp af et File objekt kan man f.eks. undersøge, om en fil eksisterer, og på den måde undgå at fremprovokere en FileNotFoundException Tilsvarende indeholder java.nio.file pakken interfacet Path og Files klassen (som er mere moderne) 24

25 File output består af tre skridt Åben filen Løkke hvori man skriver data Luk filen Håndtering af fejl try { FileWriter writer = new FileWriter(file name); while(there is more text to write) {... writer.write(next piece of text);... writer.close(); catch(ioexception e) { something went wrong with accessing the file; Alle tre skridt kan fejle af forskellige grunde Mange af disse er fuldstændig udenfor programmørens kontrol (såsom en disk, der er fuld eller ødelagt eller et ugyldig filnavn opgivet af brugeren) Fejl håndteres ved hjælp af IOException (og dens subklasser) Læs detaljer i BlueJ bogen (de egner sig ikke til en forelæsning) 25

26 File input består af de samme tre skridt Nu beskrevet i lidt større detaljer med brug af faciliteter fra nio Åben filen Karaktersæt Filens sti (navn + placering i folder hierarkiet) Løkke hvori man læser data Håndter fejl Charset charset = Charset.forName("US-ASCII"); Path path = Paths.get(file name); try( BufferedReader reader = Files.newBufferedReader(path, charset)) { String line = reader.readline(); while( line!= null ) { do something with line line = reader.readline(); catch(filenotfoundexception e) { deal with the exception catch(ioexception e) { deal with the exception Filen åbnes ved hjælp af en klassemetode i Files klassen Ved at placere åbningen i en parentes efter nøgleordet try, sikrer man, at filen automatisk lukkes efter læsningen (så det behøver vi ikke selv at gøre) Alle tre skridt kan fejle af forskellige grunde Mange af disse er fuldstændig udenfor programmørens kontrol Fejl håndteres ved hjælp af IOException (og dens subklasser) Læs detaljer i BlueJ bogen (de egner sig ikke til en forelæsning) 26

27 Files klassen (java.nio) og Scanner klassen (java.util) Files klassen indeholder klassemetoden lines Ved at bruge den kan man helt undgå at bruge klassen BufferedReader Den tager en parameter af typen Path og returnerer en Stream<String> (som kendt fra afsnittet om funktionel programmering) Stream<String> mystream = Files.lines(path); Den skabte stream kan behandles via funktionel programmering eller konverteres til et array eller en arrayliste Scanner klassen indeholder metoder til at opbryde teksten fra en fil i delkomponenter F.eks. returnerer nextint et heltal ved at læse de næste tegn på filen Ved at kalde hasnextint før kaldet af nextint, kan man undgå, at der kastes en exception, hvis de næste tegn ikke er et heltal Der er analoge metoder for de andre typer, f.eks. nextline, nextdouble, nextboolean nextbyte, hasnextline, hasnextdouble, hasnextboolean og hasnextbyte 27

28 System klassen System klassen indeholder tre klassevariabler in af typen InputStream standard input stream out af type PrintStream standard output stream err af type PrintStream standard error output stream I BlueJ er alle tre knyttet til terminalvinduet Input via System.in Output via System.out Errors via System.err I kan skrive i denne del af terminalvinduet via System.err.println(" ") Welcome to the DodgySoft Technical Support System. Please tell us about your problem. We will assist you with any problem you might have. Please type 'bye' to exit our system. > My web browser crashes each morning Well, it never crashes on our system. It must have something to do with your system. Tell me more about your configuration. > Windows 7 This is a known bug to do with the Windows operating system. Please report it to Microsoft. There is nothing we can do about this. > Errors written to System.err is shown here 28

29 Afleveringsopgave: Computerspil 4 I den fjerde delaflevering skal I bruge nogle af de ting, som I har lært om grafiske brugergrænseflader Først skal I tilføje to ekstra knapper til panelet nederst i vindue Dernæst skal I udvide Options dialogboksen, med nogle ekstra valg I begge tilfælde kan I se, hvordan koden for de eksisterende knapper/ valg ser ud, og derefter kopiere denne med oplagte småændringer 29

30 Computerspil 4 (fortsat) Til sidst skal I tilføje en menubar samt nogle tastaturgenveje Menubar Tastaturgenveje Hierarkisk menu, hvor en menuindgang selv er en menu Log menuen er simpel Indeholder indgangene Play log og Save log For Slow, Medium, Fast og Sonic skal man skrive CTRL i stedet for CTRL_SHIFT For menuindgangen New game kan koden se ud som følger Skab menuindgang og tilføj den til Game menuen Tilføj tastaturgenvej via metode i JMenuItem Håndtering af events JMenuItem newgameitem = new JMenuItem("New game"); gamemenu.add(newgameitem); newgameitem.setaccelerator(keystroke.getkeystroke( KeyEvent.VK_N, CTRL_SHIFT )); newgameitem.addactionlistener( e -> newgamebutton.doclick()); Når der modtages et event, skal der ske det samme, som når brugeren trykker på New game knappen (doclick er en metode i AbstractButton) 30

31 StringBuilder klassen (fra java.lang) Eventuelle fejl skal rapporteres til brugeren via en dialogboks Her kan det være nyttigt at bruge StringBuilder klassen Lad os, som et eksempel, lave en tostring metoden for Post klassen Lokal variabel af type StringBuilder Tilføj de ønskede strenge ved hjælp af append metoden i StringBuilder Returnér den opbyggede streng ved hjælp af tostring metoden i StringBuilder public String tostring() { StringBuilder builder = new StringBuilder(); builder.append(username); builder.append(timestring( timestamp )); if( likes > 0) { builder.append(likes + "" people like like this."); Linjeskift else { For komplekse strenge giver builder.append('\n'); ); StringBuilder mere læselig kode end brug af + operatoren if( comments.isempty()) { builder.append("no comments."); else { builder.append(comments.size() + " comment(s)."); return builder.tostring(); 31

32 Opsummering Defensiv programmering Servere bør tjekke de modtagne parameterværdier, således at de kan undgå at udføre ulovlige handlinger Exceptions Sprogkonstruktion til rapportering af fejl En kaldt metode kan kaste en exception, som så efterfølgende kan gribes på det sted hvor metoden blev kaldt Assertions Sprogkonstruktion til beskrivelse af betingelser, som man forventer vil være opfyldt på bestemte steder i programmet (invarianter) Betingelserne kan testes under programudførelsen Fil-baseret input/output Område, hvor der let kan ske fejl (forkert filnavn, disk full, no permission, osv.) Sådanne fejl håndteres elegant ved hjælp af exceptions Afleveringsopgave: Computerspil 4 Modifikation af den grafiske brugergrænseflade Husk træningen i mundtlig præsentation Den er uhyre vigtig for jeres succes ved mundtlig eksamen Nu kan I med stor fordel se den sidste video, der handler om grafiske brugergrænseflader 32

33 Det var alt for nu.. spørgsmål 33

Forelæsning Uge 14 Mandag

Forelæsning Uge 14 Mandag Forelæsning Uge 14 Mandag Defensiv programmering Metoder og konstruktører bør tjekke de parameterværdier, som de kaldes med Derved kan man ofte undgå ulovlige handlinger, såsom at dividere med nul eller

Læs mere

Forelæsning Uge 14 Mandag

Forelæsning Uge 14 Mandag Forelæsning Uge 14 Mandag Defensiv programmering Metoder og konstruktører bør tjekke de parameterværdier, som de kaldes med Derved kan man ofte undgå ulovlige handlinger, såsom at dividere med nul eller

Læs mere

Forelæsning Uge 4 Torsdag

Forelæ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 mere

Forelæsning Uge 10 Torsdag

Forelæsning Uge 10 Torsdag Forelæsning Uge 10 Torsdag Opremsningstyper Enumerated types Forskellige teknikker til test og debugging Når man tester undersøger man, om opførslen (semantikken) er den ønskede Når man debugger (afluser),

Læs mere

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

//Udskriver System.out.println(Hej  + ditfornavn +   + ditefternavn + .); System.out.println(Du er  + dinalder +  aar gammel! Denne guide er oprindeligt udgivet på Eksperten.dk Brugerinput i Java Denne her artikel gennemgår diverse ting ved brug af brugerinput i Java. Den starter med det simple og fortæller derefter skridt for

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

Forelæsning Uge 4 Mandag

Forelæ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 mere

Ugeseddel 4 1. marts - 8. marts

Ugeseddel 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 mere

Forelæsning Uge 2 Torsdag

Forelæ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 mere

Forelæsning Uge 4 Torsdag

Forelæ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 mere

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag Forelæsning Uge 2 Torsdag Java syntax og style guide Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Brug

Læs mere

Forelæsning Uge 2 Torsdag

Forelæ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 mere

Forelæsning Uge 5 Mandag

Forelæ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 mere

COMPUTERSPIL 1. Opgave 1. Opgave 2

COMPUTERSPIL 1. Opgave 1. Opgave 2 COMPUTERSPIL 1 I løbet af de kommende fem uger skal I programmere et computerspil, hvor spillerne rejser rundt mellem byer i forskellige lande og indsamler point. Der er en delaflevering hver uge, hvor

Læs mere

Serialization i Java

Serialization i Java Serialization i Java Tutorial lavet af Jákup W. Hansen TSU 2006 1.semester 06.novemter 2006 Hvad er Serialization? I vores tekstbog Objects First with Java bliver denne del af Java ikke gennemgået. Men

Læs mere

Forelæsning Uge 2 Torsdag

Forelæ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 mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3 DM502 Forelæsning 3 Indlæsning fra tastatur Udskrift til skærm Repetition Beregning af middelværdi Gentagelse med stop-betingelse (while) Heltalsdivision Division med nul Type-casting ( (double) ) Betinget

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel på brug af ArrayList

Læs mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgaver

Læs mere

DM507 Algoritmer og datastrukturer

DM507 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

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007 JSP, Tomcat Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 10.october 2007 Hvad er JSP(Java Server Pages): Det er en teknik som er bygget ovenover Servlets teknikken, men fidusen er at det skal

Læs mere

Forelæsning Uge 12 Torsdag

Forelæsning Uge 12 Torsdag Forelæsning Uge 12 Torsdag Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser (objekter) af En abstrakt klasse

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

Læs mere

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag Forelæsning Uge 4 Torsdag Klassevariabler og klassemetoder Levetid for variabler og parametre Virkefeltsregler Projektopgave Kaninjagt Lommeregner (for MAT studerende) Klassevariabler og klassemetoder

Læs mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList klassen Gør det let at lave en objektsamling (collection) med et variabelt antal elementer Der er mange andre slags objektsamlinger (se Collection interfacet i JavaDoc)

Læs mere

Forelæsning Uge 12 Mandag

Forelæsning Uge 12 Mandag Forelæsning Uge 12 Mandag Protected access Alternativ til public og private Abstrakte klasser og interfaces En abstrakt klasse er en klasse, som man ikke kan lave instanser (objekter) af En abstrakt klasse

Læs mere

DM507 Algoritmer og datastrukturer

DM507 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 mere

Forelæsning Uge 4 Mandag

Forelæ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 mere

Servlets, Tomcat & BlueJ

Servlets, Tomcat & BlueJ Servlets, Tomcat & BlueJ Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 05.october 2007 Hvad er Servlets: For at forstå det, må vi først få styr på to begreber, nemlig statiske og dynamiske hjemmesider

Læs mere

DM507 Algoritmer og datastrukturer

DM507 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 mere

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag Forelæsning Uge 3 Mandag ArrayList Collection (samling af objekter) med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet i JavaDoc) MusicOrganizer projektet Eksempel

Læs mere

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner Forelæsning 4.1 Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner finden findalle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Afleveringsopgave

Læs mere

dmasark Aflevering - Uge 50

dmasark Aflevering - Uge 50 dmasark Aflevering - Uge 50 Michael Lind Mortensen, 20071202, DAT4 Michael Dahl, 20073943, DAT4 Katalog: http://www.daimi.au.dk/ u073943/dmasark/uge6/ 13. december 2007 Indhold 1 PingClient implementation

Læs mere

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11 DM503 Forelæsning 11 Generics Pakker Exceptions Indhold Generics Nedarvning og Generics Generics Nedarvning og Generics Husk Box fra sidst Generics public class Box {! private T object;! public void

Læs mere

COMPUTERSPIL 1. Opgave 1

COMPUTERSPIL 1. Opgave 1 COMPUTERSPIL 1 I løbet af de kommende fem uger skal I programmere et computerspil, hvor spillerne rejser rundt mellem byer i forskellige lande og indsamler point. Der er en delaflevering hver uge, hvor

Læs mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Sortering ved hjælp af klassen Collections Ved hjælp af interfacet Comparable Ved hjælp af interfacet Comparator findbest som sorteringsproblem Information om køreprøven i uge

Læs mere

DM507 Algoritmer og datastrukturer

DM507 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 mere

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller

I profil-feltet kan imastra-kunder vælge om upload skal ske ligesom filerne var indsendt til mailboksen eller Upload fil Upload fil skal ses som et alternativ til at indsende tællefiler vedhæftet til mails Upload fil kan være en hurtigere og mere håndholdt måde at få data ind i Mastra på. Man starter med via Gennemse

Læs mere

DM507 Algoritmer og datastrukturer

DM507 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 mere

DRONNINGER (QUEENS) Opgave 1

DRONNINGER (QUEENS) Opgave 1 DRONNINGER (QUEENS) I denne opgave vil vi beskæftige os med det såkaldte 8-dronningeproblem, hvor man skal placerede 8 dronninger på et 8 x 8 skakbræt, således at ingen af dronningerne kan slå hinanden.

Læs mere

SWC eksamens-spørgsmål. Oversigt

SWC eksamens-spørgsmål. Oversigt SWC eksamens-spørgsmål Oversigt #1 Typer og variable #2 Aritmetik og logik #3 Klasser (definition, objekter) #4 Klasser (metoder) #5 Klasser (nedarvning, polymorfi) #6 Conditional statements #7 Repetition

Læs mere

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing

Kursusgang 11. Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Kursusgang 11 Oversigt: Sidste kursusgang Værktøjer til udvikling og implementering af HCI-design Oversigt over Java Swing Design af brugerflader 11.1 Samme sted Forskellige steder Sidste kursusgang Samtidigt

Læs mere

Software Construction 1 semester (SWC) Spørgsmål 1

Software 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 mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

Forelæsning Uge 6 Mandag

Forelæ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 mere

Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Design 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 mere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen. Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering (bl.a. brug af for-løkker) Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt)

Læs mere

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Kursus 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 mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Sortering ved hjælp af klassen Collections Ved hjælp af interfacet Comparable Ved hjælp af interfacet Comparator findbest som sorteringsproblem Information om køreprøven i uge

Læs mere

Bemærk, der er tale om ældre versioner af softwaren, men fremgangsmåden er uændret.

Bemærk, der er tale om ældre versioner af softwaren, men fremgangsmåden er uændret. Check dine svar på: https://dtu.codejudge.net/02101-e18/ Exercise 1: Installer Eclipse og Java. Dette kan f.eks. gøres ved at følge instuktionerne i dokumentet eclipse intro.pdf som ligger under Fildeling

Læs mere

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00 Page 1/12 Aarhus Universitet, Science and Technology, Computer Science Exam Wednesday 27 June 2018, 9:00-11:00 Allowed aid: None The exam questions are answered on the problem statement that is handed

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 6 Komponenter (og lidt Swing og MVC) Læsning: VP 4, evt. VP 6 Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html Grafiske komponenter

Læs mere

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Studiepraktik. 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 mere

Forelæsning Uge 5 Mandag

Forelæsning Uge 5 Mandag Forelæsning Uge 5 Mandag Sortering ved hjælp af klassen Collections Ved hjælp af interfacet Comparable Ved hjælp af interfacet Comparator findbest som sorteringsproblem Køreprøven i uge 7 Form Forberedelse

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig 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 mere

Forelæsning Uge 11 Mandag

Forelæsning Uge 11 Mandag Forelæsning Uge 11 Mandag Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder

Læs mere

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne. Exercise 1: Opgave 9.1 på CodeJudge. a) Lav klasserne Cirkel, Rektangel og Kvadrat, som implementerer vedhæftede interface From.java (se CodeJudge). Lav Rektangel før du laver Kvadrat. Kan du bruge nedarvning

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2 DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld

Læs mere

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 dintprog Manual Revision: 1241 August 24, 2010 Indhold I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering 4 III Sprogkonstruktioner 5 4 Klasser

Læs mere

Exceptions i Delphi. Try except

Exceptions 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 mere

Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Design 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 mere

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999 sammenligninger, hvor Programmering 1999 Forelæsning 17, tirsdag 2 november 1999 Søgning efter en given værdi i en tabel Lineær søgning og binær søgning Effektivitet: maskinuafhængig vurdering af køretid

Læs mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Arrays Kan "opbevare" et antal objekter (som ArrayList) Fast (på forhånd kendt) antal elementer Afleveringsopgave:

Læs mere

DM507 Algoritmer og datastrukturer

DM507 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 mere

Klasser og objekter. (Afsnit i manualen)

Klasser 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 mere

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag Forelæsning Uge 2 Mandag Objekters tilstand og opførsel BlueJ og Greenfoot Java Skabelse af objekter (via new-operatoren) Iteration (gentagelser) og parametrisering Forskellige slags variabler Afleveringsopgave:

Læs mere

Introduktion til ActionScript, fortsat

Introduktion til ActionScript, fortsat Introduktion til ActionScript, fortsat Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling

Læs mere

Programmering for begyndere Lektion 2. Opsamling mm

Programmering for begyndere Lektion 2. Opsamling mm Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig 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 mere

Undtagelseshåndtering i C#

Undtagelseshåndtering i C# Denne guide er oprindeligt udgivet på Eksperten.dk Undtagelseshåndtering i C# I modsætning til C++ kan man i C# ikke skrive et program uden undtagelseshåndtering, så derfor har jeg skrevet denne guide

Læs mere

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4 DM502 Forelæsning 4 Flere kontrolstrukturer for-løkke switch-case Metoder Indhold Arrays og sortering af arrays String-funktioner for-løkke Ofte har man brug for at udføre det samme kode, for en sekvens

Læs mere

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7

DM01 DM01. 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 13/5-2003. Side 1 af 7 DM01 DM01 4. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 13/5-2003 Side 1 af 7 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DNA2:...4 2.1.1 METODER:...4

Læs mere

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil

Forelæsning Uge 11. Nedarvning. Object klassen. Projektopgave om computerspil Forelæsning Uge 11 Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder en

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

Adobe Acrobat Connect brugergrænsefladen

Adobe Acrobat Connect brugergrænsefladen Adobe Acrobat Connect brugergrænsefladen Adobe Connect er et webbaseret videokonferenceværktøj, der giver mulighed for online, synkron kommunikation, deling af filer, skærm og whiteboard, gennemførelse

Læs mere

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

Programmeringscamp. Implementer funktionerne én for én og test hele tiden. Programmeringscamp De to opgaver træner begge i at lave moduler som tilbyder services der kan bruges af andre, samt i at implementere services efter en abstrakt forskrift. Opgave 1 beder jer om at implementere

Læs mere

Eksempel: Skat i år 2000

Eksempel: 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 mere

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag Forelæsning Uge 3 Torsdag Billedredigering Gråtonebilleder (som er lidt simplere end farvebilleder) Rekursive metoder Metoder der kalder sig selv Giver ofte meget elegante og simple løsninger på komplekse

Læs mere

Lær Python dag 1 - modul 1

Læ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 mere

Skriftlig eksamen i Datalogi

Skriftlig eksamen i Datalogi Roskilde Universitetscenter Skriftlig eksamen i Datalogi Modul 1 Vinter 1998/99 Opgavesættet består af 5 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 16% Opgave 2 12% Opgave 3 10% Opgave

Læs mere

Introduktion til ActionScript

Introduktion til ActionScript Introduktion til ActionScript Kaspar Rosengreen Nielsen kaspar@interactivespaces.net i n t e r a c t i v e s p a c e s. n e t Kaspar Nielsen, kaspar@interactivespaces.net 1 Dagens program Opsamling på

Læs mere

Forelæsning Uge 11 Torsdag

Forelæsning Uge 11 Torsdag Forelæsning Uge 11 Torsdag Nedarvning En klasse kan være en subklasse af en anden Det betyder at subklassen arver superklassens feltvariabler og metoder Object klassen Superklasse for alle klasser Indeholder

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig 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 mere

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Funktionel programmering i Java (Kapitel 5) Forskellen på imperative og funktionelle programmeringssprog Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams

Læs mere

Python programmering. Per Tøfting. MacFest

Python programmering. Per Tøfting. MacFest Python programmering MacFest 2005 Per Tøfting http://pertoefting.dk/macfest/ Indhold Måder at afvikle Python program på Variabler Data typer Tal Sekvenser Strenge Tupler Lister Dictionaries Kontrolstrukturer

Læs mere

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

class 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 mere

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

Lær Python - Dag 3, modul 1 Læse og skrive filer

Lær Python - Dag 3, modul 1 Læse og skrive filer Lær Python - Dag 3, modul 1 Læse og skrive filer Simon J. Larsen 15. oktober 2017 Institut for Matematik og Datalogi Læse og skrive filer Persistens Vi har ofte brug for at gemme data på disken som ikke

Læs mere

Forelæsning Uge 10. Opremsningstyper. Forskellige teknikker til test og debugging. Afleveringsopgave: Debugging + Test.

Forelæsning Uge 10. Opremsningstyper. Forskellige teknikker til test og debugging. Afleveringsopgave: Debugging + Test. Forelæsning Uge 10 Opremsningstyper Enumerated types Forskellige teknikker til test og debugging Når man tester undersøger man, om opførslen (semantikken) er den ønskede Når man debugger (afluser), forsøger

Læs mere

WINDOWS FORMS EVENTS INTERAGEREN MED FIL SYSTEMET. Grundlæggende programmering Lektion 9

WINDOWS FORMS EVENTS INTERAGEREN MED FIL SYSTEMET. Grundlæggende programmering Lektion 9 EVENTS INTERAGEREN MED FIL SYSTEMET WINDOWS FORMS Grundlæggende programmering Lektion 9 1 EVENTS Der sker ting når der sker ting 2 EVENTS Events er brugerhandlinger såsom tastetryk, klik, musebevægelser,

Læs mere

Abstrakte datatyper C#-version

Abstrakte 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 mere

Netværk & elektronik

Netværk & elektronik Netværk & elektronik Oversigt Ethernet og IP teori Montering af Siteplayer modul Siteplayer teori Siteplayer forbindelse HTML Router (port forwarding!) Projekter Lkaa Mercantec 2009 1 Ethernet På Mars

Læs mere

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

AAU, 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 mere

Forelæsning Uge 1 Torsdag

Forelæ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 mere

Programmering I Java/C#

Programmering I Java/C# Programmering I Java/C# Dit første projekt Datatekniker Intro to C# C# (C Sharp) Et enkelt, moderne, generelt anvendeligt, objektorienteret programmeringssprog Udviklet af Microsoft, ledet af danskeren

Læs mere