Programmering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/



Relevanta dokument
Programmering för språkteknologer II, HT2011. Rum

Föreläsning 7. Träd och binära sökträd

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Dugga Datastrukturer (DAT036)

Tentamen TEN1 HI

Programmering för språkteknologer II, HT2011. Rum

Interfacen Set och Map, hashtabeller

Föreläsning 14 Innehåll

Tentamen OOP

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Föreläsning 6: Introduktion av listor

OOP Objekt-orienterad programmering

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

TENTAMEN OOP

Objektorienterad programmering D2

Diskutera. Hashfunktion

Objektorienterad Programkonstruktion

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 27 maj 2008

Objektorienterad Programmering (TDDC77)

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering DAT043. Föreläsning 9 12/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

Föreläsning 10 Innehåll

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Föreläsning 9: Arv och UML

SMD 134 Objektorienterad programmering

Föreläsning 10. ADT:er och datastrukturer

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Föreläsning 10 Innehåll. Diskutera. Hashtabeller. Hashfunktion. hashfunktion. hashkod (ett heltal)

Grundläggande programmering med C# 7,5 högskolepoäng

Föreläsning 11 Innehåll

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Imperativ programmering. Föreläsning 4

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

OOP Objekt-orienterad programmering

Objektsamlingar i Java

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Inlämningsuppgift och handledning

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objektorienterad programmering i Java

Försättsblad till skriftlig tentamen vid Linköpings Universitet

TDDD78 Viktiga begrepp, del 2

Objektorienterad programmering i Java I

Programmering A C# VT Ett kompendie över Programmering A (50p) i c# Stefan Fredriksson

Föreläsning 5 Datastrukturer (DAT037)

Tentamen för kursen Objektorienterad programvaruutveckling GU (DIT010)

Lösningsförslag till exempeltenta 1

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen, EDAA01 Programmeringsteknik fördjupningskurs

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

DAT043 Objektorienterad Programmering

OOP Omtenta

Tentamen Datastrukturer, DAT037 (DAT036)

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Sätt att skriva ut binärträd

TENTAMEN OOP

Tentamen i Objektorienterad programmering

Tentamen, EDAA20/EDA501 Programmering

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen Datastrukturer D DAT 036/DIT960

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 9 Innehåll

Inlämningsuppgift och handledning. Föreläsning 11 Innehåll. Diskutera. Hashtabeller

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.

Föreläsning 4 Datastrukturer (DAT037)

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Tentamen, EDA501 Programmering M L TM W K V

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

TENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: Tid: kl

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Träd, binära träd och sökträd. Koffman & Wolfgang kapitel 6, avsnitt 1 4

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

Laboration 1 - Grunderna för OOP i Java

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

PROG2 Tenta Gäller SP:PROG2, DSK2:PROG2, FK:PROG2, FK:OOP, DSV1:P2 och ITK:P2

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Laboration A Objektsamlingar

Transkript:

Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/

Idag - Hashtabeller - Kodkvalité - Objektorienterad analys - Övningar Komplexitet Objektorienterad analys/design 2

Hashtabeller 3

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 4

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: Kalle Anka Dator Bok nyckel: K A D B 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: Kalle Anka Dator Bok nyckel: K A D B Problem: Hur ska datorn veta var i arrayen K finns? 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: Kalle Anka Dator Bok nyckel: K A D B Problem: Hur ska datorn veta var i arrayen K finns? Lösning: Konvertera K till ett giltigt index med hjälp av en hashfunktion. 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: s2 s3 s4 s5 hashfunktion: nyckel: K A D B Lösning: Konvertera K till ett giltigt index med hjälp av en hashfunktion. 8

Hashtabeller Skapa hashtabell 0 1 2 3 4 5 6 7 HashMap<String,String> Dictionary = new HashMap<String,String>(100); 9

Hashtabeller insättning K A D B Kalle Anka Dator Bok 0 1 2 K Kalle 3 4 5 6 7 Sätt in ordet Kalle i ordlistan. dictionary.put("k", "Kalle"); 10

Hashtabeller insättning K A D B Kalle Anka Dator Bok 0 1 2 K Kalle 3 4 5 A Anka 6 7 Sätt in ordet Anka i ordlistan. dictionary.put("a", "Anka"); 11

Hashtabeller insättning K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 Sätt in ordet Dator i ordlistan. dictionary.put("d","dator"); 12

Hashtabeller insättning K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 B Bok Sätt in ordet Bok i ordlistan. dictionary.put("b", "Bok"); 13

Hashtabeller insättning K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 B Bok Nu har vi lagrat vår ordlista i hashtabellen. 14

Hashtabeller Sökning K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 B Bok Hur kan vi hitta ordet Kalle? String state = dictionary.get("k"); 15

Hashtabeller Sökning K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 B Bok Hur kan vi hitta ordet Anka? String state = dictionary.get("a"); 16

Hashtabeller Sökning K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 B Bok Hur kan vi hitta ordet Dator? String state = dictionary.get("d"); 17

