Tabeller (I) Tabeller

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

Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer

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

Løsning af møntproblemet

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

Hashing og hashtabeller

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

Hashing og hashtabeller

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Eksempel: Skat i år 2000

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Vejledende løsninger

Kursus navn: Indledende programmering Kursus nr

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

Forelæsning Uge 3 Torsdag

BRP Kursusintroduktion og Java-oversigt

Forelæsning Uge 3 Torsdag

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

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

public Set(int size) { this.listelement = new LinkedList<Integer>(); }

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

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

Eksempel på en database: studenter, kurser, eksamener

Ugeseddel 4 1. marts - 8. marts

Forelæsning Uge 2 Torsdag

Abstrakte datatyper C#-version

Forelæsning Uge 6 Mandag

Forelæsning Uge 3 Mandag

Databaseadgang fra Java

DM507 Algoritmer og datastrukturer

Skriftlig eksamen i Datalogi

Forelæsning Uge 3 Mandag

Skriftlig eksamen i Datalogi

DANMARKS TEKNISKE UNIVERSITET

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Sekvenser af længde mellem 1 og 4 ord repræsenteres ved en klasse Segment, som uden grundlæggende ser således ud:

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

Videregående programmering i Java

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

Forelæsning Uge 5 Mandag

Forelæsning Uge 2 Torsdag

DM507 Algoritmer og datastrukturer

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

Hvem er vi? Kursus Introduktion. Kursuslærerne. Agenda for i dag

Forelæsning Uge 5 Mandag

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.

Om binære søgetræer i Java

Datastrukturer (recap) Datastruktur = data + operationer herpå

Forelæsning Uge 2 Torsdag

Klasser og nedarvning

Datalogi OB, Efterår 2002 OH er, forelæsning 3/ forstå datastrukturer og algoritmer (teoretisk forståelse og intuition)

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

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

DM507 Algoritmer og datastrukturer

Rekursion og dynamisk programmering

Objektorienterede metoder

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

Eksempel: et ordresystem note 5 Lagdeling s. 1

9.8 Kildekode. side 88. Pakke Klasse Sidenummer. fortsætter..

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

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.

DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

Videregående programmering i Java

Programmering 1999 KVL Side 5-4. Klassen Time: metoder. Metoder i objektet giver mulighed for at ændre tilstanden, eller kigge på tilstanden.

Skriftlig eksamen i Datalogi

Real-time programming safety in Java and Ada

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

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

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Førsteårsprojekt F2008 Flere grafalgoritmer, og visualisering SØGES

Videregående Programmering for Diplom-E Noter

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

Introduktion til datastrukturer. Philip Bille

Tree klassen fra sidste forelæsning

Forelæsning Uge 4 Torsdag

SWC eksamens-spørgsmål. Oversigt

Datastrukturer. Datastruktur = data + operationer herpå

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

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

DATALOGI 0GB. Skriftlig eksamen mandag den 7. juni 2004

Rolf Fagerberg. Forår 2013

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Kursusarbejde 3 Grundlæggende Programmering

Datastrukturer. Datastruktur = data + operationer herpå

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

Virkefeltsregler i Java

Skriftlig eksamen i Datalogi

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal

Introduktion. Philip Bille

Forelæsning Uge 12 Torsdag

Danmarks Tekniske Universitet

Prioritetskøer ved»heap«, simulering

Forelæsning Uge 5 Mandag

Forelæsning Uge 1 Torsdag

Transkript:

Tabeller (I) Klassediagrammer (III) Tabeller og qualified associations Michael R. Hansen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark En tabel fra en mængde A til en mængde B, er en endelig delmængde A 1 af A og en funktion t: A 1 B En tabel vises ofte på tabular form: a 1 b 1 a 2 b 2 A 1 = a 1,...,a n.. t(a i ) = b i, for 1 i n a n b n Oversigt 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 1 A 1 kaldes t s domæne a i A 1 kaldes en nøgle b i = t(a i ) kaldes en værdi (a i,b i ) kaldes en indgang Tabeller 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 3 Tabelbegrebet Anvendelser Maps, HashMaps For mange anvendelser findes naturlige nøgler: Studienummer Kursusnummer CPR nummer Varekoder Medlemsnumre En kursushåndbog kan, for eksempel, modelleres som en tabel fra kursusnumre til kursusbeskrivelser. Tabeller er nyttige som modelleringsredskab Tabeller understøttes af gode programbiblioteker 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 2 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 4

