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



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

Løsning af møntproblemet

Forelæsning Uge 3 Mandag

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

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

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

Eksempel på en database: studenter, kurser, eksamener

BRP Kursusintroduktion og Java-oversigt

Databaseadgang fra Java

Abstrakte datatyper C#-version

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

DM502. Peter Schneider-Kamp

Skriftlig eksamen i Datalogi

Kursus navn: Indledende programmering Kursus nr

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

DANMARKS TEKNISKE UNIVERSITET

Hashing og hashtabeller

Videregående programmering i Java

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

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

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

Virkefeltsregler i Java

DM507 Algoritmer og datastrukturer

Objektorienterede metoder

Eksempel: et ordresystem note 5 Lagdeling s. 1

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

Ugeseddel 4 1. marts - 8. marts

SWC eksamens-spørgsmål. Oversigt

Tree klassen fra sidste forelæsning

DM507 Algoritmer og datastrukturer

Om binære søgetræer i Java

Dag 10 Flertrådet programmering

DM507 Algoritmer og datastrukturer

Rekursion og dynamisk programmering

Klasser og nedarvning

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

02101: Indledende programmering. IMM, Danmarks Tekniske Universitet. Læg en studieplan. Dato: 7/ Gruppenummer: 20

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

Videregående Programmering for Diplom-E Noter

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Fundamentale sprogbegreber

Kursus 02199: Programmering. Kontrol af programudførelsen. afsnit if (indkomst > ) topskat = (indkomst ) * 0.

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

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

Transkript:

Tabelbegrebet Klassediagrammer (III) Tabeller og qualified associations originally by Michael R. Hansen modified/extended by Anne E. Haxthausen 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 og Anne E. Haxthausen, Spring 2009 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 Anvendelse af Tabeller 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 3 Tabelbegrebet Modellering med qualified associations og tabeller Implementering af tabeller (Java 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 og Anne E. Haxthausen, Spring 2009 p. 2 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 4

Studiehåndbog: Modellering (I) Java: Tabel-Interfacet Map<K,V> En studiehåndbog beskriver en samling kurser, hvor hvert kursus beskrives ved et nummer, skemaplacering, formål, forudsætningskurser, osv. Håndbog * Kursus -nr: int -beskrivelse: String ikke synligt at et kursus er entydigt bestemt ved et kursusnummer utilfredsstillende modellering int size() : A 1 boolean containskey(k k) : k A 1 V get(k k) : t(k), hvis k A 1, og null ellers V put(k k, V v) : A 1 = A 1 k, t (k 1 ) = v hvis k = 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. Studiehåndbog: Modellering (II) 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 5 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 7 Java: Tabel Implementering HashMap<K,V> 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 nr: Integer 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 I klassebiblioteket for Java findes der klasser, der implementer Map<K,V> interfacet: bl.a. klassen HashMap<K,V>, der som datastruktur bruger såkaldte hashtabeller. I algoritmer og datastrukturer vil I lære om hashtabeller. Eksempel: Map<Integer,Kursus> katalog = new HashMap<Integer,Kursus>(); katalog.put(2161, new Kursus(...)); 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 6 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 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 og Anne E. Haxthausen, Spring 2009 p. 9 Udskrift 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 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 og Anne E. Haxthausen, Spring 2009 p. 10 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 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 +navn (in k : int) : String Kode:Integer 0..1 VareBeskrivelse -navn : String -pris : int Koeb +nyt(in k : int, in a : int) : void +regning(in kat : Katalog) : String Kode:Integer 0..1 Integer KasseApparat: Problemstilling 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 13 KasseApparat: Hovedprogram 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 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 og Anne E. Haxthausen, Spring 2009 p. 14 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 16

Klasse: VareBeskrivelse Klasse: Koeb (I) public class VareBeskrivelse private String navn; private int pris; public VareBeskrivelse(String n, int p) navn = n; pris = p; public int getpris() return pris; public String getnavn() return navn; public String tostring() return navn + " koster " + pris + " kr."; Klasse: Katalog 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 17 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>(); map.put(k, a); public void nyt(int k, int a) int i = a; if (map.containskey(k)) i += (map.get(k)); map.put(k, i); public String tostring() return map + ""; 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 19 Java interfacet Set<E> public class Katalog private Map<Integer,VareBeskrivelse> map; public Katalog() map = new HashMap<Integer,VareBeskrivelse>(); Sidste gang så i Java interfacet Collection<E>. Set<E> er et subinterface af Collection<E> 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 String navn(int k) return (map.get(k)).getnavn(); public String tostring() return "" + map; 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 18 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 20

Mere om Java interfacet Map<K,V> Klasse: Koeb (IIb) Endnu en tabel operation: Set< Map.Entry<K,V> > entryset() returnerer mængden af indgange i tabellen. Hver indgang har typen Map.Entry<K,V>. Map.Entry<K,V> er et interface for tabelindgange. Har to operationer: K getkey() V getvalue() 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(); //varekode a = entry.getvalue(); //antal p = a * kat.pris(k); total += p; res += a + "\t" + kat.navn(k) + "\t : \t " + p + "\n"; return res + "Total = " + total; 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 21 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 23 Klasse: Koeb (IIa) Opsummering For at lave en regning skal alle tabelindgange i et indkøb behandles. Vi ønsker derfor at iterere over samlingen af tabelindgange. Givet en indkøbstabel i Map<Integer,Integer> map. Da vil map.entryset() returnerer en samling (eng. collection) af tabelindgange: Set< Map.Entry<Integer,Integer> > map.entryset() 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 Elementerne har type Map.Entry<Integer,Integer>. På denne type findes to operationer: Integer getkey() Integer getvalue() 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 22 02161 Software Engineering 1 c Michael R. Hansen og Anne E. Haxthausen, Spring 2009 p. 24