Hashtabeller Sökning K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 B Bok Hur kan vi hitta ordet Bok? String state = dictionary.get("b"); 18

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 typ V står för value och kan vara av godtycklig typ 19

Hashtabeller Krockhantering Vad händer om två nycklar får samma index i hashtabellen? 20

Hashtabeller Krockhantering K A D B Kalle Anka Dator Bok 0 1 2 K Kalle 3 4 5 6 7 dictionary.put("k","kalle"); 21

Hashtabeller Krockhantering K A D B Kalle Anka Dator Bok 0 1 2 K Kalle 3 4 5 A Anka 6 7 dictionary.put("a","anka"); 22

Hashtabeller Krockhantering K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 dictionary.put("d","dator"); 23

Hashtabeller Krockhantering K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 dictionary.put("b","bok"); 24

Hashtabeller Krockhantering K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 dictionary.put("b","bok"); Index 2 i hashtabellen har redan ett värde, så nu blir det en krock. Hur ska vi lösa detta? 25

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 26

Hashtabeller Krockhantering länkning - Varje plats i hashtabellen innehåller en länkad lista K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 dictionary.put("b","bok"); 27

Hashtabeller Krockhantering länkning - Varje plats i hashtabellen innehåller en länkad lista 0 D Dator K A D B Kalle Anka Dator Bok 1 2 K Kalle 3 4 5 A Anka B Bok 6 7 dictionary.put("b","bok"); 28

Hashtabeller Krockhantering Länkning: Sökning 0 D Dator K A D B Kalle Anka Dator Bok 1 2 K Kalle 3 4 5 A Anka B Bok 6 7 Vilket ord finns lagrat i nyckel B? String state = dictionary.get("b")); 29

Hashtabeller Krockhantering Länkning: Sökning 0 D Dator K A D B Kalle Anka Dator Bok 1 2 K Kalle 3 4 5 A Anka B Bok 6 7 Vilket ord finns lagrat i nyckel B? String state = dictionary.get("b")); 30

Hashtabeller Krockhantering Länkning: Sökning 0 D Dator K A D B Kalle Anka Dator Bok 1 2 K Kalle 3 4 5 A Anka B Bok 6 7 Vilket ord finns lagrat i nyckel B? String state = dictionary.get("b")); 31

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

Hashtabeller Krockhantering Öppen adressering: Lagra på den första lediga platsen. K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 4 5 A Anka 6 7 dictionary.put("b","bok"); 33

Hashtabeller Krockhantering Öppen adressering: Lagra på den första lediga platsen. K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 B Bok 4 5 A Anka 6 7 dictionary.put("b","bok"); 34

Hashtabeller Krockhantering Öppen adressering: Lagra på den första lediga platsen. K Kalle A Anka D Dator B Bok S Stol 0 D Dator 1 2 K Kalle 3 B Bok 4 5 A Anka 6 7 dictionary.put("s","stol"); 35

Hashtabeller Krockhantering Öppen adressering: Lagra på den första lediga platsen. K Kalle A Anka D Dator B Bok S Stol 0 D Dator 1 2 K Kalle 3 B Bok 4 5 A Anka 6 7 dictionary.put("s","stol"); 36

Hashtabeller Krockhantering Öppen adressering: Lagra på den första lediga platsen. K Kalle A Anka D Dator B Bok S Stol 0 D Dator 1 2 K Kalle 3 B Bok 4 S Stol 5 A Anka 6 7 dictionary.put("s","stol"); 37

Hashtabeller Krockhantering Öppen adressering: Sökning K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 B Bok 4 S Stol 5 A Anka S Stol 6 7 dictionary.get("s"); 38

Hashtabeller Krockhantering Öppen adressering: Sökning K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 B Bok 4 S Stol 5 A Anka S Stol 6 7 dictionary.get("s"); 39

Hashtabeller Krockhantering Öppen adressering: Sökning K A D B Kalle Anka Dator Bok 0 D Dator 1 2 K Kalle 3 B Bok 4 S Stol 5 A Anka S Stol 6 7 dictionary.get("s"); 40

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

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 nycklar antal platser =0.75 42

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

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 44

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 45

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

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 47

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 48

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"); } 49

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 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 // Testa om o inte är en instans av Person else if (!(o instanceof Person)) return false; o instanceof klassnamn returnerar sant om o är en instans av klassen klassnamn, annars returneras falskt. 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; else { // Testa om instansvariablerna har // samma värde Person operson = (Person)o; return name == operson.name; } } } 52

Kodkvalité 53

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(); 54

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 som anropas flera gånger istället för att leta efter snarlika kodblock och ändra på var och en av dem. 55

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

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

Objektorienterad analys 58

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 59

Objektorienterad design(ood) - Förfina och detaljera analysen - Bestäm vilka metoder och variabler som ska ingå i klasserna 60

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

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 62

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) -... 63

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

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 65

OOA/OOD Gruppera och beskriv relationer mellan klasser - Vilka klasser hör ihop? Lämpligt med arv/gränssnitt? Placera I paket? 66

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

OOA/OOD Rita klassdiagram - Baserat på analysen 68

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

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

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 71

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 72