Download - øving Om Enkle Objekter
-
8/14/2019 ving Om Enkle Objekter
1/17
1
Enkle objekter
Enkle data-orienterte objekter felt
instansiering
navigering mellom objekter enkle (instans)metoder
toString()-metoden
-
8/14/2019 ving Om Enkle Objekter
2/17
2
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 Enkle Objekter
3/17
3
Struktur av Person-objekter 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;
#1: Person
String name = Marit
Person[ ] children =
#2: Person
String name = Hallvard
Person[ ] children =
-
8/14/2019 ving Om Enkle Objekter
4/17
4
Struktur av Person-objekter 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;
#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 Enkle Objekter
5/17
5
Struktur av Person-objekter 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 Enkle Objekter
6/17
6
Struktur av Person-objekter 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 Enkle Objekter
7/17
7
Struktur av Person-objekter 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 Enkle Objekter
8/17
8
Struktur av Person-objekter 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 Enkle Objekter
9/17
9
Struktur av Person-objekter 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 Enkle Objekter
10/17
10
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 Enkle Objekter
11/17
11
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 Enkle Objekter
12/17
12
Person-metoder
isMotherOf(Person)-metoden returnerer true hvis argumentet (ogsen Person) er moren til this (alts Person-objektet som isMotherOfkalles p. Merk at det koblinger (piler) skal sjekkes i begge retning:bde at this refererer riktig til Person-argumentet og at Person-argumentet refererer riktig til this.
isFatherOf(Person)-metoden er som isMotherOf, men sjekkerfarskap
isSiblingOf(Person)-metoden returnerer true hvis argumentet (ogsen Person) er ssken til this, alts har de samme foreldre. Merk at enikke er sin egen ssken!
isHalfSiblingOf(Person)-metoden returnerer true hvis argumentet(ogs en Person) er halvssken til this, alts deler n og kun nforelder.
Flgende uttrykk vil alle gi true: hallvard.isFatherOf(jens) marit.isMotherOf(anne) jens.isSiblingOf (anne) (men jens.isSiblingOf(jens) gir false)
-
8/14/2019 ving Om Enkle Objekter
13/17
13
toString()
Person p = new Person();// ved utskrift kalles toString()-metoden
System.out.println(p); // p.toString() kalles
For person er det nyttig skrive ut: eget navn
morens og farens navn
alle barnas navn
Fint for sjekke at objektstrukturen erkorrekt (som forventet)
-
8/14/2019 ving Om Enkle Objekter
14/17
14
Kongefamilien
Harald og Sonja Haakon og Mette-Marit
Ingrid Alexandra
Sigurd Magnus
Mrtha og Ari
Maud Angelica
Leah Isadora
Emma Tallulah
Tegn frst objektstrukturen, skriv s koden
Kan vre lurt med hjelpemetoder, for gjre koden
kortere, f.eks. Person createPerson(String name) og void initParents(Person person, Person father, Person mother),
eller en kombinasjon Person createPerson(String name, Person father, Person mother)
-
8/14/2019 ving Om Enkle Objekter
15/17
15
Kongefamilien Brukes som hovedprogram, enten
et Java-program med en main-metode, eller
et Scrava-program
Skriver ut en oversikt over kongefamilien vha.
Person-klassen sin toString()-metode opprett objektstrukturen som tilsvarer kongefamilien, og pass p ha n eller
flere variabler som refererer til Person-objektene
skriv ut strukturen ved bruke System.out.println() p alle objektene eller
evt. kun p Harald sitt Person-objekt, dersom dette implisitt skriver ut all
info. om etterkommerne
Viktigst sjekke at objektstrukturen stemmer, ibegge retninger, bde nedover og oppover i
Person-hierarkiet
-
8/14/2019 ving Om Enkle Objekter
16/17
16
Card-klassen
Card suit (kortfarge, en av S, H, D og C)
face (kortverdi, 1 (ess) til 13 (konge))
String toString()-metode returnerer suit og face somen String, f.eks. spar ess gir S1
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 Enkle Objekter
17/17
17
CardDeck-klassen
CardDeck cards, Card-tabell, som inneholder 52 kort
void build()-metoden 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
alts: S1, S2, ... S13, H1, H2, ... H13, D1, D2, ... D13, C1, C2, ... C13, Card getCard(int) skal returnere kortet p en bestemt posisjon
etter at build() er kalt skal getCard(0) gi kortet som representerer spar ess og
getCard(51) skal gi kortet som representerer klver konge
#1: CardDeck
Card[ ] cards =
#sparess: Card
String suit = S
int face = 1
#klverkonge: Card
String suit = C
int face = 13
...
...
etter build()
CardDeckCard[ ] cards