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

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

Klasser og objekter. (Afsnit i manualen)

Forelæsning Uge 5 Mandag

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag

Forelæsning Uge 6 Mandag

DANMARKS TEKNISKE UNIVERSITET

Forelæsning Uge 2 Torsdag

Forelæsning Uge 3 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 1 Torsdag

Forelæsning Uge 1 Torsdag

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 5 Mandag

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

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Torsdag

Forelæsning Uge 2 Mandag

Abstrakte datatyper C#-version

Forelæsning Uge 2 Mandag

Forelæsning Uge 5 Mandag

SWC Elementer i klassedefinition

Skriftlig eksamen i Datalogi

Forelæsning Uge 2 Mandag

Forelæsning Uge 5 Mandag

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

Integer.parseInt(args[0]) konverterer tegnstreng (f.eks. "10") til heltal (10). if (udtryk) else

Forelæsning Uge 3 Torsdag

DM507 Algoritmer og datastrukturer

Ugeseddel 4 1. marts - 8. marts

SWC eksamens-spørgsmål. Oversigt

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

DM507 Algoritmer og datastrukturer

Forelæsning Uge 4 Mandag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Torsdag

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

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Forelæsning Uge 2 Torsdag

Forelæsning Uge 12 Torsdag

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

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

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

Forelæsning Uge 12 Mandag

Eksempel: Skat i år 2000

Fundamentale sprogbegreber

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Mandag

Hvad er Objekter - Programmering

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

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

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

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

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

Introduktion til ActionScript, fortsat

Skriftlig eksamen i Datalogi

Forelæsning Uge 4 Mandag

Introduktion til ActionScript

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

Test af It-komponent

Løsning af møntproblemet

DM507 Algoritmer og datastrukturer

Virkefeltsregler i Java

Modern Concurrency Abstractions for C#

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

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

Singleton pattern i C#

Forelæsning Uge 3 Torsdag

Sproget Rascal (v. 2)

Skriftlig eksamen i Datalogi

Om binære søgetræer i Java

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.

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

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

Greenfoot En kort introduktion til Programmering og Objekt-Orientering

Forelæsning Uge 3 Torsdag

DM507 Algoritmer og datastrukturer

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

DM502. Peter Schneider-Kamp

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

Lektion 6. Grundlæggende programmering i VR

DRONNINGER (QUEENS) Opgave 1

Forelæsning Uge 3 Torsdag

Programmering for begyndere Lektion 2. Opsamling mm

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

COMPUTERSPIL 1. Opgave 1. Opgave 2

Indhold. Side 2 af 26

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

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

It og informationssøgning Forelæsning oktober 2006 Jakob Grue Simonsen. Klasser

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

Videregående programmering i Java

Noter til C# Programmering Iteration

Python programmering. Per Tøfting. MacFest

Transkript:

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 4 II Syntaks 5 4 Klasser (classes) 5 4.1 Type................................... 5 4.2 Feltvariabel (Fieldvariable, Attribut, Attribute)........... 5 5 Metoder (methods) 6 5.1 Metodesignatur............................. 7 5.2 Accessor................................. 7 5.3 Mutator................................. 8 5.4 Konstruktør (constructor)....................... 8 6 Sætninger (statements) 9 6.1 Simple sætninger............................ 9 6.1.1 Tildeling (assignment)..................... 9 6.1.2 Metodekald........................... 10 6.2 Sammensatte sætninger........................ 10 6.2.1 Sekvens............................. 11 6.2.2 Selektion............................ 11 6.2.3 Iteration............................. 12 6.3 Blok................................... 14 6.3.1............................ 14 Rev: 731, September 30, 2009 1 manual.tex

III Collections 15 7 Realisering af en-til-mange 16 8 Algoritme-mønstre: find-en og find-alle 17 8.1 Find-en................................. 17 8.2 Find-alle................................. 18 IV Java API 19 9 Comparable og Comparator 20 10 Collections klassen 22 11 Comparable 22 2

