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

Størrelse: px
Starte visningen fra side:

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

Transkript

1 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 (Classes) Type Feltvariabel (Fieldvariable, Attribut, Attribute) Metoder (methods) Metodesignatur Accessor Mutator Konstruktør (constructor) Sætninger (statements) Simple sætninger Tildeling (assignment) Metodekald Sammensatte sætninger Sekvens Selektion Rev: 1241, August 24, manual.tex

2 6.2.3 Iteration Blok IV Javas klassebibliotek 15 7 Collection Basale konstruktioner Erklæring og initialisering Tilgængelige metoder Gennemløb af collection Realisering af en-til-mange Algoritme-mønstre: find-en og find-alle Find-en Find-alle Comparable og Comparator Comparable Comparator Opsummering Collections klassen 22 2

3 Del I Introduktion Denne manual indeholder de vigtigste elementer af kurset Introduktion til Programmering ved Datalogisk Institut, Aarhus Universitet. Manualen er under revidering og vil blive udfyldt løbende som kurset skrider frem. Manualen er ment som et opslagsværk der skal give let adgang til de vigtigste elementer i kurset som f.eks. definitioner af begreber, beskrivelse af syntax og lignende. Manualen kan således under og efter kurset bruges som et opslagværk i programmeringsarbejdet. Den nyeste version af manualen er tilgængelig på: 1 Notation I dokumentet bruges kodestumper til at vise generelle former af konstruktioner og til at give eksempler. Kode der står med maskinskrift kan skrives direkte i Java-programmerne, hvorimod kursiv skrift skal erstattes med noget konkret. I nedenstående notationseksempel skal Klassenavn for eksempel erstattes med navnet på den klasse man gerne vil skrive. 1 public class Klassenavn{ } Listing 1: Notationseksempel 3

4 Del II Begreber I dette afsnit beskrives og relateres vigtige begreber fra kurset. 2 Grundbegreber om programmering Program Et sæt instruktioner. Genererer ofte output. Programmeringssprog Dét sprog i hvilket programmet udtrykkes. Programmør Personen som designer/implementerer/skriver programmet. Processor Den komponent (hardware eller software) der udfører instruktionerne i programmet. Hardware Ordet har mange betydninger, men med hardware menes oftest et stykke udstyr (oftest elektronik) som kan stille én eller flere slags funktionalitet til rådighed for programmet under udførelse. Data Dét input programmet tager samt det output der genereres. En indkøbsseddel kan ses som et program: Programøren er forfatteren af sedlen, programmeringssproget er det danske sprog, processoren er personen der handler ind, hardwaren er indkøbskurven og dataen er varerne. 3 Grundbegreber om modellering Begreb En idé som kan bruges til at udtrykke fælles karakteristika for separate objekter, dvs. en idé om hvordan en bestemt ting bør/kan opføre sig. Fænomen En enkelt instans af et begreb, dvs. én specifik ting som falder under et begrebs paraply. Fænomener tager deres egenskaber fra begreber. I objektorienteret programmering udtrykkes begreber som klasser og fænomener som objekter. Objekter har samme forhold til klasser som fænomener har til begreber. Begreb Fænomener Studerende Rasmus, Stine, Søren,... Fag dintprog, Perspektiverende datalogi, Calculus,... Prøveresultat bestået, ikke bestået, udeblevet,... 4

5 Del III Sprogkonstruktioner 4 Klasser (Classes) Overordnet består en klasse af tilstand og opførsel. Tilstand kan beskrive som et objekts hukommelse og et objekts opførsel er hvad det kan. Tilstand realiseres vha. feltvariabler (jf. 4.2) og opførsel realiseres med metoder (jf. 5). 4.1 Type Beskriver hvad for en kategori den efterfølgende variabel hører til. Defineres for variabler, retur-værdier, parametre, etc. 1 String 2 int 3 Person 4 double Listing 2: på typer 4.2 Feltvariabel (Fieldvariable, Attribut, Attribute) Et objekts tilstand udgøres af feltvariablerne. Disse erklæres på klasseniveau (og altså ikke inde i metoder), og bruges af objektet til at gemme data specifikt for objektet. Herunder kan du se en række eksempler på erklæringer af feltvariabler. 1 private String name; 2 private int age; 3 private double angle; Listing 3: på feltvariabler Den generelle form på en fejlvariabelerklæring er som i linje 3 herunder. Husk altid at erklære en feltvariabel private. 1 public class Klasse { 2 3 private type variabelnavn; 4 5 metoder 5

6 6 } Listing 4: Den generelle form på en feltvariabelerklæring 5 Metoder (methods) En metode repræsenterer et objekts opførsel. Det er altså metoderne der sørger for, at vi kan gøre noget og interagere med et objekt. En metode kan være en accessor (jf. 5.2), en mutator (jf. 5.3) eller en konstruktør (jf. 5.4). En metode består af: En metodesignatur (jf. 5.1) En metodekrop som indkapsler metodens funktionalitet. Kroppen består af en række sætninger (jf. 6) mellem to krølleparenteser {}. Den generelle form på en metodeerklæring ses i linje 2 4: 1 public class Klasse { 2 metodesignatur { 3 sætninger 4 } 5 } Listing 5: Den generelle form på en metodeerklæring 1 public void setname(string n) 2 { 3 name = n; 4 } 5 6 public void birthday() 7 { 8 age = age + 1; 9 System.out.println("Happy Birthday!"); 10 } public int getage() 13 { 14 return age; 15 } Listing 6: på metoder 6

