programmering för språkteknologer ii, ht2014 avancerad …evelina/uv/uv14/pst2/f5/2014... ·...

72
Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 [email protected] Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/

Upload: others

Post on 11-Dec-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

Programmering för språkteknologer II, HT2014

Avancerad programmering för språkteknologer, HT2014

[email protected] 9-2035http://stp.ling.uu.se/~evelina/uv/uv14/pst2/

Page 2: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

2

Idag

- Hashtabeller

- Kodkvalité

- Objektorienterad analys

- Övningar – Komplexitet – Objektorienterad analys/design

Page 3: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

3

Hashtabeller

Page 4: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

4

Associativa typer

- En array associerar heltal med värden av godtycklig typ:

String[] array = new String[4]; array[0] = "Kalle"; array[1] = "Anka"; array[2] = "Dator"; array[3] = "Bok";

Kalle Anka Dator Bok

index: 0 1 2 3

Page 5: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

5

Associativa typer

- Tänk om vi kan associera värden av godtycklig typ med hjälp av ett godtyckligt värde, dvs en nyckel, istället för ett index.

Exempel:

nyckel: “K” “A” “D” “B”

Kalle Anka Dator Bok

Page 6: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

6

Associativa typer

- Tänk om vi kan associera värden av godtycklig typ med hjälp av ett godtyckligt värde, dvs en nyckel, istället för ett index.

Exempel:

Problem: Hur ska datorn veta var i arrayen “K” finns?

nyckel: “K” “A” “D” “B”

Kalle Anka Dator Bok

Page 7: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

7

Associativa typer

- Tänk om vi kan associera värden av godtycklig typ med hjälp av ett godtyckligt värde, dvs en nyckel, istället för ett index.

Exempel:

Problem: Hur ska datorn veta var i arrayen “K” finns?

Lösning: Konvertera “K” till ett giltigt index med hjälp av en hashfunktion.

nyckel: “K” “A” “D” “B”

Kalle Anka Dator Bok

Page 8: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

8

Associativa typer

- Tänk om vi kan associera värden av godtycklig typ med hjälp av ett godtyckligt värde, dvs en nyckel, istället för ett index.

Exempel:

Lösning: Konvertera “K” till ett giltigt index med hjälp av en hashfunktion.

s2 s3 s4 s5

hashfunktion:

nyckel: “K” “A” “D” “B”

Page 9: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

9

Hashtabeller – Skapa hashtabell

HashMap<String,String> Dictionary = new HashMap<String,String>(100);

0

1

2

3

4

5

6

7

Page 10: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

10

Hashtabeller – insättning

K Kalle

A Anka

D Dator

B Bok

0

1

2 K Kalle

3

4

5

6

7

Sätt in ordet Kalle i ordlistan.

dictionary.put("K", "Kalle");

Page 11: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

11

Hashtabeller – insättning

Sätt in ordet Anka i ordlistan.

dictionary.put("A", "Anka");

0

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 12: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

12

Hashtabeller – insättning

Sätt in ordet Dator i ordlistan.

dictionary.put("D","Dator");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 13: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

13

Hashtabeller – insättning

Sätt in ordet Bok i ordlistan.

dictionary.put("B", "Bok");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7 B Bok

K Kalle

A Anka

D Dator

B Bok

Page 14: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

14

Hashtabeller – insättning

Nu har vi lagrat vår ordlista i hashtabellen.

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7 B Bok

K Kalle

A Anka

D Dator

B Bok

Page 15: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

15

Hashtabeller – Sökning

Hur kan vi hitta ordet Kalle?

String state = dictionary.get("K");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7 B Bok

K Kalle

A Anka

D Dator

B Bok

Page 16: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

16

Hashtabeller – Sökning

Hur kan vi hitta ordet Anka?

String state = dictionary.get("A");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7 B Bok

K Kalle

A Anka

D Dator

B Bok

Page 17: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

17

Hashtabeller – Sökning

Hur kan vi hitta ordet Dator?

String state = dictionary.get("D");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7 B Bok

K Kalle

A Anka

D Dator

B Bok

Page 18: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

18

Hashtabeller – Sökning

Hur kan vi hitta ordet Bok?

String state = dictionary.get("B");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7 B Bok

K Kalle

A Anka

D Dator

B Bok

Page 19: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

19

Hashtabeller – Fakta

Skapa hashtabell:HashMap<K,V> name = new HashMap<K, V>(int capacity);

Insättning: name.put(K key, V value);

Sökning:V value = (V)name.get(K key);

K – står för key och kan vara av godtycklig typV – står för value och kan vara av godtycklig typ

Page 20: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

20

Hashtabeller – Krockhantering

Vad händer om två nycklar får samma indexi hashtabellen?

Page 21: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

21

Hashtabeller – Krockhantering

