"Hej, Amigo! Jeg vil dedikere dagens foredrag til indkapsling . Du har allerede en generel idé om, hvad det er."

Indkapsling - 1

Så hvad er fordelene ved indkapsling? Der er mange, men jeg vil pege på fire, der efter min mening er vigtigst:

1) Gyldig intern tilstand.

Programmer har ofte flere klasser, der interagerer med det samme objekt. Ved at interagere samtidigt med objektets interne data kan de krænke objektets dataintegritet, hvilket får objektet til at stoppe med at fungere korrekt.

Så objektet skal spore eventuelle ændringer af dets interne data, eller endnu bedre – det bør være den, der foretager disse ændringer.

Hvis vi ikke ønsker, at en klassevariabel skal ændres af andre klasser, så erklærer vi den privat , hvilket betyder, at kun den klasses metoder kan få adgang til den. Hvis vi ønsker, at variabler skal være skrivebeskyttede for andre klasser, tilføjer vi public getter til disse variable.

For eksempel vil vi måske have, at alle skal vide, hvor mange elementer der er i vores samling, men ingen bør kunne ændre det uden vores tilladelse. I dette tilfælde erklærer vi en variabel privat int count og en metode public getCount() .

Korrekt indkapsling garanterer, at andre klasser ikke direkte kan få adgang til vores klasses interne data og følgelig ikke kan ændre dem, uden at vi er i stand til at kontrollere deres handlinger. De skal kalde metoder på klassen, der indeholder de variable, der vil blive ændret.

Det er bedst at antage, at andre programmører altid vil bruge dine klasser på den måde, der er mest bekvem for dem, ikke på den måde, der ville være sikrest for dig (eller din klasse). Dette er en kilde til fejl og en måde at forhindre dem på.

2) Parameterkontrol.

Nogle gange er du nødt til at kontrollere de parametre, der er overført til din klasses metoder. Antag for eksempel, at vi har en klasse, der repræsenterer en "person", og du kan angive dens fødselsdato. Vi bør kontrollere, at alle data, der sendes ind, stemmer overens med programmets logik og klassens logik. For eksempel er der ingen 13. måned, ingen 30. februar osv.

"Hvorfor ville nogen angive en fødselsdato den 30. februar?"

"Tja, først og fremmest kan det være resultatet af en dataindtastningsfejl."

For det andet, før et program fungerer som et urværk, kan det have masser af fejl. For eksempel kan sådan noget ske.

En programmør skriver kode, der bestemmer, hvem der har fødselsdag i overmorgen. Lad os sige, at det er den 3. marts i dag. Programmet føjer 2 til den aktuelle dato og finder alle, der er født den 5. marts. Så langt, så godt.

Men når den 30. marts kommer, finder programmet ikke nogen, da der ikke er nogen 32. marts. Programmer er langt mindre buggy, når metoder udfører parameterkontrol."

"Jeg kan huske, da vi studerede ArrayList, jeg kiggede på dens kode, og der var kontrol i get- og set-metoderne for at sikre, at indeksparameteren er større end eller lig med nul og mindre end længden af ​​arrayet. Koden ville kaste en undtagelse, hvis arrayet ikke havde et element svarende til indekset.

"Ja, det er klassisk inputkontrol. "

3) Færre fejl ved ændring af kode i klasser.

Antag, at vi skrev en virkelig hjælpsom klasse som en del af et kæmpe projekt. Alle kan lide det så meget, at andre programmører begyndte at bruge det hundredvis af steder i deres egen kode.

Klassen viste sig at være så nyttig, at du besluttede dig for at forbedre den. Men hvis du slipper af med nogen af ​​metoderne i klassen, vil koden for snesevis af andre programmører ikke længere kompilere. De skulle hurtigt omskrive deres kode. Og jo mere omskrivning der sker, jo flere muligheder er der for fejl. Hvis du jævnligt bryder bygningen, vil du blive hadet.

Men hvis vi ændrer metoder, der er markeret som private, ved vi, at disse metoder ikke kaldes af andres kode nogen steder. Vi kan omskrive dem og ændre antallet og typen af ​​parametre, og afhængig kode vil stadig fungere. Eller i det mindste vil den stadig kompilere.

4) Vi definerer, hvordan andre objekter vil interagere med vores objekt.

Vi kan begrænse, hvilke handlinger der kan udføres på vores objekt. For eksempel ønsker vi måske kun én forekomst af en klasse, der skal oprettes – også selvom den oprettes flere steder samtidigt i projektet. Og det kan vi opnå ved hjælp af indkapsling.

Indkapsling - 2

Indkapsling giver os mulighed for at pålægge yderligere begrænsninger , der kan blive til yderligere fordele . For eksempel er String-klassen implementeret som et uforanderligt objekt. En forekomst af String-klassen kan ikke ændres mellem dens oprettelse og dens ødelæggelse. Alle metoder i String-klassen (remove, substring, ...) returnerer en ny streng og ændrer på ingen måde det objekt, de kaldes på.

"Hellige ko. Så sådan er det."

"Indkapsling er spændende."

"Jeg er enig."