Iekapsulēšana ir viena no trim galvenajāmobjektorientētās programmēšanas (OOP) iezīmes. Pārējie divi ir polimorfisms un mantošana. Kopā tie veido OOP ietvaru, kas nosaka virkni iespēju rakstīt programmas dažādās valodās, izmantojot šos trīs principus. Savukārt uz objektu orientētām valodām ir skaidri jāievēro tās.
OOP pamati
Objektorientētā programmēšana balstās uz trim tās Visuma pīlāriem:
- Polimorfisms, kas atbild uz jautājumu, kā noteikta programmēšanas valoda izturas pret objektiem, kas ir savstarpēji saistīti līdzīgi.
- Mantojums, kas sniedz atbildi uz to, kā tiek stimulēta koda atkārtota izmantošana.
- Iekapsulēšana, kas ir atbilde uz jautājumu par to, kā tiek paslēpta ieviešana, un tāpēc tiek saglabāta datu integritāte.
Terminoloģija
Iekapsulēšana (programmēšana) irpiekļuves modifikatoru izmantošana, lai paslēptu programmas koda daļas no gala lietotāja. Tas savukārt nozīmē izstrādātāju vai mantojošo objektu.
"Iekapsulēšanas" jēdziena būtība
Definīcija nosaka to, kas atrodas iekapsulēšanas stadijānetieši slēpjas viss programmas kods vai tā daļa. "Iekapsulēšanas" jēdziena būtība ir manipulēt ar piekļuves modifikatoriem. Tas nozīmē, ka izstrādātājs pats izlemj, kuras īpašības, metodes un klases tiks pakļautas klienta klasei un kuras tiks paslēptas.
Piekļuves modifikatori
- publiska ("publiska" - publiska, atvērta, piekļuve) - publiska piekļuve gan pašreizējiem objektiem, klasēm, gan ārējai pasaulei;
- privāta ("privāta" - privāta, privāta, slēpta piekļuve) - slēgta piekļuve, kuras būtība ir pilnīgi pretēja iepriekšējai. Nodrošina piekļuvi tikai no pašreizējās klases;
- aizsargāta ("aizsargāta" - aizsargāta, daļēji slēpta, piekļuve) - piekļuve pašreizējai klasei un tās atvasinājumiem;
- noklusējums - nenoteikts piekļuves modifikators nozīmē, ka lauks / metode ir redzama visai pašreizējai klases paketei.
C # valodā ("C Sharp") papildus norādītajām valodām (izņemot pēdējo) ir arī šādi modifikatori:
- iekšējā ("iekšējā" - iekšējā piekļuve) - publiskā pieejamība pašreizējā krājumā, slēgta piekļuve visos pārējos gadījumos;
- iekšēji aizsargāta ("iekšēji aizsargāta" - iekšēja aizsargāta piekļuve) - divu modifikatoru apvienošana vienā, kurā izpaužas abu īpašības.
Iekapsulēšanas loma
Iekapsulēšanas mehānisms ļauj izslēgt ārēju ietekmi uz programmas kodu un tajā esošo datu ļaunprātīgu izmantošanu. Tas tiek darīts, apvienojot kodu un datus vienā veselumā.
Objekts un iekapsulēšana
Apvienojot programmatūras moduļa ieviešanu unkodā iegultos datus programmēšanā sauc par objektu. Tās saiknes ar iekapsulēšanu būtība slēpjas faktā, ka tieši šī tehnika ļauj uzturēt un nodrošināt attiecīgā mehānisma neatņemamu darbību.
Iekapsulēšanas priekšrocība
Iekapsulēšana ir veids, kā vienkāršot kodēšanas procesu. Aizkulisēs paliek daudzas koda rindas, un galvenajā klasē darbs tiek veikts ar objektu gadījumiem.
Datu aizsardzības ideja
Iekapsulēšana ir arī mehānisms, kasīsteno datu aizsardzības ideju. Objektorientētās programmēšanas programmēšanas loģika balstās uz faktu, ka lielāko daļu datu paslēps piekļuves modifikators privāts (privāts) vai aizsargāts (aizsargāts). Ārējā pasaule, klients nejauši vai tīši nevar sabojāt programmatūras moduļa ieviešanu. Tā kā patiesībā to ir ļoti viegli izdarīt, pat ja ne ar nolūku, iekapsulēšana ir ļoti labs princips.
Iekapsulēšanas vienības
Klase kā galvenā iekapsulēšanas vienībaapraksta datus un satur kodu, kas var darboties ar šiem datiem. Tas ir arī objekta celtniecības pamats. Savukārt pēdējais tiek attēlots kā klases eksemplārs.
- dalībnieki ir kods un dati, kas nonāk klasē;
- lauki vai instances mainīgie - tas ir klases definēto datu nosaukums;
- locekļa funkcijas - tās satur pašu kodu. Biedru funkcijas ir kopīgs nosaukums. Metodes ir īpašs gadījums.
Iekapsulēšana ar konkrētu piemēru
Iekapsulēšanas (programmēšanas) piemērs:
* Piezīme:
apraksts ir metodes / rekvizīta / mainīgā apraksts, tas ir, komentējot to, kas faktiski notiek programmā. Demonstrēts ar atvēršanas / aizvēršanas tagiem
izmantojot sistēmu;
nosaukumvieta OOPLibrary.Auto
{
///
/// Šī klase ir paredzēta, lai aprakstītu automašīnas īpašības un darbības
///
sabiedriskā klase Auto
{
///
/// Mainīgais, kas izveidots, lai tajā ierakstītu automašīnas vecumu, jo izstrādātājs uzskata, ka ārēja iejaukšanās šajā īpašumā nav nepieciešama
/// tas ir atzīmēts ar privātu modifikatoru, tas ir, slēgtu, privātu piekļuvi (skat. aprakstu iepriekš).
///
private int _age;
///
/// Būla mainīgais (tikai divas iespējamās vērtības - vai nu jā, vai nē), kas raksturo, vai automašīna pašlaik pārvietojas
/// Tas arī nedrīkst būt atvērts gala lietotājam, lai kāds viņš būtu. Tādēļ šim mainīgajam tiek piešķirts arī privātas piekļuves modifikators "privāts"
///
privāts bool _isMoving;
///
/// Šajā virknes mainīgajā vajadzētu būt informācijai par automašīnas krāsu. To var pakļaut izmaiņas ārējām ietekmēm
/// tāpēc Krāsai ir atlasīts "publiskais" atvērtās piekļuves modifikators.
///
publiskā virkne Krāsa;
///
/// Šajā konkrētajā gadījumā mēs pieņemam, ka arī automašīnas nosaukumu var mainīt
/// tiek piešķirts publiskais modifikators (atvērta piekļuve visiem, neatkarīgi no klases vai montāžas).
///
public string Name;
///
/// Klases konstruktors tiek atvērts, un visas īpašības, kas izteiktas ar mainīgajiem un iestatītas nedaudz agrāk, iegūst savas vērtības
///
publiskais auto ()
{
_vecums = 5;
_izkustina = nepatiesa;
Krāsa = "Violets";
Nosaukums = "Skoda Octavia";
}
///
/// Metode īsteno automašīnas vecuma vērtības atgriešanu. Kāpēc tas ir nepieciešams?
/// privātas piekļuves modifikators neļauj klientam to modificēt.
///
/// Atgriež automašīnas vecumu.
publiskā virkne GetAge ()
{
atgriezties "Pašreiz izvēlētajai mašīnai" + _age + "ir gadi.";
}
///
/// Ja automašīna nekustās, šī metodeīsteno kustības sākumu. Pārbauda mainīgo, kas norāda automašīnas stāvokli (neatkarīgi no tā, vai tas brauc vai nē), un, atkarībā no rezultātiem, tiek veikta atbilstoša darbība / tiek parādīts atbilstošs ziņojums.
///
public void Sākt ()
{
ja (_izkustas)
{
Console.WriteLine ("Kustība jau ir sākusies");
}
cits
{
_izkustina = patiess;
Console.WriteLine ("Gatavs, uzmanība .. Ejam! Ejam!");
}
}
///
/// Ja kustība tika sākta, tad šī metode to aptur. Tāda pati programmas loģika kā iepriekšējā izskatītajā gadījumā.
///
publiska anulēšana Stop ()
{
ja (_izkustas)
{
_izkustina = nepatiesa;
Console.WriteLine ("Stop, automašīna");
}
cits
{
Console.WriteLine ("Kļūda. Automašīna jau stāv uz vietas, nekustās");
}
}
///
/// Pagriezieties pa kreisi, ja transportlīdzeklis pārvietojas
///
public void MoveLeft ()
{
ja (_izkustas)
{
Console.WriteLine ("Pagriezies pa kreisi");
}
cits
{
Console.WriteLine ("Kļūda. Automašīna stāv uz vietas. Pagrieziena funkcija pašlaik nav pieejama");
}
}
///
/// Līdzīga metode ar pagriešanos pa labi
///
public void MoveRight ()
{
ja (_izkustas)
{
Console.WriteLine ("Pagrieziens pa labi tika veiksmīgi veikts");
}
cits
{
Console.WriteLine ("Kļūda. Automašīna vēl nav pārvietojusies. Pagriešanās pa labi pašlaik ir darbība, kuru nevar veikt.");
}
}
}
}