dictionary.put("K","Kalle");

0

1

2 K Kalle

3

4

5

6

7

K Kalle

A Anka

D Dator

B Bok

Page 22: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

22

Hashtabeller – Krockhantering

dictionary.put("A","Anka");

0

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 23: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

23

Hashtabeller – Krockhantering

dictionary.put("D","Dator");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 24: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

24

Hashtabeller – Krockhantering

dictionary.put("B","Bok");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 25: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

25

Hashtabeller – Krockhantering

Index 2 i hashtabellen har redan ett värde, så nu blir det en krock. Hur ska vi lösa detta?

dictionary.put("B","Bok");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 26: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

26

Hashtabeller – Krockhantering

Det finns olika sätt att lösa en krock - länkning - Varje plats i hashtabellen innehåller en länkad lista

- öppen adressering - Placera datan på den första lediga platsen i hashtabellen

Page 27: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

27

Hashtabeller – Krockhantering

länkning - Varje plats i hashtabellen innehåller en länkad lista

dictionary.put("B","Bok");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 28: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

28

Hashtabeller – Krockhantering

länkning - Varje plats i hashtabellen innehåller en länkad lista

B Bok

dictionary.put("B","Bok");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 29: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

29

Hashtabeller – Krockhantering

Länkning: Sökning

Vilket ord finns lagrat i nyckel B?

String state = dictionary.get("B"));

B Bok

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 30: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

30

Hashtabeller – Krockhantering

Länkning: Sökning

Vilket ord finns lagrat i nyckel B?

String state = dictionary.get("B"));

B Bok

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 31: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

31

Hashtabeller – Krockhantering

Länkning: Sökning

Vilket ord finns lagrat i nyckel B?

String state = dictionary.get("B"));

B Bok

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 32: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

32

Hashtabeller – Krockhantering

Länkning - insättning: - hashfunktionen används på nyckeln och vi får ett index i hashtabellen - nyckel + data placeras in i den enkellänkade listan i index

- sökning: - hashfunktion används på nyckeln och vi får ett index - Man går igenom listan i index i tills: - data med motsvarande nyckel hittas och data returneras - eller tills listan är slut. Om listan är slut, returneras null.

Page 33: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

33

Hashtabeller – Krockhantering

Öppen adressering: Lagra på den första lediga platsen.

dictionary.put("B","Bok");

0 D Dator

1

2 K Kalle

3

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 34: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

34

Hashtabeller – Krockhantering

Öppen adressering: Lagra på den första lediga platsen.

0 D Dator

1

2 K Kalle

3 B Bok

4

5 A Anka

6

7

dictionary.put("B","Bok");

K Kalle

A Anka

D Dator

B Bok

Page 35: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

35

Hashtabeller – Krockhantering

Öppen adressering: Lagra på den första lediga platsen.

dictionary.put("S","Stol");

S Stol

0 D Dator

1

2 K Kalle

3 B Bok

4

5 A Anka

6

7

K Kalle

A Anka

D Dator

B Bok

Page 36: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

36

Hashtabeller – Krockhantering

Öppen adressering: Lagra på den första lediga platsen.

0 D Dator

1

2 K Kalle

3 B Bok

4

5 A Anka

6

7

dictionary.put("S","Stol");

K Kalle

A Anka

D Dator

B Bok

S Stol

Page 37: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

37

Hashtabeller – Krockhantering

Öppen adressering: Lagra på den första lediga platsen.

0 D Dator

1

2 K Kalle

3 B Bok

4 S Stol

5 A Anka

6

7

dictionary.put("S","Stol");

K Kalle

A Anka

D Dator

B Bok

S Stol

Page 38: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

38

Hashtabeller – Krockhantering

Öppen adressering: Sökning

0 D Dator

1

2 K Kalle

3 B Bok

4 S Stol

5 A Anka

6

7

dictionary.get("S");

K Kalle

A Anka

D Dator

B Bok

S Stol

Page 39: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

39

Hashtabeller – Krockhantering

Öppen adressering: Sökning

0 D Dator

1

2 K Kalle

3 B Bok

4 S Stol

5 A Anka

6

7

dictionary.get("S");

K Kalle

A Anka

D Dator

B Bok

S Stol

Page 40: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

40

Hashtabeller – Krockhantering

Öppen adressering: Sökning

0 D Dator

1

2 K Kalle

3 B Bok

4 S Stol

5 A Anka

6

7

dictionary.get("S");

K Kalle

A Anka

D Dator

B Bok

S Stol

Page 41: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

41

Hashtabeller – Krockhantering

Öppen adressering

insättning: - applicera hashfunktionen på nyckeln och få ett index i hashtabellen - gå in i indexet och leta efter den första lediga platsen - placera nyckeln + datan på den platsen

