Java inkapsuliacija

Šioje pamokoje su pavyzdžių pagalba sužinosite apie kaupimą ir duomenų slėpimą „Java“.

Java inkapsuliacija

Kapsuliavimas yra vienas pagrindinių objektinio programavimo bruožų. Inkapsuliacija reiškia laukų ir metodų sujungimą vienos klasės viduje.

Tai neleidžia išorinėms klasėms pasiekti ir keisti klasės laukų bei metodų. Tai taip pat padeda slėpti duomenis .

1 pavyzdys: „Java Encapsulation“

 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(); ) )

Rezultatas

 Plotas: 30

Ankstesniame pavyzdyje mes sukūrėme klasę pavadinimu Plotas. Pagrindinis šios klasės tikslas yra apskaičiuoti plotą.

Norėdami apskaičiuoti plotą, turime du kintamuosius: ilgis ir plotis ir metodas: getArea(). Taigi mes sujungėme šiuos laukus ir metodus į vieną klasę.

Čia laukus ir metodus galima pasiekti ir iš kitų klasių. Vadinasi, tai nėra duomenų slėpimas .

Tai tik kapsuliavimas . Mes tiesiog laikome panašius kodus kartu.

Pastaba : žmonės dažnai laiko kapsulę kaip duomenų slėpimą, tačiau tai nėra visiškai tiesa.

Inkapsuliacija reiškia susijusių laukų ir metodų sujungimą kartu. Tai gali būti naudojama norint slėpti duomenis. Kapsuliavimas savaime nėra duomenų slėpimas.

Kodėl inkapsuliacija?

  • „Java“ sistemoje kapsulės padeda išlaikyti susijusius laukus ir metodus kartu, todėl mūsų kodas yra švaresnis ir lengvai skaitomas.
  • Tai padeda valdyti mūsų duomenų laukų vertes. Pavyzdžiui,
     class Person ( private int age; public void setAge(int age) ( if (age>= 0) ( this.age = age; ) ) )

    Čia mes darome amžiaus kintamąjį privateir taikome logiką setAge()metodo viduje . Dabar amžius negali būti neigiamas.
  • „Getter and setter“ metodai suteikia prieigą prie mūsų klasės laukų tik skaitymui arba rašymui . Pavyzdžiui,
     getName() // provides read-only access setName() // provides write-only access
  • Tai padeda atsieti sistemos komponentus. Pavyzdžiui, kodą galime suskaidyti į kelis rinkinius.
    Šie atsieti komponentai (paketas) gali būti kuriami, išbandomi ir derinami nepriklausomai ir vienu metu. Bet kokie konkretaus komponento pakeitimai neturi jokio poveikio kitiems komponentams.
  • Mes taip pat galime pasiekti duomenų slėpimą naudodami inkapsuliaciją. Ankstesniame pavyzdyje, jei ilgio ir pločio kintamąjį pakeisime į privatų, prieiga prie šių laukų yra ribojama.
    Jie laikomi paslėpti nuo išorinių klasių. Tai vadinama duomenų slėpimu .

Duomenų slėpimas

Duomenų slėpimas yra būdas apriboti mūsų duomenų narių prieigą, paslėpiant išsamią įgyvendinimo informaciją. Kapsuliavimas taip pat suteikia galimybę slėpti duomenis.

Norėdami paslėpti duomenis, galime naudoti prieigos modifikatorius. Pavyzdžiui,

2 pavyzdys: duomenų slėpimas naudojant privatųjį specifikatorių

 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()); ) )

Rezultatas

 Mano amžius 24 metai

Ankstesniame pavyzdyje mes turime privatelauko amžių. Kadangi taip yra private, prie jo negalima prisijungti ne iš klasės.

Norėdami pasiekti amžių, mes naudojome publicmetodus: getAge()ir setAge(). Šie metodai vadinami getter ir setter metodais.

Amžiaus pavertimas privačiu leido mums apriboti neteisėtą prieigą ne iš klasės. Tai yra duomenų slėpimas .

Jei bandysime patekti į amžiaus lauką iš Pagrindinės klasės, gausime klaidą.

 // error: age has private access in Person p1.age = 24;

Įdomios straipsniai...