øving om innkapsling

Upload: hallvard

Post on 30-May-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 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