7 5.1 Metodesignatur Den første linje i metoden, der navngiver metoden og beskriver (på et meget basalt niveau) hvordan den benyttes. En Overskrift for metoden. Konkret består en metodesignatur af (i nævnte rækkefølge): En access modifier der beskriver fra hvilke klasser der er adgang til metoden. Er metoden public kan den tilgås fra alle klasser og hvis den er private kan den kun tilgås fra den klasse den er erklæret i. En returtype (hvis ikke metoden er en konstruktør). Der beskriver typen (jf. 4.1) af de værdier (om nogen) metoden giver som svar Et metodenavn der bruges når man skal kalde metoden (skal begynde med et lille bogstav medmindre metoden er en konstruktør) (jf ) En start-parentes Et antal parametre, erklæret med type, der beskriver hvad man skal sende med hvis vil kalde metoden en slut-parentes Den generelle form er altså: 1 access modifier returtype metodenavn ( parameter 1, parameter 2,... ) Listing 7: Metodesignaturers generelle form 1 public void settonextdate() 2 public void adddays(int d) 3 public String tostring() Listing 8: på metodesignaturer 5.2 Accessor En metode der bruges til at spørge til et objekts tilstand. Har aldrig void som retur type. Metoden må ikke ændre på objektets tilstand. 7

8 1 public int getage() 2 { 3 return age; 4 } 5 6 public String getname() 7 { 8 return name; 9 } Listing 9: på acessors 5.3 Mutator En metode der bruges til at ændre et objekts tilstand. Har oftest void som retur type. 1 public void setage(int a) { 2 age = a; 3 } 4 5 public void setname(string n) { 6 name = n; 7 } Listing 10: på mutators 5.4 Konstruktør (constructor) En metode der bruges til at gøre et objekt klar til brug ved at sætte værdierne for feltvariablerne og lign. Navnet på en konstruktør-metode er det samme som navnet på klassen, og konstruktør-metoder har ingen retur type (heller ikke void). Den generelle form ses i linje 2 4: 1 public class Klassenavn{ 2 public Klassenavn( parameter 1, parameter 2,...){ 3 statements 4 } 5 } Listing 11: Konstruktørers generelle form 8

9 1 public class Person 2 { 3 private String name; 4 private int age; 5 6 /** 7 * Constructor for class Person. 8 * Creates a Person with name n and age a. 9 */ 10 public Person(String n, int a) 11 { 12 name = n; 13 age = a; 14 } /** 17 * Constructor for class Person. 18 * Creates a newborn Person with name n. 19 */ 20 public Person(String n) 21 { 22 name = n; 23 age = 0; 24 } 25 } Listing 12: To kontruktører til klassen Person 6 Sætninger (statements) Typisk vil kroppen af en metode bestå af en række sætninger som enten kan være simple (jf. 6.1) eller sammensatte (jf. 6.2). 6.1 Simple sætninger Simple sætninger kendetegnes ved at de typisk udgør en linje i en metode og at denne linje afsluttes af et semi-kolon (;). Man kan godt skrive mere end én simpel sætning per linje (f.eks. x = 42; y = 9;), men koden bliver næsten altid lettere at gennemskue hvis hver simpel sætning står på en linje for sig Tildeling (assignment) En tildeling sætter værdien på en variabel. Den generelle form af en assignment (tildeling) kan ses i listing 13. Når en assignment udføres, udregnes først udtrykket på højre side og dernæst gemmes resultatet i variablen på venstre side. 9

10 1 variabel = udtryk; Listing 13: Assignment 1 age = 29; 2 name = "Peter"; 3 k = Greenfoot.getRandomNumber(20) + 1; Listing 14: på assignments Metodekald Som beskrevet i afsnit 5, er en metode en måde at indpakke noget funktionalitet opførsel. For at bruge denne funktionalitet, skal man lave et metodekald. Hvis metodekaldet er i samme klasse som den metode man vil kalde er defineret, kan man nøjes med et internt metodekald - hvis ikke skal man bruge et eksternt metodekald. Den generelle form på et internt metodekald er: 1 metode(argumenter); Listing 15: Internt metodekald metode er metodens navn og argumenter er de argumenter som metoden tager. Den generelle form på et eksternt metodekald er: 1 objekt-reference.metode(argumenter); Listing 16: Eksternt metodekald Når man laver et eksternt metodekald, har man også brug for en objekt-reference der specificerer hvilket objekt metoden skal kaldes på. 1 w.eatleaf(); 2 c.moveto(200, 300); 3 eatlead(); Listing 17: på metodekald 6.2 Sammensatte sætninger Sammensatte sætninger kendetegnes ved, at de består af flere sætninger sat sammen. Basalt set findes der fire typer sammensatte sætnigner, sekvens, selektion, itetation og blok, som hver beskrives herunder. 10

