Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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.

PlantUML Macro
titleInnkapsling av navn, fødselsdato og e-post
class Person {
	+String 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:

 

PlantUML Macro
titleImplementasjon av navn, fødselsdato og e-post
class Person {
	-String name
	-Date dateOfBirth
	-String emailUser
	-String emailDomain


	+String 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, f.eks. barna til en person, så blir det mer komplisert, kanskje mest fordi det er flere valg å ta omkring både innkapslingsmetoder og implementasjon av attributtene.