Download - øving Om Innkapsling
-
8/14/2019 ving Om Innkapsling
1/10
1
ving om innkapsling
Innkapsling av
Person Card og CardDeck
-
8/14/2019 ving Om Innkapsling
2/10
2
Innkapsling
Innkapsling utgjres av public-metoder konstruktr
hva slags data m oppgis nr et objekt lages
merk at ikke alle klasser har en public konstruktr
metoder
hva slags data skal kunne lese og hvordan
hva slags data skal kunne endres og hvordan
Hvilke regler for konsistens moverholdes av endringsmetodene?
-
8/14/2019 ving Om Innkapsling
3/10
3
Person-klassen Knytter sammen
familiemedlemmer mor og far: enkle felt
barn: n-dimensjonal tabell
Eksempel: Marit ogHallvard er foreldrenetil Jens og Anne
PersonString name
Person mother
Person father
Person[ ] children
#1: Person
String name = Marit
Person[ ] children =
#2: Person
String name = Hallvard
Person[ ] children =
#3: Person
String name = Jens
Person mother =
Person father =
#4: Person
String name = Anne
Person mother =
Person father =
-
8/14/2019 ving Om Innkapsling
4/10
4
Midlertidig inkonsistens Person marit = new Person(), hallvard = new
Person(); marit.name = Marit; hallvard.name = Hallvard; Person jens = new Person(); jens.name = Jens; Person anne = new Person(); anne.name = Anne;
marit.children = new Person[]{jens, anne} hallvard.children = new Person[]{jens, anne}
jens.mother = marit; jens.father = hallvard; anne.mother = marit; anne.father = hallvard;
#4: Person
String name = Anne
Person mother =
Person father =
#1: Person
String name = Marit
Person[ ] children =
#2: Person
String name = Hallvard
Person[ ] children =
#3: Person
String name = Jens
Person mother =
Person father =
-
8/14/2019 ving Om Innkapsling
5/10
5
Endelig konsistens Person marit = new Person(), hallvard = new
Person();
marit.name = Marit; hallvard.name = Hallvard;
Person jens = new Person(); jens.name = Jens;
Person anne = new Person(); anne.name = Anne;
marit.children = new Person[]{jens, anne}
hallvard.children = new Person[]{jens, anne}
jens.mother = marit; jens.father = hallvard; anne.mother = marit; anne.father = hallvard;
#4: Person
String name = Anne
Person mother =
Person father =
#1: Person
String name = Marit
Person[ ] children =
#2: Person
String name = Hallvard
Person[ ] children =
#3: Person
String name = Jens
Person mother =
Person father =
-
8/14/2019 ving Om Innkapsling
6/10
6
Tilstandenfrog etteret
metodekall til en public metode
skal vre konsistent!!!
Midlertidig inkonsistens er kun
lov innenforen public metode
-
8/14/2019 ving Om Innkapsling
7/10
7
Person-metoder
Kjnn og navn Person(char gender) konstruktr tar inn kjnn, som et tegn isMale()- og isFemale()-metodene sjekker kjnn
getName()- og setName(String)-metodene kapsler inn name-dataene. Etname m kun inneholde bokstaver og mellomrom.
Foreldre/barn-assosiasjon getChildCount() og getChild(int n) lar deg lese data om barn
getMother() og getFather() lar deg lese data om foreldre
setMother(Person), setFather(Person), addChild(Person) ogremoveChild() lar deg endre foreldreskap
Ekstra-metoder indexOfChild(Person) og containsChild(Person) brukes til finne barn isAncestorOf(Person) brukes for teste for forforeldreskap.
En person p1 er forforelder til p2 dersom p1 er far eller mor til p2, eller
p1 er forforelder til p2 sin far eller mor
-
8/14/2019 ving Om Innkapsling
8/10
8
Person-metoder
Konsistens m sikres!!! Eksempler: Dersom et barn legges til en kvinne/man, m hun/han
ogs bli mor/far til barnet.
Dersom mor/far til et barn nulles ut, m barnet ogs
fjernes fra mor/far.
Dersom et barn skifter far (f.eks. etter en DNA-test), s
m barnet fjernes fra den forrige faren og legges til den
nye.
-
8/14/2019 ving Om Innkapsling
9/10
9
Card-klassen
Innkapsling av Card konstruktr som tar inn
kortfarge (en av S, H, D og C) og
kortverdi (1 (ess) til 13 (konge))
get-metoder for lese farge og verdi
Hvilke felt du nsker bruker er opp til
deg, s lenge innkapslingen er riktig!
Card
String suit
int face
#sparess: Card
String suit = S
int face = 1
#klverkonge: Card
String suit = C
int face = 13
-
8/14/2019 ving Om Innkapsling
10/10
10
CardDeck-klassen
Innkapsling av CardDeck konstruktren skal fylle stokken med kort alle spar-kortene (S), deretter hjerter (H), ruter (D) og klver (C)
innenfor kortfargene, verdiene 1 oppover til og med 13
int getCardCount() skal returnere antall kort som er (igjen) i stokken
Card getCard(int) skal returnere kortet p en bestemt posisjon
rett etter new CardDeck() skal getCard(0) gi kortet som representerer spar ess oggetCard(51) skal gi kortet som representerer klver konge
Card[] deal(int n) skal dele ut n kort stokken og returnere disse. Regler : kortene skal deles ut fra enden, dvs. klver konge deles ut frst og spar ess til slutt
kortet som deles ut frst, skal ligge frst i tabellen som returneres, dvs. dersom firekort deles ut fra en ny stokk, skal tabellen inneholde klver konge, dame, knekt ogti i den rekkeflgen
antall kort, som returnert av getCardCount(), skal minke med n getCard(int) m ikke returnere kort som er delt ut
Hvilke felt du nsker bruker er opp til deg, slenge innkapslingen er riktig!
CardDeck
Card[ ] cards