Lektion 12 - Webb Academy

Download Report

Transcript Lektion 12 - Webb Academy

Objektorienterad programmering
Föreläsning 12
© Copyright
Mahmud Al Hakim
[email protected]
www.webbacademy.se
Agenda






Ett objektorienterat exempel
Repetition
Mer om arv
Abstrakta klasser
Abstrakta metoder
Indexerare
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
2
1
Ett objektorienterat exempel

Vi skall skriva ett program som låter användaren spela
kortspelet Tjugoett med datorn.
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
3
Kortspelet Tjugoett







Spelet går till så att användaren får ett kort i taget och
efter varje kort får avgöra om han vill ha ytterligare kort
eller inte.
Det gäller för användaren att försöka få summan av
kortens valörer så nära 21 som möjligt utan att överstiga
detta tal.
Ess räknas som antingen 1 eller 14.
Om användaren får över 21 förlorar man.
Om användaren stannar under 21 får också datorn dra ett
kort i taget.
Om datorn får mer än 21 eller lägre poäng än användaren
vinner användaren, annars vinner datorn.
Datorn vinner på samma poäng.
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
4
2
Steg 1 – Klassen Kort



Klassen Kort beskriver spelkort.
Vi behöver 2 uppräkningstyper (enum) som beskriver
de fyra kortfärgerna (KLÖVER, RUTER, HJÄRTER,
SPADER) och de olika valörerna (TVÅ, TRE, etc).
Dessa uppräkningstyper deklareras utanför klassen. Vi
kommer att behöva typerna i andra klasser senare.
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
5
Uppräkningstyper
Vi startar
uppräkningen med 2
TRE blir 3 osv…
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
6
3
Klassen Kort
Instansvariabler och konstruktor
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
7
Klassen Kort
Egenskaper
Värde ger kortets
valör uttryckt som
ett heltal
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
8
4
Klassen Kort
ToString (version 1)
Kom ihåg!
Måste deklareras med ordet override
eftersom den ärver en virtuell metod med
samma namn från superklassen Object
Ger en textversion
av kortet t.ex.
KLÖVER TVÅ
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
9
Klassen Kort - Testprogram
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
10
5
Hur kan vi få bättre utskrifter?

För att översätta ett korts färg och valör till lämplig
textform använder vi två statiska fält (tabeller).
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
11
Klassen Kort
ToString (version 2)
Exempel
Om f är 0 så är
färgTab[0] = Kl
Exempel
Om Värde är 2
(vi startar ju med 2)
så är
valörTab[2-2] = 2
(Fält indexeras alltid från 0)
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
12
6
Steg 2 – Klassen Kortbunt
En generisk lista av
typen Kort
Där kommer vi att
spara alla kort
En slumpgenerator
behövs för att blanda
korten
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
13
Klassen Kortbunt
Metoden NyKortlek()
Metoden Clear
från klassen List tar bort
alla element från listan.
Detta behövs om vill
starta ett nytt spel
Nästlade for-satser
fyller lista med alla
kombinationer av
färger och valörer
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
Metoden Add
från klassen List lägger
till ett nytt kort
14
7
Klassen Kortbunt
Metoden ToString()
Med hjälp av foreach löper
vi igenom alla element i
listan.
Här anropas ToString
från klassen Kort
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
15
Klassen Kortbunt - Testprogram
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
16
8
Klassen Kortbunt
Egenskaper
Metoden Count
från klassen List returnerar
antal element i listan
En indexerare behövs om
man t.ex. vill skriva
s += bunt[5]
Där s är en variabel av
typen string och bunt är ett
objekt av klassen Kortbunt
Indexeraren returnerar ett
kort och metoden ToString i
klassen Kort anropas
automatiskt!
Då kan man titta på ett kort
utan att behöva ta bort
kortet från listan.
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
17
Klassen Kortbunt
Egenskaper - Test
Övning
Visa sista kortet i bunten
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
18
9
Klassen Kortbunt
Metoden Blanda()
Metoden byter plats på
två slumpmässiga kort
100 gånger
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
Metoden Count
från klassen List
returnerar antal element i
listan
Metoden Next
från klassen Random
generera ett slumptal
mellan 0 och max antal
element i listan
19
Klassen Kortbunt
Test Metoden Blanda()
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
20
10
Klassen Kortbunt
Flera användbara metoder
Metoden Insert
från klassen List infogar
ett kort i den första
positionen
Metoden RemovAt(0)
från klassen List tar bort
ett kort från den första
positionen
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
21
Klassen Kortbunt
Flera tester
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
22
11
Steg 3 – Klassen Spelare



En spelare kan antingen vara en människa eller en dator.
Klassen Spelare kan därför vara en superklass.
Vi vill inte skapa några objekt av klassen Spelare därför markerar
vi klassen som abstrakt (abstract)
Metoden Spela är en abstrakt metod (blir virtuell automatiskt).
Abstrakta metoder har ingen implementering (semikolon istället för klamrar).
Abstrakta metoder deklareras i subklasserna.
Subklasser som inte har egna versioner av alla abstrakta metoder måste också vara
abstrakta .
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
Klassen Spelare
Instansvariabler
Aktuell
poäng
23
leken är en referens till den kortlek
som används i spelet.
Relationen är "känner-till”.
En spelare måste känna till den
kortlek som används i spelet för att
kunna dra kort från den.
Fråga
Vad händer om vi skriver
Kortbunt leken = new Kortbunt();
hand är en kortbunt
som beskriver de kort
spelaren har på handen
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
24
12
Klassen Spelare
Konstruktorer och egenskaper
En ny spelare måste få en
referens till den kortlek som
används i spelet.
Referensen kopieras vidare
till spelarens instansvariabel
leken
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
25
Klassen Spelare
Metoden NyttSpel()
Poängen nollställs
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
Metoden SlängKorten
från klassen Kortbunt tar
bort alla kort
Metoden anropar i sin tur
Clear från klassen List som
tar bort alla element från
listan (som finns i Kortbunt).
26
13
Klassen Spelare
Metoden NyttKort() Del 1
Metoden tar bort det
översta kortet från leken
och lägger kortet överst i
hand
Kortet sparas och
returneras
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
27
Klassen Spelare
Metoden NyttKort() Del 2
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
28
14
Klassen Spelare
Metoden ToString
Indexeraren används här!
ToString från klassen Kort
anropas automatiskt
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
29
Steg 4 – Klassen Människa
Människa är en subklass
till klassen Spelare
En konstruktorinitierare läggs
efter parameterlistan.
: base anropar superklassens
konstruktor.
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
30
15
Klassen Människa
Metoden Spela() del 1
Spela är ju abstrakt
(virtuell) i superklassen
Vi måste åsidosätta
(överskugga) metoden i
subklassen med
nyckelordet override
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
Klassen Människa
Metoden Spela() del 2
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
31
Metoderna NyttSpel
och NyttKort finns i
superklassen
Spelare
32
16
Klassen Människa
Metoden Spela() del 3
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
33
Steg 4 – Klassen Dator
Människa är en
subklass till klassen
Spelare
Datorn måste känna till
motspelaren.
motspelare är en referens
(Känner-Till-Relation)
Konstruktorinitierare
läggs efter
parameterlistan.
: base anropar
superklassens
konstruktor.
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
34
17
Klassen Dator
Metoden Spela()
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
35
Steg 4 – Klassen Tjugoett
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
36
18
Klassen Tjugoett
Main forts.
Copyright 2014 -Mahmud Al Hakim www.webbacademy.se
37
19