Šajā apmācībā jūs uzzināsit par iekapsulēšanu un datu slēpšanu Java ar piemēru palīdzību.
Java iekapsulēšana
Iekapsulēšana ir viena no objektorientētās programmēšanas galvenajām iezīmēm. Iekapsulēšana attiecas uz lauku un metožu apvienošanu vienā klasē.
Tas neļauj ārējām klasēm piekļūt un mainīt klases laukus un metodes. Tas arī palīdz panākt datu slēpšanu .
1. piemērs: Java iekapsulēšana
class Area ( // fields to calculate area int length; int breadth; // constructor to initialize values Area(int length, int breadth) ( this.length = length; this.breadth = breadth; ) // method to calculate area public void getArea() ( int area = length * breadth; System.out.println("Area: " + area); ) ) class Main ( public static void main(String() args) ( // create object of Area // pass value of length and breadth Area rectangle = new Area(5, 6); rectangle.getArea(); ) )
Rezultāts
Platība: 30
Iepriekš minētajā piemērā mēs esam izveidojuši klasi ar nosaukumu Area. Šīs klases galvenais mērķis ir aprēķināt platību.
Lai aprēķinātu platību, mums ir divi mainīgie: garums un platums, un metode: getArea()
. Tādējādi mēs apvienojām šos laukus un metodes vienā klasē.
Šeit laukiem un metodēm var piekļūt arī no citām klasēm. Tādējādi tā nav datu slēpšana .
Tā ir tikai iekapsulēšana . Mēs vienkārši glabājam līdzīgus kodus.
Piezīme . Cilvēki bieži uzskata iekapsulēšanu par datu slēpšanu, taču tā nav pilnīgi taisnība.
Iekapsulēšana attiecas uz saistīto lauku un metožu apvienošanu kopā. To var izmantot, lai panāktu datu slēpšanu. Iekapsulēšana pati par sevi nav datu slēpšana.
Kāpēc iekapsulēšana?
- Java valodā iekapsulēšana palīdz mums kopā saglabāt saistītos laukus un metodes, kas padara mūsu kodu tīrāku un viegli lasāmu.
- Tas palīdz kontrolēt mūsu datu lauku vērtības. Piemēram,
class Person ( private int age; public void setAge(int age) ( if (age>= 0) ( this.age = age; ) ) )
Šeit mēs veicam vecuma mainīgoprivate
un pielietojam loģikusetAge()
metodes iekšienē . Tagad vecums nevar būt negatīvs. - Par vaislas un noteicēji metodes nodrošina tikai lasīšanas vai rakstīšanas tikai piekļuvi mūsu klases laukiem. Piemēram,
getName() // provides read-only access setName() // provides write-only access
- Tas palīdz atdalīt sistēmas komponentus. Piemēram, kodu varam iekapsulēt vairākos saišķos.
Šos atdalītos komponentus (saišķi) var izstrādāt, pārbaudīt un atkļūdot neatkarīgi un vienlaikus. Jebkuras izmaiņas noteiktā komponentā neietekmē citus komponentus. - Mēs varam panākt arī datu slēpšanu, izmantojot iekapsulēšanu. Iepriekš minētajā piemērā, ja mainām garuma un platuma mainīgo uz privātu, piekļuve šiem laukiem ir ierobežota.
Viņi tiek paslēpti no ārējām klasēm. To sauc par datu slēpšanu .
Datu slēpšana
Datu slēpšana ir veids, kā ierobežot mūsu datu dalībnieku piekļuvi, slēpjot ieviešanas detaļas. Iekapsulēšana arī nodrošina iespēju slēpt datus.
Mēs varam izmantot piekļuves modifikatorus, lai panāktu datu slēpšanu. Piemēram,
2. piemērs: Datu slēpšana, izmantojot privāto specifikatoru
class Person ( // private field private int age; // getter method public int getAge() ( return age; ) // setter method public void setAge(int age) ( this.age = age; ) ) class Main ( public static void main(String() args) ( // create an object of Person Person p1 = new Person(); // change age using setter p1.setAge(24); // access age using getter System.out.println("My age is " + p1.getAge()); ) )
Rezultāts
Mans vecums ir 24 gadi
Iepriekš minētajā piemērā mums ir private
lauka vecums. Tā kā tas ir private
, tam nevar piekļūt ārpus klases.
Lai piekļūtu vecumam, mēs izmantojām public
metodes: getAge()
un setAge()
. Šīs metodes sauc par getter un setter metodēm.
Vecuma noteikšana par privātu ļāva mums ierobežot nesankcionētu piekļuvi ārpus klases. Tā ir datu slēpšana .
Ja mēģināsim piekļūt vecuma laukam no galvenās klases, mēs saņemsim kļūdu.
// error: age has private access in Person p1.age = 24;