11 6.2.1 Sekvens Er en række sætninger efter hinanden som udfører en eller anden form for process. Givet to sætninger A og B (simple eller sammensatte) er den generelle form: 1 A 2 B Listing 18: Sekvens I listing 19, er linje 2 3 et eksempel på en sekvens af sætninger. Ligeledes er for-løkken i linje 1 4 og linje 5 to sammenstillede sætninger (hvoraf den ene er sammensat). 1 for(int i=0;i<10;i++){ 2 move(i*10); 3 turn(i*90); 4 } 5 System.out.println("Done!") Listing 19: sekvenser Selektion En selektion er en sætning som via en betingelse opstiller et enten-eller udtryk og derved udfører en række sætninger alt efter hvad udfaldet af en betingelse bliver. Den generelle form ses i listing 20. Bemærk at else-delen i linje 3 4 i kan udelades. 1 if (betingelse) 2 A 3 else 4 B Listing 20: Selektion 1 r = Greenfoot.getRandomNumber(100); 2 if (r < 20) 3 { 4 turn(40); 5 } 6 else 7 { 8 turn(-40); 9 } 11

12 Listing 21: på selektion Iteration Iteration er en sætning som udfører en anden sætning en eller flere gange. Der findes tre typer iterations-sætniger: for-løkker, while-løkker og udvidede for-løkker. for-løkker består grundlæggende af fire elementer. En initialiserings sætning hvor en løbevariabel erklæres og initialiseres, en løbe-betingelse der afgør om iterationen skal forsætte, en inkrementering af løbevariablen og endelig de sætninger der skal udføres et antal gange. Den generelle form ses herunder: 1 for (initialisering; betingelse; inkrementering) { 2 sætninger 3 } Listing 22: for-løkke Når en for-løkke skal udføres gøres følgende: 1. initialiserings sætningen udføres. Dette skulle gerne resultere i at der erklæres en løbevariabel og at denne initialiseres. Det kunne f.eks. være int i = Det checkes om betingelsen er opfyldt. Hvis dette ikke er tilfældet, stopper for-løkken og udførslen forsætter uden for for-løkken. 3. Er betingelsen opfyldt udføres de sætninger der er inde i for-løkken. 4. Herefter udføres inkrementerings-sætningen og der gås til skridt 2. 1 for(int i=0;i<10;i++){ 2 move(i*10); 3 turn(i*90); 4 } Listing 23: på for-løkker Udvidet for-løkke bruges til at iterere over en collection (se afsnit 7), f.eks. en liste. Et eksempel kunne være, at man gerne ville udføre et stykke kode for hvert element i en liste. Den udvidede for-løkke består af fire elementer. En objektreference til en collection af en bestemt type, en løbe-variabel og en række statements (sætninger), der skal udføres. Den generelle form er: 12

13 1 for (type variabel : collection) { 2 statements 3 } Listing 24: Den udvidede for-løkke 1 for (Die d : mydiecup) 2 { 3 d.roll(); 4 } Listing 25: Eksempel på udvidede for-løkker while-løkken består af to elementer: en løbe-betingelse og en række statements (sætninger) der skal udføres. Den generelle form er: 1 while( betingelse ) { 2 statements 3 } Listing 26: While-løkken Inden hver udførelse af while-løkkens indre statements tjekkes om løbe-betingelsen er opfyldt. Hvis dette er tilfældet, udføres de indre statements. Hvis ikke, forsætter udførelsen efter while-løkken. 1 int i = 0; 2 while( i<10 ){ 3 move(i*10); 4 turn(i*90); 5 i++; 6 } 7 8 while ( true ) { 9 System.out.println("Im looping forever"); 10 } Listing 27: på while-løkken while-løkken i linje 1 6 gør det samme som for-løkken i listing

14 6.3 Blok En blok er en måde at lave en række at sætninger til en enkelt sætning. Den generelle form er: 1 { 2 statements 3 } Listing 28: Blok En blok bruges tit som kroppen på en if-sætning eller en for-løkke for(int i=0;i<10;i++) 2 { 3 move(i*10); 4 turn(i*90); 5 } Listing 29: Eksempel på en blok 14