1 Introduktion Denne manual indehodler de vigtigste elementer af kurset Introduktion til Programmering ved Datalogisk institut, Aarhus Universitet. Manualen vil blive udfyldt løbende af studerende som kurset skrider frem. Der er to hovedformål med manualen. Den er ment som: Et opslagsværk Manualen 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. Et læringsværktøj Da indholdet genereres af de studerende får disse mulighed for at reflektere de vigtigste elementer i kurset. Dette sker ved at de studerende besvarer en række opgaver tilknyttet manualen. Ud fra besvarelserne af disse opgaver udvælges indholdet til manualen. Den nyeste version af manualen er tilgængelig på: http://www.cs.au.dk/dintprog/manual/manual.pdf. 1.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-programmerm hvorimod kursiv skrift skal erstattes med noget konkret. I nedenstående notationseksempel skal Klassenavn erstattes med navnet på den klasse man gerne vil skrive. 1 public class Klassenavn{ 2... 3 } Listing 1: Notationseksempel 3

Del I 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 Pung Person Kunstner Fænomener Min pung, din pung, Karstens pung Albert, Niels, Leo. Madonna, Prince, Queen, Coldplay 4

Del II Syntaks 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. Defines 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) Feltvariabler er variabler bundet til et objekt. De kan f.eks. fortælle hvor objektet er henne som ved x og y koordinaterne for krabben eller hvor mange orme krabben har spist. Normalt gøres feltvariabler private da de oftest vil være af afgørende betydning for objekters funktionalitet. Feltvariabler kan bruges på samme måde som andre variabler, men de erklæres på klasseniveau og f.eks. ikke inde i kroppen af en metode. Den generelle form på en erklæring af en feltvariabel ses i linje 3: 1 public class Klasse { 2 3 private type variabelnavn; 4 5 metoder Listing 3: Den generelle form på en feltvariabelerklæring 5

1 private String name; 2 private int age; 3 private double angle; Listing 4: på feltvariabler 5 Metoder (methods) En metode kan sammenlignes med en funktion i den matematiske verden. Den har et antal parametre (nul eller flere) og ændrer ved tilstanden på ens objekt og/eller giver en værdi som svar. 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 statements 4 } 5 } Listing 5: Den generelle form på en metodeerklæring 1 public void nextlap() { 2 lap++; 3 time = 0; 4 } 5 6 private void setage(int a) { 7 age = a; 8 } 9 10 public String getfullname(){ 11 return firstname + " " + lastname; 12 } Listing 6: på metoder 6

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. 6.1.2) 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 nextlap() 2 private int getiterations(int item) 3 public Vector(int x, int y) 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

