You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

Noen objekter har hovedsaklig som formål å huske og håndtere data, og disse kaller vi data- eller tilstandsorienterte. Et eksempel på dette er et Person-objekt som hånderer data tilsvarende det en finner på et visittkort. Et slik objekt gjør ikke så mye mer enn å lagre attributt-verdier, og tilbyr (stort sett bare) operasjoner for å lese og endre attributtene.

Anta at Person-objektet håndterer verdier for navn, fødselsdato og e-post-adresse. Hvert Person-objekt vil ha unike verdier, som leses og settes med egne operasjoner. Før en definerer disse operasjonene må en gi verdiene navn og bestemme hvilken datatype som er logisk for hvert av dem. Datatypene vil vi finne igjen i parameter- og returntypene for getter- og setter-operasjonene. F.eks. kan vi kalle bruke fullName og String for navnet til personen og det vil gi opphav til operasjonene String getFullName() og void setFullName(String). En mulig innkapsling av disse verdiene er vist under.

Innkapsling av navn, fødselsdato og e-postPersonString getFullName()void setFullName(String)Date getDateOfBirth()void setDateOfBirth(Date)String getEmail()void setEmail(String)

Merk at vi kan velge andre navn og typer til attributtet som brukes til å lagre verdien, for å gjøre det mer praktisk å bruke verdien internt i klassen. F.eks. kan vi ha to attributter for lagre e-post-adresser, ett for brukernavnet og ett for domenet/tjenesten, selv om vi har valgt å kapsle dem inn e-post-verdien med operasjonene String getEmail() og void setEmail(String). Dette kan gjøre koden internt i klassen enklere, selv om det kan gjøre implementasjon av operasjonene litt mer komplisert. Implementasjonen kan være som vist under:

Implementasjon av navn, fødselsdato og e-postPersonString nameDate dateOfBirthString emailUserString emailDomainString getFullName()void setFullName(String)Date getDateOfBirth()void setDateOfBirth(Date)String getEmail()void setEmail(String)

Håndtering av attributter for enkeltverdier er nokså enkelt, men når ett attributt tilsvarer mange verdier, så blir det mer komplisert, kanskje mest fordi det er flere valg å ta omkring både innkapslingsmetoder og implementasjon av attributtene. Ta som eksempel håndtering av barna til en person. Siden en kan ha flere av dem, så kan en ikke innkapsle dem med Person getChild() og setChild(Person). En variant er å bruke tabeller, altså Person[] getChildren() og void setChildren(Person[]), men det vil gjøre enkle operasjoner som å legge til barn mer komplisert å kode for de som bruker Person-klassen. Derfor er det bedre å velge en innkapsling som er mer skreddersydd for bruken av dataene.

 

 

  • No labels