15 Del IV Javas klassebibliotek 7 Collection Collections giver mulighed for at opbevare mange objektreferencer i ét objekt. Samtidig giver en collection muligheden for en-til-mange relationer. Dette betyder at et objekt kan relatere til flere objekter. Et eksempel, hvor man kan bruge en collection, kan være at man har en række Adresse-objekter og at man derudfra ønsker at lave en Adressebog som kan indeholde alle Adresse-objekterne. En collection felt-variabel i Adressebog-objektet kan her bruges til at indeholde referencer til alle Adresse-objekterne. Et andet scenarie kan være at man ønsker at opbevare et antal tekststrenge (String-objekter) i en collection. 7.1 Basale konstruktioner Erklæring og initialisering Det første man skal sørge for er at importere Java pakken java.util.arraylist! Hvis man er doven kan man bruge java.util.*, som importerer alle klasser fra java.util pakken. Erklæring og initialisering foregår i det store hele, som ved enhver anden variabel. I eksemplet herunder er taget udgangspunkt i, at vi ønsker en liste der kan indeholde objekter af typen String. 1 ArrayList<String> listofstring; 2 listofstring = new ArrayList<String>(); Listing 30: Erklæring og initialisering af en collection-variabel Tilgængelige metoder Man kan tilføje et String-objekt til listofstrings, via metoden add som findes i ArrayList, på følgende måde: 1 listofstrings.add("string1"); Listing 31: Tilføje til en collection For at finde ud af hvor mange objekter der er gemt i ArrayList-objektet listof Strings kan man bruge metoden size() der returner hvor mange elementer der er i en given collection: 1 listofstrings.size(); Listing 32: Inspektion af størrelsen på en collection 15

16 Der findes adskillige andre. Hvis man vil se en liste over alle tilgængelige metoder kan en sådan findes i Java API en under f.eks. ArrayList Gennemløb af collection For at løbe igennem alle elementer i ArrayList-objektet listofstrings, kan man bruge en udvidet for-løkke (jf ) og f.eks. bruge System.out.println()- metoden til at printe hvert enkelt objekt ud med. Resultatet vil se sådan ud: 1 for(string s : listofstrings){ 2 System.out.println(s); 3 } Listing 33: Udskrivning af elementer 7.2 Realisering af en-til-mange Figur 1 nedenfor er et UML diagram, der illustrerer en en-til-mange relation mellem klasserne A og B. Betydningen af diagrammet er, at hvert A-objekt kender til et eller andet antal B-objekter. Til hvert A-objekt er der et antal B-objekter der hører til. A * B Figur 1: En-til-mange relation For at realisere sådan en en-til-mange relation i Java-kode skal man gøre tre ting. Man skal: Importere den collection man vil bruge. Det kunne f.eks. være en ArrayList - i det tilfælde skal man skrive: import java.util.arraylist Erklære en feltvariabel med passende type. Typen skal være typen på den collection man vil bruge og som man har importeret Initialisere den ovenfor erklærede feltvariabel i konstruktøren. Vil man altså realisere en en-til-mange relation mellem to klasser, A og B, som i figur 1, er den generelle form som følger: 1 import java.util.collection-klasse; 2 public class A { 3 private Collection-klasse<B> feltvariabel-navn; 4 5 public A(){ 16

17 6 feltvariabel-navn = new Collection-klasse<B>(); 7 } 8 } Listing 34: Realisering af en en-til-mange relation I listing 34, importeres i linje 1, der erklæres i linje 3 og der initialiseres i linje 6. I Listing 35 realiseres en-til-mange relationen illustreret i figur 2. AddressBook * Person Figur 2: Eksempel på realisering af en en-til-mange relation 1 import java.util.arraylist: 2 public class AddressBook { 3 private ArrayList<Person> persons; 4 public AddressBook(){ 5 persons = new ArrayList<Person>(); 6 } 7 } Listing 35: Eksempel på realisering af en en-til-mange relation 7.3 Algoritme-mønstre: find-en og find-alle Find-en Princippet i en find-en-algoritme, er at den leder en liste igennem, indtil den møder et element der matcher betingelserne. Den holder så op med at lede og returnerer det element den har fundet. Den generelle form kan ses i listing 36 nedenfor. Element-type er typen på de elementer der er i listen liste. I linje 2 6 gennemløbes listen liste ved hjælp af en udvidet for-løkke (jf ) og det første element e der gør søge-udtrykket udtryk (linje 3) sandt, returneres i linje 4. Hvis intet element gør søge-udtrykket sandt, returneres null (linje 7). 1 public Element-type metodennavn(parametre) { 2 for ( Element-type e : liste ) { 3 if ( udtryk) { 4 return e; 17

18 5 } 6 } 7 return null; 8 } Listing 36: Den generelle form på en find-en algoritme 1 public Dice findonedice(int eyes) { 2 for ( Dice d : dice ) { 3 if ( d.geteyes() == eyes ) { 4 return d; 5 } 6 } 7 return null; 8 } 9 10 public Pixel findonepixel(int color) { 11 for ( Pixel p : pixels ) { 12 if ( p.getcolor() == color) { 13 return p; 14 } 15 } 16 return null; 17 } public Person findoneperson(string q) { 20 for ( Person p : persons ) { 21 if(p.getfirstname().contains(q) p.getlastname().contains(q)) { 22 return p; 23 } 24 } 25 return null; 26 } Listing 37: på find-en algoritmer Find-alle En find-alle-algoritme, søger ligesom en find-en-algoritme en liste igennem. Forskellen, ligger i at den laver en ny liste med alle de objekter der matcher søgekriterierne, og returnerer så denne liste. Den generelle form kan ses i listing 38 nedenfor. Element-type er typen på de elementer der er i listen liste. I linje 3 7 gennemløbes listen liste ved hjælp af en udvidet for-løkke (jf ) hver gang et element e gør søge-udtrykket udtryk 18