Eksempel: Studiehåndbog (I) En studiehåndbog beskriver en samling kurser, hvor hvert kursus beskrives ved et nummer, skemaplacering, formål, forudsætningskurser, osv. Håndbog * Kursus -nummer: int -beskrivelse: String ikke synligt at et kursus er entydigt bestemt ved et kursusnummer utilfredsstillende modellering Tabel-Interfacet: Map I Java er der forskellige biblioteker for tabeller, der implementerer interfacet Map, hvori bl.a. følgende operationer, er specificeret int size() : A 1 boolean containskey(object k) : k A 1 Object get(object k) : t(k), hvis k A 1, og null ellers Object put(object k, Object v) : A 1 = A 1 k, t v hvis k = k 1 (k 1 ) = t(k 1 ) ellers returnerer t(k), hvis k A 1, og ellers null hvor t : A B og A 1 A er tabellen før operationen og t : A B og A 1 A er tabellen efter, hvis der er sidevirkning. Eksempel: Studiehåndbog (II) 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 5 Tabelbiblioteket: HashMap 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 7 En studiehåndbog beskriver en samling kurser, hvor hvert kursus er entydigt bestemt ved et nummer, og.... Modelleres vha en kvalificeret (eng. qualified) association en håndbog har 0-1 kursus for hvert nummer Håndbog 0..1 nummer: int Kursus -beskrivelse: String Den kvalificerede association kan realiseres ved at Håndbog kan indeholde en tabel, hvor numre er nøgler, og kurser er værdier En HashMap er en datastruktur der består af et array A, hvor A s indgange er en liste af tabelindgange. A (k3,v3) (k2,v2) (k1,v1) en operation int hashcode() på nøgler bestemmer position i A for en indgang (k,v) nøglers equals operation benyttes ved søgning i listerne HashTabeller har en maksimal fyldningsgrad. Default er 75 %. Overskrides max. så udvides A. hvis k1.equals(k2), så k1.hashcode()==k2.hashcode() for en lang række operationer, er den gennemsnitlige køretid for en enkelt operation konstant godt default valg 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 6 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 8

Klasse: Haandbog operationer på håndbogen implementeres direkte ved HashMap-operationer import java.util.*; public class Haandbog private Map<Integer,Kursus> katalog; public Haandbog() katalog = new HashMap<Integer,Kursus>(); public void opret(int nr, Kursus k) katalog.put(nr, k); public Kursus find(int nr) return katalog.get(nr); Hovedprogram Kursus k3333 = new Kursus("Programmering", "Java, C++, UML"); Kursus k4444 = new Kursus("Matematik", "Funktioner, relationer"); Kursus k5555 = new Kursus("Fysik", "Newtons love"); Kursus k6666 = new Kursus("Kemi", "Gasser"); Haandbog hb = new Haandbog(); hb.opret(3333,k3333); hb.opret(4444,k4444); hb.opret(5555,k5555); hb.opret(6666,k6666); System.out.println( hb ); public String tostring() return "" + katalog; System.out.println( hb.find(4444)); Klasse: Kurser 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 9 Udskrift 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 11 public class Kursus private String navn; private String indhold; public Kursus(String n, String i) navn = n; indhold = i; public String tostring() return "Navn: " + navn + "\n" + indhold + "\n"; 3333=Navn: Programmering Java, C++, UML, 4444=Navn: Matematik Funktioner, relationer, 6666=Navn: Kemi Gasser, 5555=Navn: Fysik Newtons love Navn: Matematik Funktioner, relationer 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 10 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 12