Sökning: - applicera hashfunktionen på nyckeln - leta efter nyckeln, om den hittas returneras värdet annars returneras null.

Page 42: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

42

Hashtabeller – Krockhantering

Täthet

- Risken för krockar ökar ju fler nycklar man placerat i hashtabellen.

- Det tar längre tid att lägga in och söka efter nycklar i en hashtabell ju fler krockar man har.

- Riktmärke:antal nycklarantal platser

=0.75

Page 43: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

43

Hashtabeller - JAVA

Klasser: Hashtable, HashMap, HashSet – Nycklarna lagras i osorterad ordning – Krockhantering: Länkning TreeMap, TreeSet – Nycklarna lagras i sorterad ordning

Krav: Följande metoder måste implementeras: - int hashCode() – omvandlar nyckeln till ett index som finns I hashtabellen

- boolean equals(Object other) – returnerar sant om två objekt är lika annars falskt.

Page 44: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

44

Hashtabeller - JAVA

Konstruktorer: - HashXXX(); Kapacitet: 16 Täthet: 0.75

- HashXXX(int capacity); Kapacitet: capacity Täthet: 0.75 - HashXXX(int capacity, float loadFactor); Kapacitet: capacity Täthet: loadfactor

Page 45: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

45

Hashtabeller - JAVA

Konstruktorer: - TreeXXX(); Skapar ett tomt träd - TreeXXX(Collection<? extends E> c) Skapar ett nytt träd som innehåller samma object som c - TreeXXX(Comparator<? super E> comparator) Skapar ett nytt tomt träd sorterad enligt comparator

- TreeXXX(SortedSet<E> s) Skapar ett nytt träd med samma innehåll som i s

Page 46: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

46

Hashtabeller - JAVA

Klasser: Hashtable, HashMap, HashSet

- När antalet element i hashtabellen överstiger kapaciteten gånger täthetsfaktorn, utökas tabellen. - Detta tar tid och ska därför inte göras ofta.

- Täthetsfaktorn kan användas för att balansera uttrymmet mot effektiviteten.

Page 47: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

47

Hashtabeller - JAVA

Klasser: Hashtable, HashMap, HashSet

- Krockhantering: Länkning

- För att objekt av en klass ska kunna placeras i en hashtabell måste man implementera följande: - int hashCode() - Avgör i vilket index en nyckel ska placeras i - boolean equals(Object other) - Finns definierad i objekt - Avgör om två nycklar är lika

Page 48: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

48

Hashtabeller - JAVA

int hashCode()

- Två objekt som är lika enligt equals ska få samma hashCode

- Två objekt som inte är lika enligt equals behöver inte få samma hashCode

- Strategier: - Linjär sökning: ett steg i taget - Kvadratisk sökning: 1, 2, 4 ,8 16,... - Dubbelhashning: en ytterliggare hashfunktion avgör hur många steg som ska tas

Page 49: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

49

Klassen String - boolean equals(Object o)

Jämför alltid strängar med equals, istället för string1 == string2.

Exempel:

String string = "Hej";

if(string.equals("Hej")) { System.out.println("Same string");} else { System.out.println("Not the same string");}

Page 50: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

50

Hashtabeller - JAVA

boolean equals(Object o)

- Ta reda på om två objekt är lika (jämför == för värden)