19 (linje 4) sandt, tilføjes det til listen result. Når for-løkken er færdig vil listen re sult indeholde alle de elementer der opfylder søge-udtrykket og derfor returneres result i linje 8. 1 public ArrayList<Element-type> metodennavn(parametre) { 2 ArrayList<Element-type> result = new ArrayList<Element-type>(); 3 for ( Element-type e : liste ) { 4 if ( udtryk) { 5 result.add(e); 6 } 7 } 8 return result; 9 } Listing 38: Den generelle form på en find-alle algoritme 1 public ArrayList<Dice> findalldice(int eyes) { 2 ArrayList<Dice> result = new ArrayList<Dice>(); 3 for ( Dice d : dice ) { 4 if ( d.geteyes() == eyes ) { 5 result.add(d); 6 } 7 } 8 return result; 9 } public ArrayList<Pixel> findallpixels(int color) { 12 ArrayList<Pixel> result = new ArrayList<Pixel>(); 13 for ( Pixel p : pixels ) { 14 if ( p.getcolor() == color) { 15 result.add(p); 16 } 17 } 18 return result; 19 } public ArrayList<Person> findallpersons(string q) { 22 ArrayList<Person> result = new ArrayList<Person>(); 23 for ( Person p : persons ) { 24 if(p.getfirstname().contains(q) p.getlastname().contains(q)) { 25 result.add(p); 26 } 27 } 28 return result; 29 } 19

