Tässä opetusohjelmassa opit kapseloinnista ja tietojen piilottamisesta Java-sovelluksessa esimerkkien avulla.
Java-kapselointi
Kapselointi on yksi olio-ohjelmoinnin pääpiirteistä. Kapselointi tarkoittaa kenttien ja menetelmien niputtamista yhden luokan sisällä.
Se estää ulompia luokkia pääsemästä luokan kenttiin ja menetelmiin ja vaihtamasta niitä. Tämä auttaa myös saavuttamaan tietojen piilottamisen .
Esimerkki 1: Java-kapselointi
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(); ) )
Tuotos
Alue: 30
Yllä olevassa esimerkissä olemme luoneet luokan nimeltä Area. Tämän luokan päätarkoitus on laskea pinta-ala.
Laskea ala, tarvitsemme kaksi muuttujaa: pituus ja leveys ja menetelmää: getArea()
. Siksi niputimme nämä kentät ja menetelmät yhden luokan sisälle.
Tässä kenttiä ja menetelmiä pääsee myös muilta luokilta. Siksi tämä ei ole tietojen piilottamista .
Tämä on vain kapselointi . Pidämme vain samanlaisia koodeja yhdessä.
Huomaa : Ihmiset pitävät kapselointia usein tietojen piilottamisena, mutta se ei ole täysin totta.
Kapselointi tarkoittaa liittyvien kenttien ja menetelmien niputtamista yhdessä. Tätä voidaan käyttää tietojen piilottamiseen. Kapselointi sinänsä ei ole tietojen piilottamista.
Miksi kapselointi?
- Java: ssa kapselointi auttaa meitä pitämään liittyvät kentät ja menetelmät yhdessä, mikä tekee koodistamme puhtaamman ja helppolukuisemman.
- Se auttaa hallitsemaan tietokenttien arvoja. Esimerkiksi,
class Person ( private int age; public void setAge(int age) ( if (age>= 0) ( this.age = age; ) ) )
Tässä teemme ikämuuttujanprivate
ja sovellamme logiikkaasetAge()
menetelmän sisällä . Ikä ei voi nyt olla negatiivinen. - Getter- ja setter-menetelmät tarjoavat vain luku- tai kirjoitusoikeuden luokan kenttiin. Esimerkiksi,
getName() // provides read-only access setName() // provides write-only access
- Se auttaa irrottamaan järjestelmän komponentit. Esimerkiksi voimme kapseloida koodin useisiin nippuihin.
Nämä irrotetut komponentit (paketti) voidaan kehittää, testata ja virheenkorjata itsenäisesti ja samanaikaisesti. Ja tietyn komponentin muutoksilla ei ole mitään vaikutusta muihin komponentteihin. - Voimme saavuttaa myös tietojen piilottamisen kapseloinnin avulla. Jos muutamme yllä olevassa esimerkissä pituus- ja leveysmuuttujan yksityiseksi, pääsy näihin kenttiin on rajoitettu.
Ja ne pidetään piilossa ulkoluokilta. Tätä kutsutaan tietojen piilottamiseksi .
Tietojen piilottaminen
Tietojen piilottaminen on tapa rajoittaa tietojemme jäsenten pääsyä piilottamalla toteutustiedot. Kapselointi tarjoaa myös tavan tietojen piilottamiseen.
Voimme käyttää pääsynmuokkaajia tietojen piilottamiseen. Esimerkiksi,
Esimerkki 2: Tietojen piilottaminen yksityisen määrittelijän avulla
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()); ) )
Tuotos
Ikäni on 24
Yllä olevassa esimerkissä meillä on private
kenttäikä. Koska se on private
, sitä ei voida käyttää luokan ulkopuolelta.
Iän saamiseksi olemme käyttäneet public
menetelmiä: getAge()
ja setAge()
. Näitä menetelmiä kutsutaan getter- ja setter-menetelmiksi.
Iän tekeminen yksityiseksi antoi meille mahdollisuuden rajoittaa luvatonta pääsyä luokan ulkopuolelle. Tämä on tietojen piilottamista .
Jos yritämme päästä ikäluokkaan pääluokasta, saamme virheen.
// error: age has private access in Person p1.age = 24;