OOP – Inkapsling

Inkapsling är en av de central delarna i Objektorienterad programmering (OOP). De övriga är klass, arv och polymorfism.

Inkapsling kan man se som ett skydd för en klass så att den inte kan användas på fel sätt. Det kan också handla om att inte visa/exponera för många saker, speciellt inte sånt som inte är relevant för den som ska använda klassen.

Kort kan vi säga att det handlar om att förstå dessa fyra nyckelord som styr inkapsling för klasser, metoder och attribut:

  • public
  • internal
  • protected
  • private

En huvudregel som man bör tillämpa är att alltid vara så restriktiv med tillgång till metoder o attribut. Med andra ord; om något kan vara private så bör du använda private.

Public

Metoder och attribut som blir markerade public kan nås överallt. Man brukar benämna det publika som ”gränssnittet” till en klass. Var försiktig med att göra allt publikt. Kan du så bör du faktiskt göra allt privat.

Private

Man skulle kunna säga att private är lite raka motsatsen till public. Det är endast kod inifrån själva klassen som kan nå klassens metoder o attribut som är markerade privata.

Protected

För att protected ska spela någon roll så måste det finnas ett arv. Protected skyddar alla metoder o attribut så att endast klassen och dess subklasser kan använda dem. Man skulle kunna säga att attribut och metoder begränsas till ”inom familjen”.

Det är viktigt att tänka på om du vill att du eller andra ska kunna skapa subklasser från din klass. Vilka saker ska då subklassen få tillgång till?

Internal

Detta är kanske den minst vanliga. För att att internal ska spela någon roll så måste det finnas olika projekt. Internal fungerar som publikt men hindrar åtkomst om det sker från ett annat projekt eller en annan applikation. Oftast använder man internal när man skriver ”paket”, dvs. separata projekt som blir separata dll-filer. När dessa ”paket” sedan används av ett annat program (eller projekt) då spelar internal roll.

Sammanfattning

modifierare

i klassen

i subklasser

i andra projekt

i andra klasser

public

ja

ja

ja

ja

internal

ja

ja

nej

ja (i samma projekt)

protected

ja

ja

nej

nej

private

ja

nej

nej

nej

Videogenomgång

Videon nedan tar dig igenom ett komplett exempel där alla varianter av inkapsling demonstreras.

Övningar

Övning 1

Skapa en klass som beskriver en Bok. Du ska ha med följande egenskaper: Titel, Författare, AntalSidor. Klassen ska också ha en metod SkrivUt som skriver ut bokens info.

Skriv ett program som använder klassen Bok och demonstrerar att den fungerar.

Övning 2

Skydda alla egenskaperna;  Titel, Författare och AntalSidor så att det ej går att ändra dessa efter det att ett objekt av typen Bok har skapats.

Övning 3

Vad är skillnaden mellan private och protected? Formulera din egen förklaring eller förklara för en kompis.
Scroll to top