20 Listing 39: på find-alle algoritmer 8 Comparable og Comparator Comparable og Comparator er to interfaces der gør det muligt at fortælle Java hvordan objekter skal sammenlignes. Det er nyttigt hvis man f.eks. har brug for at sortere en liste med objekter: Hvis objekterne kan sammenlignes, enten vha. Comparable eller Comparator, kan man bruge Collections klassens sort metode. Begge interfaces implementeres ved at implementere en enkelt metode (compare To for Comparable og compare for Comparator). Denne metode skal sammenligne to objekter a og b og returnere et heltal: hvis a < b så returneres -1 hvis a > b så returneres 1 hvis a = b så returneres Comparable Comparable bruges til at udtrykke en naturlig ordning på objekter. Hvis man vælger at anvende Comparable kan man derfor kun specificere én måde hvorpå elementer skal sammenlignes. Når Comparable implementeres skal compareto metoden skrives direkte i den klasse der skal implementere Comparable interfacet. Antag at der findes en Person-klasse som specificeret i UML diagrammet i figur 3. Person int age double weight String name Figur 3: En Person klasse Ønsker man nu at sammenligne Person-objekter ved at sammenligne deres alder, kan dette gøre ved at implementere Comparable interfacet i Person klassen, som vist i listing 40. Bemærk at det a og b der refereres til i det ovenstående i dette tilfælde er this og other. 1 public class Person implements Comparable<Person>{

21 3 public int compareto(person other){ 4 if (this.age < other.age) return -1; 5 if (this.age > other.age) return 1; 6 return 0; 7 } 8 } Listing 40: Implementation af Comparable Nogen gange ønsker man også at have en sekundær ordning. Altså en alternativ måde at sammenligne objekter på, hvis objekterne viser sig at være ens i forhold til det primære sammenligningskriterie. F.eks. kunne man forestille sig for en Person, at hvis to personer har samme alder, så ønsker vi at sammenligne dem på deres navn i stedet. Dette kan gøres som vist i listing public class Person implements Comparable<Person>{ public int compareto(person other){ 4 if (this.age < other.age) return -1; 5 if (this.age > other.age) return 1; 6 return this.getname().compareto(other.getname()); 7 } 8 } Listing 41: Implementation af Comparable Ovenstående er også et eksempel på hvad man gør, hvis det ikke er tal der skal sammenlignes. I sådanne tilfælde kan < og > ikke bruges. Men det vil tit være tilfældet at de egenskaber man vil sammenligne selv har en compareto metode. I ovenstående eksempel har vi gjort brug af at et navn har typen String, og at String klassen allerede implementerer Comparable interfacet. Når vi i sidste linje kalder metoden compareto er det altså den der sammenligner strenge. 8.2 Comparator Hvis man ønsker at kunne sammenligne objekter på mange forskellige måder, kan man med fordel anvende Comparator interfacet. I modsætning til Comparable interfacet skal man nu oprette en ny klasse der implementerer Comparator interfacet for hver type sammenligning man ønsker. Sammenligningen fra forrige afsnit kan således også lægges i en klasse for sig selv vha. Comparator-interfacet. Dette ses i listing 42. Bemærk igen at det a og b der refereres til i det ovenstående i dette tilfælde er a og b. 1 public class AgeComparator implements Comparator<Person>{ 2 public int compare(person a, Person b){ 3 if (a.getage() < b.getage()) return -1; 21

22 4 if (a.getage() > b.getage()) return 1; 5 return 0; 6 } 7 } Listing 42: Implementation af Comparator Ønsker man i stedet at sammenligne på en persons navn kan man også lave en NameComparator som vist i listing public class NameComparator implements Comparator<Person>{ 2 public int compare(person a, Person b){ 3 return a.getname().compareto(b.getname()); 4 } 5 } Listing 43: Implementation af Comparator På denne måde kan man have en hel masse forskellige måder at sammenligne personer på. I forskellige sammenhænge kan man så vælge den man har brug for. Som man kan se ved sammenligning af eksemplerne i listing 40 og 42 ligner compareto og compare metoderne meget hinanden. Og de samme teknikker kan derfor også bruges i de to tilfælde. 8.3 Opsummering Comparable og Comparator interfacesene bruges til at angive hvordan objekter af samme type skal sammenlignes. Hvilken man vil bruge afhænger af om man ønsker at objekter skal kunne sammenlignes på én eller flere måder. 9 Collections klassen Vi skal nu se hvordan man kan bruge en implementation af Comparable eller Com parator interfacet til noget nyttigt. Klassen Collections indeholder en masse praktiske metoder til f.eks. at sortere lister, eller finde det største eller mindste element i en liste. Disse metoder kan bruges så længe at elementerne i listen enten implementerer Comparable eller Comparator interfacet. Hvordan metoderne i Col lections bruges afhænger af om det er Comparable eller Comparator man bruger. Vi vil nu se på nogle eksempler af brug af metoderne i Collections klassen, både vha. Comparable og Comparator. Lad A og B være to klasser med en indbyrdes en-til-mange relation som vist i UML diagrammet i figur 4. Det vil altså sige at et A objekt indeholder mange B objekter, de kunne f.eks. ligge i en liste. 22

23 A * B Figur 4: En-til-mange relation Eksempel med Comparable Givet et A objekt lad os antage at vi ønsker at lave en metode der sorterer og udskriver alle de tilhørende B objekter. Til det formål kan vi bruge metoden Col lections.sort, såfremt at B har implementeret Comparable interfacet. I eksemplet er variablen liste en liste i klassen A som indeholder objekter af typen B. Metoden kan derfor nu se ud som vist i listing public void sortandprint() { 2 Collections.sort(liste); 3 System.out.println(liste); 4 } Listing 44: Brug af Collections.sort vha. Comparable Bemærk igen at vi her har antaget at klassen B allerede implementerer Compa rable interfacet. Eksempel med Comparator Lad os se på et lignende eksempel, men hvor Comparator interfacet er brugt. Når vi siger at vi har implementeret Comparator interfacet for en klasse, i dette tilfælde B, har vi altså lavet en ny klasse der implementerer Comparator interfacet for klassen B. Lad os kalde denne klasse for FirstComparator. Man kan selvfølgelig også i dette tilfælde sortere sine elementer som før, men lad os i stedet se på hvordan man kan finde et mindste element i listen liste. En metode der udfører denne opgave kan ses i listing public B findminimum() { 2 return Collections.min(liste, new FirstComparator()); 3 } Listing 45: Brug af Collections.min vha Comparator Bemærk at i dette eksempel, i modsætning til eksemplet med Comparable, skal vi her eksplicit angive hvordan vi ønsker at elementerne i listen skal sammenlignes. Vi kunne således også have haft en SecondComparator, ThirdComparator, osv. som alle kunne sammenligne på forskellige måder. Hvilken vi brugte som argument i kaldet til metoden Collections.min, ville så have betydning for hvad resultatet blev. 23

24 At vi lige valgte at bruge Comparable sammen med sort og Comparator sammen med min er ikke af betydning. Der findes varianter af begge metoder i Col lections klassen der arbejder sammen med både Comparable og Comparator. Der findes desuden masser af andre nyttige metoder i Collections klassen, du kan se dem alle ved at kigge i Java API en. 24