KasseApparat: Problemstilling Klassediagram Et elektronisk kasseapparat indeholder et katalog, hvor navn og pris for en vare knyttes sammen med en varekode. Et indkøb består at en række punkter, hvor det angives hvor mange styk af en given vare der købes. En regning skal beskrive enkeltindkøb af varer og angive en totalpris. Katalog +Opret(in k : int, in vb : VareBeskrivelse) : void +find(in k : int) : VareBeskrivelse +pris(in k : int) : int +beskrivelse(in k : int) : string Kode: int 0..1 VareBeskrivelse -beskrivelse : string -pris : int Koeb +nyt(in k : int, in a : int) : void +regning(in kat : Katalog) : string Kode: int 0..1 Integer KasseApparat: Problemstilling 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 13 KasseApparat: Hovedprogram 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 15 Et elektronisk kasseapparat indeholder et katalog, hvor navn og pris for en vare knyttes sammen med en varekode. Et indkøb består at en række punkter, hvor det angives hvor mange styk af en given vare der købes. En regning skal beskrive enkeltindkøb af varer og angive en totalpris. Opret varekatalog og indkøb, og udskriv regning Katalog katalog = new Katalog(); katalog.opret(1, new VareBeskrivelse("is", 10)); katalog.opret(2, new VareBeskrivelse("fisk", 20)); Koeb koeb = new Koeb(1, 3); koeb.nyt(2, 4); koeb.nyt(1, 3); System.out.println(koeb.regning(katalog)); Udskrift: 4 fisk : 80 6 is : 60 Total = 140 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 14 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 16

Klasse: Katalog Klasse: Koeb (I) public class Katalog private Map<Integer,VareBeskrivelse> map; public Katalog() map = new HashMap<Integer,VareBeskrivelse>(); public void opret(int k, VareBeskrivelse vb) map.put(k, vb); public VareBeskrivelse find(int k) throws KatalogException if (! map.containskey(k)) throw new KatalogException(" findes ikke"); return map.get(k); public int pris(int k) return (map.get(k)).getpris(); public class Koeb private Map<Integer,Integer> map; public Koeb() map = new HashMap<Integer,Integer>(); public Koeb(int k, int a) map = new HashMap<Integer,Integer>(); nyt(k, a); public void nyt(int k, int a) int i = a; if (map.containskey(k)) i += (map.get(k)); public String beskrivelse(int k) return (map.get(k)).getbeskrivelse(); map.put(k, i); public String tostring() return "" + map; Klasse: VareBeskrivelse 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 17 public String tostring() return map + ""; Samlinger 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 19 public class VareBeskrivelse private String beskrivelse; private int pris; public VareBeskrivelse(String b, int p) beskrivelse = b; pris = p; public int getpris() return pris; public String getbeskrivelse() return beskrivelse; public String tostring() return beskrivelse + " koster " + pris + " kr."; For at lave en regning skal alle indgange i et indkøb behandles. Hertil benyttes samlinger og evt. iteratorer. der laves en samling (eng. collection) af tabelindgange Set map.entryset() hvor Set er en type for samlingen: mængde, og entryset returnerer samlingen af tabelindgange. Elementerne har type Map.Entry. På denne type findes to operationer: Object getkey() Object getvalue() 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 18 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 20

Klasse: Koeb (II) public String regning(katalog kat) int total = 0; int a = 0; int p = 0; int k; String res = ""; for (Map.Entry<Integer,Integer> entry : map.entryset()) k = entry.getkey(); a = entry.getvalue(); p = a * kat.pris(k); total += p; res += a + "\t" + kat.beskrivelse(k) + "\t : \t " + p + "\n"; return res + "Total = " + total; 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 21 Opsummering Modellering vha tabeller Implementering vha Maps mange operationer i en model kan ofte direkte implementeres ved operationer i tabelbiblioteker der findes mange effektive implementeringer af tabeller kurser i Algoritmer og Datastrukturer 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 22