- Exempel: public class Person{ String name = ""; public boolean equals (Object o) { if(this == o) return true; // samma objekt }

Page 51: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

51

Hashtabeller - JAVA

boolean equals(Object o)

- Ta reda på om två objekt är lika (jämför == för värden)

- Exempel: public class Person{ String name = ""; public boolean equals (Object o) { if(this == o) return true; // samma objekt // Testa om o inte är en instans av Person else if (!(o instanceof Person)) return false; }

o instanceof klassnamnreturnerar sant om o är en instans av klassenklassnamn, annars returneras falskt.

Page 52: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

52

Hashtabeller - JAVA

boolean equals(Object o)

- Ta reda på om två objekt är lika (jämför == för värden)

- Exempel: public class Person{ String name = ""; public boolean equals (Object o) { if(this == o) return true; // samma objekt // Testa om o inte är en instans av Person else if (!(o instanceof Person)) return false; else { // Testa om instansvariablerna har // samma värde Person oPerson = (Person)o; return name == oPerson.name; } } }

Page 53: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

53

Kodkvalité

Page 54: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

54

Kodkvalité - Namn

- namnet på en variabel ska beskriva vad som finns lagrat i den

Ex. String name; är bättre än String n;

- namnet på en metod ska beskriva vad metoden utför för något Ex. String getName(); är bättre än String getN();

Page 55: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

55

Kodkvalité – Koden i metoderna

- Om ni har flera satser som utföra ungefär samma sak: – Samla satserna i en metod och anropa den istället

– Då blir det lättare att underhålla koden om ni behöver göra ändringar i den.

Exempel: Det är lättare att göra ändringar i en metod somanropas flera gånger istället för att leta eftersnarlika kodblock och ändra på var och en av dem.

Page 56: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

56

Kodkvalité – Koden i metoderna

- Om koden i en metod är lång kan det bli svårt att få en överblick över kod i metoden. Lösning: Dela upp koden i lämpliga metoder och anropa metoderna istället.

Page 57: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

57

Kodkvalité – Synlighet

- Endast de metoder och variabler som andra klasser ska kunna använda ska vara publika

- De variabler som klassen själv ska kontrollera ska vara privata – Andra klasser kan ändra/hämta värden med hjälp av setter/getter (inkapsling)

Page 58: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

58

Objektorienterad analys

Page 59: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

59

Objektorienterad analys(OOA)

- Analysera problemet

- Vad ska programmet göra? – Skapa användningsfall

- Bestäm vilka klasser som ska användas och hur de ska samarbeta

Page 60: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

60

Objektorienterad design(OOD)

- Förfina och detaljera analysen

- Bestäm vilka metoder och variabler som ska ingå i klasserna

Page 61: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

61

Objektorienterad Programmering(OOP)

- Implementera designen i något objektorienterat språk (Java, C++, C#,...)

Page 62: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

62

OOA/OOD – Översikt på arbetsgången

- Ta fram objektkandidater

- Grovrensa bland objekten

- Klassifiera objekten

- Gruppera och beskriv relationer mellan klasserna

- Ta fram användningsfall och validera systemet

- Rita klassdiagram

- Detaljdesigna klasser

Page 63: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

63

OOA/OOD – Ta fram objektkandidater

- Brainstorming

- Substantiv-verb metoden: – Substantiv: Möjliga objektet – Verb: Möjliga metoder

Checklista:- Faktiska saker (bil, hus)- Platser(rum, trädgård)- Begrepp(bankkonto, transaktion)- Roller(kund, spelare)- Händelser(landning, avbrott)- ...

Page 64: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

64

OOA/OOD – Grovrensa bland objekten

- Finns det dubbletter? – Är några objekt samma, men har olika namn?

- Är några orimliga och borde vara variabler? Ex. Bör namnet på en person vara en klass eller en instansvariabel?

Page 65: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

65

OOA/OOD – Klassificera objekten

- Arbeta till exempel CRC-kort – C- class – klassens namn – R- responsibility --- Vad vet objekten av en klass eller vad gör objekten för att fylla sin funktion? Ex. Ett objekt av klassen Person vet namnet på personen – C- collaborators, --- Vilka klasser samarbetar klassen med?

–CRC-korten kan flyttas runt, uppdateras och slängas i efterhand

Page 66: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

66

OOA/OOD – Gruppera och beskriv relationer mellan klasser

- Vilka klasser hör ihop? – Lämpligt med arv/gränssnitt? – Placera I paket?

Page 67: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

67

OOA/OOD – Användningsfall och validering

- Användningsfall – Vad ska programmet utföra?

- Validering – Kan klasserna användas för att utföra användningsfallen – Har vi rätt klasser? – Har vi hittat alla klasser som behövs? – Vilka klasser samarbetar och hur?

Page 68: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

68

OOA/OOD – Rita klassdiagram

- Baserat på analysen

Page 69: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

69

OOA/OOD – Detaljdesigna klasser

- Vilka metoder behöver vi? – Framförallt icke-privata metoder – klassens gränssnitt

- Vilka variabler behövs? – Vilka datastrukturer är lämpliga att använda?

Page 70: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

70

Laboration 4

- Textbaserat äventyrsspel

- Skriv egen kod från grunden – Strukturera upp koden i lämpliga klasser – Använd lämpliga datastrukturer

- Läs igenom instruktionen och kraven ordentligt innan ni sätter i gång!

Page 71: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

71

Kommande veckor

Laboration 3: deadline: 13/10

Laboration 4: deadline: 29/10 Laborationstillfällen: 13/10 och 20/10

Nästa föreläsning: 3/11 - Repetition - Exempeltenta - Maila in önskemål

Det mesta schemalagda är slut– Mycket eget arbete- Maila om ni behöver hjälp/undrar något!

Anmäl er till tentan i Studentportalen

Page 72: Programmering för språkteknologer II, HT2014 Avancerad …evelina/uv/uv14/pst2/F5/2014... · 2014. 10. 7. · 7 Associativa typer - Tänk om vi kan associera värden av godtycklig

72

Arbeta själv

- Arbeta med laborationerna

- Gör programmeringsövningar – Från boken – Laborationer fårn tidigare kursomgångar

- Läs till tentamen

- Arbeta med gamla tentor