25 Indeks ;, 9 =, 9 Access modifier, 7 Accessor, 7 Assignment, 9 Attribut, 5 Attribute, 5 Begreb, 4 Class, Klasse, 5 Collections, 22 Comparable, 20 Comparator, 20, 21 Constructor, Konstruktør, 8 Programmør, 4 Programmeringssprog, 4 public, 7 Returtype, 7 Sætninger, Statements, 9 Sekvens, 11 Selektion, 11 Statements, Sætninger, 9 Tildeling, 9 Udvidet for-løkke, 12 while-løkke, 13 Data, 4 else, 11 Fænomen, 4 Feltvariabel, 5 Fieldvariable, 5 for-løkke, 12 Hardware, 4 if, 11 Iteration, 12 Klasse, Class, 5 Konstruktør, Constructor, 8 Method, Metode, 6 Metode, Method, 6 Metodekald, 10 Metodesignatur, 7 Mutator, 8 Parameter, 7 private, 7 Processor, 4 Program, 4 Rev: 1241, August 24, manual.tex

dintprog Manual Revision: 731 September 30, 2009 1 Introduktion 3 1.1 Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

dintprog Manual Revision: 731 September 30, 2009 1 Introduktion 3 1.1 Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4 dintprog Manual Revision: 731 September 30, 2009 Indhold 1 Introduktion 3 1.1 Notation................................. 3 I Begreber 4 2 Grundbegreber om programmering 4 3 Grundbegreber om modellering

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

DM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11

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

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

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

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

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004 Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen torsdag den 3. juni 2004 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes

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

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

SWC Elementer i klassedefinition

SWC Elementer i klassedefinition SWC Elementer i klassedefinition Indhold Eksempel... 2 Karakteristika for en klasse... 3 Karakteristika for et instance field... 4 Karakteristika for en constructor... 5 Karakteristika for en property...

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

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

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

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

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

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber

Klasser. Grundlæggende Programmering med Projekt. Peter Sestoft Tirsdag 2. september 2008. (Tak til Jakob Bardram for nogle slides) Dagens begreber Klasser Grundlæggende Programmering med Projekt Peter Sestoft Tirsdag 2. september 2008 (Tak til Jakob Bardram for nogle slides) Dagens begreber Felt (field) Metode (method) Parameter (parameter) Sætning,

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

Kursus navn: Indledende programmering Kursus nr. 02101

Kursus navn: Indledende programmering Kursus nr. 02101 Danmarks Tekniske Universitet Side 1 af 8 sider Skriftlig prøve, den 15. december 2007 Kursus navn: Indledende programmering Kursus nr. 02101 Tilladte hjælpemidler: Alle skriftlige hjælpemidler Vægtning

Læs mere

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104

Civilingeniøreksamen 49104 12. januar 2001. Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Skriftelig prøve den 12. januar 2001 Kursusnummer 49104 Kursusnavn: Programmering. Tilladte hjælpemidler: Alle skriftlige hjælpemidler Opgavesættet består af fire opgaver, der har følgende vægtning: Opgave

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

Virkefeltsregler i Java

Virkefeltsregler i Java Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten

Læs mere

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

Datalogi 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 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

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations Tabelbegrebet Klassediagrammer (III) Tabeller og qualified associations originally by Michael R. Hansen modified/extended by Anne E. Haxthausen Informatics and Mathematical Modelling Technical University

Læs mere

Fundamentale sprogbegreber