1 public int getage() { 2 return age; 3 } 4 public String getjoke() { 5 return historie + pointe; 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 public void setpointe(string p) { 5 pointe = p; 7 private int setk(int y) { 8 k = Math.round(Math.sqrt(y) + 3); 9 } 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

1 public class Vector 2 { 3 private int x; 4 private int y; 5 6 /** 7 * Constructor for class Vector. 8 * Creates the zero vector (0, 0). 9 */ 10 public Vector() { 11 x = 0; 12 y = 0; 13 } 14 15 /** 16 * Constructor for class Vector. 17 * Creates the vector (x0, y0). 18 */ 19 public Vector(int x0, int y0) { 20 x = x0; 21 y = y0; 22 } 23... Listing 12: To kontruktører til klassen Vector 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. 6.1.1 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 assigment udføres, udregnes først udtrykket på højre side og dernæst gemmes resultatet i variablen på venstre side. 9

1 variabel = udtryk; Listing 13: Assignment 1 age = 29; 2 pointe = p; 3 k = Math.round(Math.sqrt(y) + 3); Listing 14: på assignments 6.1.2 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 method(argumenter); Listing 15: Internt metodekald method er metodens navn og argumenter er de argumenter som metoden tager. Den generelle form på et eksternt metodekald er: 1 objekt-reference.method(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 det består af flere sætninger sat sammen. Basalt set findes fire typer sammensatte sætnigner, sekvens, selektions, itetation og blok, som hver beskrives herunder. 10

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 6.2.2 Selektion En selektion er en sætning som via en betingelse opstiller et enten-eller udtryk og derved udfører en række sekvenser alt efter hvad udfaldet af 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 int i = 1; 2 if (i==1){ 3 System.out.println("Hello"); 4 } else { 5 System.out.println("World"); 7 8 if (i==1){ 9 return true; 11

10 } Listing 21: på selektion 6.2.3 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 statements (sætninger) der skal udføres et antal gange. Den generelle form ses herunder: 1 for (initialisering; betingelse; inkrementering) { 2 } 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 = 0. 2. 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 statements 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??), f.eks. en liste. Dvs. at man er interesseret i at udføre nogle sætninger for hvert element i collection en. 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

1 for (type variabel : collection) { 2 statements 3 } Listing 24: Den udvidede for-løkke 1 for(fields a : fieldlist){ 2 System.out.println(a.name); 3 System.out.println(a.value); 4 } Listing 25: på udvidede for-løkker while-løkken består af to elementer: en løbe-betingelse og en række statements (sætnigner) 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++; 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 23. 13

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. 6.3.1 1 for(int i=0;i<10;i++) 2 { 3 move(i*10); 4 turn(i*90); 5 } Listing 29: Eksempel på en blok 14

Del III Collections 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 skulle bruge en collection, kunne være at man har række Nyhed objekter og man derudfra skal lave en Nyhedsliste som skal kunne indeholde alle Nyhed-objekterne. En collection gør det her muligt at opbevare Nyhed-objekterne ved at tilføje en collection felt-variabel i Nyhedslist-object som derved kan indeholder referencer til alle Nyhed-objekterne Et andet scenarie kunne være at man ønsker at opbevare et antal tekststrenge (String-objekter) i en collection. For at erklære en variabel som kan indeholde strings i en ArrayList skal man skrive følgende: 1 ArrayList<String> listofstrings; Listing 30: Erklæring af en String liste Dog er det vigtigt at man før man erklærer denne variabel har importeret Java pakken java.util.arraylist. Man kan herefter gemme et nyt ArrayList<String> objekt i listofstrings på følgende måde: 1 listofstrings = new ArrayList<String>(); Listing 31: Initialisering af en collection Man kan nu tilføje et String object til listofstrings, via metoden add som er i ArrayList, på følgende måde: 1 listofstrings.add("string1"); Listing 32: Tilføje til en collection For at finde hvor mange objekter der er gemt i ArrayList objektet listof Strings kan man bruge metoden int size() der returner hvor mange elementer der er i collectionen: 1 listofstrings.size(); Listing 33: Inspektion af størrelsen på en collection For at løbe igennem ArrayList-objektet listofstrings, kan vi bruge en udvidet for-lykke (jf. 6.2.3) og bruge System.out.println() metoden til at printe med. Resultatet vil se sådan ud: 1 for(string s : listofstrings){ 2 System.out.println(s); 15

3 } Listing 34: Udskrivning af elementer 7 Realisering af en-til-mange Figur 1 nedenfor er et UML diagram, der illustrerer en en-til-mange relation men 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 attribut med passende type. Typen skal være typen på den collection man vil bruge og som man har importeret Initialisere den ovenfor erklærede attribut 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> attribut-navn; 4 5 public A(){ 6 attribut-navn = new Collection-klasse<B>(); 7 } 8 } Listing 35: Realisering af en en-til-mange relation I listing 35, importeres i linje 1, der erklæres i linje 3 og der initialiseres i linje 6. 16

AddressBook * Person Figur 2: Eksempel på realisering af en en-til-mange relation I Listing 36 realiseres en-til-mange relationen illustreret i figur 2. 1 import java.util.arraylist: 2 public class AddressBook { 3 private ArrayList<Person> persons; 4 public AddressBook(){ 5 persons = new ArrayList<Person>(); 7 } Listing 36: Eksempel på realisering af en en-til-mange relation 8 Algoritme-mønstre: find-en og find-alle 8.1 Find-en Princippet i en find-en-algoritme, er at den leder listen igennem, indtil den møder et element der matcher betingelserne. Den holder så op med at lede, og returnerer så det element den har fundet. Den generelle form kan ses i listing 37 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. 6.2.3) 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; 5 } 7 return null; 8 } Listing 37: Den generelle form på en find-en algoritme 17

1 public Dice findonedice(int eyes) { 2 for ( Dice d : dice ) { 3 if ( d.geteyes() == eyes ) { 4 return d; 5 } 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 } 18 19 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; 2 Listing 38: på find-en algoritmer 8.2 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 39 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. 6.2.3) hver gang et element e gør søge-udtrykket udtryk (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) { 18

5 result.add(e); 7 } 8 return result; 9 } Listing 39: 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); 7 } 8 return result; 9 } 10 11 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); 1 17 } 18 return result; 19 } 20 21 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); 2 27 } 28 return result; 29 } Listing 40: på find-alle algoritmer 19