Fundamentale sprogbegreber Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn) Oversigt Sætninger simple sætninger (assignment, metodekald) sammensatte sætninger (selektion,

Læs mere

Videregående programmering i Java

Videregående programmering i Java Videregående programmering i Java Dag 9 Andre designmønstre Andre designmønstre: Uforanderlig, Fluevægt, Lagdelt Initialisering, Komposit/Rekursiv Komposition, Kommando/Ændring Fremlæggelse af programmering/status

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

Dokumentation af programmering i Python 2.75

Dokumentation 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 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 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

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: 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 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

JavaScript. nedarvning.

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

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

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

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

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

Hvad er Objekter - Programmering

Hvad er Objekter - Programmering Denne guide er oprindeligt udgivet på Eksperten.dk Hvad er Objekter - Programmering En rigtig god gennemgang af hvad objekter er! Hvordan de oprettes og anvendes! Det er helt klart til nybegyndere, som

Læs mere

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22.

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16, 19-22. Klasser og Objekter i Python Uge 46 Learning Python: kap 15-16, 19-22. Klasser og objekter En klasse beskriver en klump af samhørende funktioner og variable En klasse er en beskrivelse. En kage form Klassens

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

//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

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api

Specifikation Abstrakt OO OS-API Rev. 1.7. Specifikation. Abstrakt, objektorienteret operativsystem-api Specifikation Abstrakt, objektorienteret operativsystem-api Indhold 1 Indledning... 3 1.1 Introduktion... 3 1.2 Formål... 3 1.3 Overordnede krav... 3 2 Ressourcer i OS-API et... 4 2.1 Tråde... 4 2.2 Timere...

Læs mere

Videregående Programmering for Diplom-E Noter

Videregående Programmering for Diplom-E Noter Videregående Programmering for Diplom-E Noter 1. Uddelegering Ét af de væsentlige principper i objektorienteret programmering er, at enhver klasse selv skal kunne "klare ærterne". Enhver klasse skal altså

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

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen Sekvensafstand DM34 - Eksamensopgave Jacob Aae Mikkelsen 19 10 76 kokken@grydeske.dk 27. maj 2005 Resumé Rapporten her beskriver tre forskellige rekursive metoder til at sammenligne tekst strenge med.

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

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

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004 Overvågningssystem Beskrivelse Bagagesorteringssystemet består af et antal skranker (check-in) til modtagelse og registrering af bagage, et automatiseret sorteringsanlæg samt et antal terminaler (gates),

Læs mere

BRP 6.9.2006 Kursusintroduktion og Java-oversigt

BRP 6.9.2006 Kursusintroduktion og Java-oversigt BRP 6.9.2006 Kursusintroduktion og Java-oversigt 1. Kursusintroduktion 2. Java-oversigt (A): Opgave P4.4 3. Java-oversigt (B): Ny omvendings -opgave 4. Introduktion til næste kursusgang Kursusintroduktion:

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

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense

Jacob Christiansen, Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 7 DM -. Obligatoriske Opgave Løsning af ligningssystem vha. fipunktmetoden Jacob Christiansen, 8 moffe@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense. Opgaven Der skal implementeres

Læs mere

Klasser og nedarvning

Klasser og nedarvning Datalogi C, Efterår 2004 OH er, forelæsning 21/9-2004 Klasser og nedarvning Hvad er formålet? Typer, generisk kode, typeparameterisering Kritisk kig på, hvordan man gør i Java. Opgaven til senere: Generalisere

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

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

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

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner Java Programmering En bog for begyndere Skrevet af Henrik Kressner Indholdsfortegnelse Introduktion...3 1 Introduktion til Java...4 1.1 Javakoden...4 1.2 Det første program...6 1.2 Skriv til skærmen...6

Læs mere

Assignment #5 Toolbox Contract

Assignment #5 Toolbox Contract Assignment #5 Toolbox Contract Created by: René Kragh Trine Randløv E mail address cph rk70@cphbusiness.dk 23 11 2014 1 Introduktion Dette dokument indeholder en vertikal kontrakt for et system som skal

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

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

Forelæsning Uge 6 torsdag repetition

Forelæsning Uge 6 torsdag repetition Forelæsning Uge 6 torsdag repetition Java style guide Niveauer af programbeskrivelser Arraylister (én-til-mange relation) For-løkker (almindelig og udvidet) Primitive typer (forfremmelse og begrænsning)

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 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Funktionel programmering i Java (Kapitel 5) Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams (sekvenser af data / strømme af data) Brug af assignments

Læs mere

Webserverprogrammering

Webserverprogrammering Webserverprogrammering WSP fortsat - dag 11 Behandling af XML (StAX) Syndikering og RSS med XML JAXB - XML Java-objekter Projekthjælp Dette materiale er under Åben Dokumentlicens, se http://www.sslug.dk/linuxbog/licens.html

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

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

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

Objektorientering. Programkvalitet

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

IFC Egenskaber. Mohammad Hussain Parsianfar s102951 BYG DTU

IFC Egenskaber. Mohammad Hussain Parsianfar s102951 BYG DTU Mohammad Hussain Parsianfar s102951 Indholdsfortegnelse 1 Introduktion... 3 1.1 Hvorfor er det interessant... 3 1.2 Formål... 4 2 Simplebim... 5 2.1 Præsentation af softwaren... 5 2.1.1 Brugergrænseflade...

Læs mere

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel: Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel: Opbyg løsningen skridt for skridt ved hele tiden af vælge lige

Læs mere

Modern Concurrency Abstractions for C#

Modern Concurrency Abstractions for C# Modern Concurrency Abstractions for C# Nick Benton Luca Cardelli Cédric Fournet Presenter: Henrik Kragh-Hansen September 27, 2007 Motivation for concurrency Forbedring af concurrency Baggrundsinformation

Læs mere

Tree klassen fra sidste forelæsning

Tree klassen fra sidste forelæsning Programmering 1999 Forelæsning 12, fredag 8. oktober 1999 Oversigt Abstrakte klasser. Grænseflader. Programmering 1999 KVL Side 12-1 Tree klassen fra sidste forelæsning class Tree { int age; // in years

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

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag Forelæsning Uge 6 Mandag Funktionel programmering i Java (Kapitel 5) Lambda'er (kodestumper, der kan bruges som parametre i et metodekald) Streams (sekvenser af data / strømme af data) Brug af assignments

Læs mere