Del IV Java API 9 Comparable og Comparator Comparable og Comparator er to interfaces der gør det muligt at separere sammenligning af objekter. 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 Collection klassens sort metode. Det er med andre ord en måde at fortælle hvordan objekter af en bestemet klasse skal sammenlignes - og det kan så bruges af andre klasser (som f.eks. Col lections). 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 hvis a < b så returnér -1 hvis a > b så returnér 1 nu ved vi at a = b og derfor kan vi returnere 0 Forskellen mellem Comparable og Comparator er, at hvor Comparable skal udtrykke en naturlig ordning, kan Comparator bruges til at udtrykke vilkårlige ordninger. En anden forskel er, at hvis man bruger Comparable er det typisk den klasse man ønsker at kunne sammenligne, der skal implementere Comparab le. Modsat skal man, hvis man bruger Comparator, lave en helt ny klasse der implementerer Comparator. Altså laves der en ny klasse der implementerer Compa rator for hver sammenligning man vil have. 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 vægt og samtidig vil have Person-klassen til at implementere Comparable (så man f.eks. kan bruge Collections-klassen) gøres dette som vist i listing 41. Bemærk at det a og b der refereres til i det ovenstående i dette tilfælde er this og other. 20

1 public class Person implements Comparable<Person>{ 2... 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 41: Implementation af Comparable Den samme sammenligning kan også lægges i en klasse for sig selv vha. Compa rator-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; 4 if (a.getage() > b.getage()) return 1; 5 return 0; 7 } Listing 42: Implementation af Comparator Er det ikke tal der skal sammenlignes kan man ikke bruge < og >. Men det vil tit være tilfældet at de egenskaber man vil sammenligne selv har en compareto eller compare-metode. Hvis man f.eks. vil kunne sammenligne Person-objekter ved at sammenligne deres navn kan man lave en NameComparator der benytter sig af Strings compareto-metode som vist i listing 43. 1 public class AgeComparator 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 Endelig vil man i nogen tilfælde have bruge for at have en primær og sekundær ordning. Det kunne f.eks. være at man ville sammenlige Person-objekter ved først at se på deres alder, og hvis denne er den samme så sekundært se på deres navn. Dette kunne implementeres som vist i listing 44 herunder. 1 public class AgeComparator implements Comparator<Person>{ 2 public int compare(person a, Person b){ 3 if (a.getage() < b.getage()) return -1; 4 if (a.getage() > b.getage()) return 1; 5 return a.getname().compareto(b.getname()); 21

7 } Listing 44: Implementation af Comparator 10 Collections klassen Lad A og B være to klasser med en indbyrdes en-til-mange relation som vist i UML diagrammet i figur 4. A * x B Figur 4: En-til-mange relation 11 Comparable Når man har et A objekt og vil udskrive alle tilhørende B objekter sorteret, kan man bruge Comparable interfacet og Collections-klassen. Dette realiseres ved at man i klassen B implementerer Comparable<B> interfacet og udfylder metoden compareto(b o), hvor man fortæller hvad der skal sammenlignes. B objekter er f.eks. gemt i en liste og derfor kan man ved at udføre ovenstående implementering nu kalde Collections.sort(..) metoden på listen. Metoden er en del af Java standard biblioteket og sørger for at sortere listen, netop ved at sammenligne objekterne i listen ved brug af compareto. Vil man bruge Comparator i stedet for Comparable, skal der, sammen med listen, sendes et Comparator-objekt som argument til Collections.sort. Collections-klassen har en række andre brugbare metoder som f.eks. min og max der er beskrevet i Java API et. Det kan bruges når man skal lede efter bøger i en søgeportal i et bibliotek og vil have resultatlisten i alfabetisk orden. Det kan bruges i et styresystems mapper, der er funktioner hvor man sorterer efter dato eller navn eller type. Hvis man vil sortere sine mp3 numre efter kunster eller titel. 22

Indeks ;, 9 =, 9 Access modifier, 7 Accessor, 7 Assignment, 9 Attribut, 5 Attribute, 5 Begreb, 4 Class, Klasse, 5 Comparable, 20 Comparator, 20 Constructor, Konstruktør, 8 Programmeringssprog, 4 public, 7 Returtype, 7 Sætninger, Statements, 9 Sekvens, 11 Selektion, 11 Statements, Sætninger, 9 Tildeling, 9 Udvidet for-lykke, 12 while-løkke, 13 Data, 4 else, 11 Fænomen, 4 Feltvariabel, 5 Fieldvariable, 5 for-løkke, 12 Hardware, 4 if, 11 Itaration, 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 Programmør, 4 Rev: 731, September 30, 2009 23 manual.tex