logo

Indkapsling i Java

Indkapsling i Java er et grundlæggende koncept i objektorienteret programmering (OOP), der refererer til bundling af data og metoder, der opererer på disse data inden for en enkelt enhed, som kaldes en klasse i Java. Java Encapsulation er en måde at skjule implementeringsdetaljerne for en klasse fra adgang udefra og kun afsløre en offentlig grænseflade, der kan bruges til at interagere med klassen.

I Java opnås indkapsling ved at erklære instansvariablerne i en klasse som private, hvilket betyder, at de kun kan tilgås inden for klassen. For at tillade udefrakommende adgang til instansvariablerne er der defineret offentlige metoder kaldet getters og settere, som bruges til at hente og ændre værdierne af instansvariablerne hhv. Ved at bruge gettere og sættere kan klassen håndhæve sine egne datavalideringsregler og sikre, at dens interne tilstand forbliver konsistent.



Implementering af Java Encapsulation

Nedenfor er eksemplet med Java Encapsulation:

Java




// Java Program to demonstrate> // Java Encapsulation> // Person Class> class> Person {> >// Encapsulating the name and age> >// only approachable and used using> >// methods defined> >private> String name;> >private> int> age;> >public> String getName() {>return> name; }> >public> void> setName(String name) {>this>.name = name; }> >public> int> getAge() {>return> age; }> >public> void> setAge(>int> age) {>this>.age = age; }> }> // Driver Class> public> class> Main {> >// main function> >public> static> void> main(String[] args)> >{> >// person object created> >Person person =>new> Person();> >person.setName(>'John'>);> >person.setAge(>30>);> >// Using methods to get the values from the> >// variables> >System.out.println(>'Name: '> + person.getName());> >System.out.println(>'Age: '> + person.getAge());> >}> }>

kan android spille gamepigeon
>

>

Produktion

Name: John Age: 30>

Indkapsling er defineret som indpakning af data under en enkelt enhed. Det er den mekanisme, der binder kode og de data, den manipulerer sammen. En anden måde at tænke indkapsling på er, at det er et beskyttende skjold, der forhindrer data i at blive tilgået af koden uden for dette skjold.

  • Teknisk set i indkapsling er variablerne eller dataene for en klasse skjult for enhver anden klasse og kan kun tilgås gennem en hvilken som helst medlemsfunktion i dens egen klasse, hvor den er erklæret.
  • Som ved indkapsling er dataene i en klasse skjult for andre klasser ved hjælp af dataskjulningskonceptet, som opnås ved at gøre medlemmerne eller metoderne i en klasse private, og klassen eksponeres for slutbrugeren eller verden uden at give nogen detaljer bag implementering ved hjælp af abstraktionskonceptet, så det er også kendt som en kombination af dataskjul og abstraktion .
  • Indkapsling kan opnås ved at erklære alle variabler i klassen som private og skrive offentlige metoder i klassen for at indstille og få værdierne af variabler.
  • Det er mere defineret med setter og getter-metoden.

Fordele ved indkapsling

  • Dataskjul: det er en måde at begrænse adgangen til vores datamedlemmer ved at skjule implementeringsdetaljerne. Indkapsling giver også en måde at skjule data på. Brugeren vil ikke have nogen idé om den indre implementering af klassen. Det vil ikke være synligt for brugeren, hvordan klassen gemmer værdier i variablerne. Brugeren vil kun vide, at vi overfører værdierne til en setter-metode, og variabler bliver initialiseret med den værdi.
  • Øget fleksibilitet: Vi kan gøre klassens variable skrivebeskyttet eller skrivebeskyttet afhængigt af vores krav. Hvis vi ønsker at gøre variablerne skrivebeskyttet, skal vi udelade setter-metoderne som setName(), setAlder() osv. fra ovenstående program, eller hvis vi ønsker at gøre variablerne skrivebeskyttet, skal vi udelade få metoder som getName(), getAge() osv. fra ovenstående program
  • Genanvendelighed: Indkapsling forbedrer også genanvendeligheden og er nem at ændre med nye krav.
  • Det er nemt at teste kode: Indkapslet kode er let at teste til enhedstest.
  • Frihed til at programmere til at implementere detaljerne i systemet: Dette er en af ​​de største fordele ved indkapsling, at det giver programmøren frihed til at implementere detaljerne i et system. Den eneste begrænsning for programmøren er at opretholde den abstrakte grænseflade, som udenforstående ser.

For eksempel: Programmereren af ​​redigeringsmenukoden i en teksteditor GUI kan i første omgang implementere klip- og indsæt-handlingerne ved at kopiere faktiske skærmbilleder ind og ud af en ekstern buffer. Senere kan han/hun være utilfreds med denne implementering, da den ikke tillader kompakt lagring af markeringen, og den ikke skelner mellem tekst og grafiske objekter. Hvis programmøren har designet snit-og-indsæt-grænsefladen med indkapsling i tankerne, bør skift af den underliggende implementering til en, der gemmer tekst som tekst og grafiske objekter i et passende kompakt format, ikke forårsage problemer for funktioner, der skal have grænseflader med denne GUI . Indkapsling giver således tilpasningsevne, for det tillader implementeringsdetaljerne for dele af et program at ændre sig uden at påvirke andre dele negativt.

Ulemper ved indkapsling i Java

  • Kan føre til øget kompleksitet, især hvis det ikke bruges korrekt.
  • Kan gøre det sværere at forstå, hvordan systemet fungerer.
  • Kan begrænse fleksibiliteten i implementeringen.

Eksempler, der viser dataindkapsling i Java

Eksempel 1:

Nedenfor er implementeringen af ​​ovenstående emne:

Java




// Java Program to demonstrate> // Java Encapsulation> // fields to calculate area> class> 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)> >{> >Area rectangle =>new> Area(>2>,>16>);> >rectangle.getArea();> >}> }>

>

>

Produktion

Area: 32>

Eksempel 2:

Programmet til at få adgang til variabler i klassen EncapsulateDemo er vist nedenfor:

Java




de tidlige mukere
// Java program to demonstrate> // Java encapsulation> class> Encapsulate {> >// private variables declared> >// these can only be accessed by> >// public methods of class> >private> String geekName;> >private> int> geekRoll;> >private> int> geekAge;> >// get method for age to access> >// private variable geekAge> >public> int> getAge() {>return> geekAge; }> >// get method for name to access> >// private variable geekName> >public> String getName() {>return> geekName; }> >// get method for roll to access> >// private variable geekRoll> >public> int> getRoll() {>return> geekRoll; }> >// set method for age to access> >// private variable geekage> >public> void> setAge(>int> newAge) { geekAge = newAge; }> >// set method for name to access> >// private variable geekName> >public> void> setName(String newName)> >{> >geekName = newName;> >}> >// set method for roll to access> >// private variable geekRoll> >public> void> setRoll(>int> newRoll) { geekRoll = newRoll; }> }> public> class> TestEncapsulation {> >public> static> void> main(String[] args)> >{> >Encapsulate obj =>new> Encapsulate();> >// setting values of the variables> >obj.setName(>'Harsh'>);> >obj.setAge(>19>);> >obj.setRoll(>51>);> >// Displaying values of the variables> >System.out.println(>'Geek's name: '> + obj.getName());> >System.out.println(>'Geek's age: '> + obj.getAge());> >System.out.println(>'Geek's roll: '> + obj.getRoll());> >// Direct access of geekRoll is not possible> >// due to encapsulation> >// System.out.println('Geek's roll: ' +> >// obj.geekName);> >}> }>

>

>

Produktion

Geek's name: Harsh Geek's age: 19 Geek's roll: 51>

Eksempel 3:

I ovenstående program er klassen Encapsulate indkapslet, da variablerne er erklæret private. Get-metoderne som getAge(), getName() og getRoll() er sat som offentlige, disse metoder bruges til at få adgang til disse variabler. Setter-metoderne som setName(), setAge(), setRoll() er også erklæret som offentlige og bruges til at indstille værdierne af variablerne.

Nedenfor er implementeringen af ​​det definerede eksempel:

Java




// Java Program to demonstrate> // Java Encapsulation> class> Name {> >// Private is using to hide the data> >private> int> age;> >// getter> >public> int> getAge() {>return> age; }> >// setter> >public> void> setAge(>int> age) {>this>.age = age; }> }> // Driver Class> class> GFG {> >// main function> >public> static> void> main(String[] args)> >{> >Name n1 =>new> Name();> >n1.setAge(>19>);> >System.out.println(>'The age of the person is: '> >+ n1.getAge());> >}> }>

>

>

Produktion

The age of the person is: 19>

Eksempel 4:

Nedenfor er implementeringen af ​​Java Encapsulation:

Java


java char til heltal



// Java Program to demonstrate> // Java Encapsulation> class> Account {> >// private data members to hide the data> >private> long> acc_no;> >private> String name, email;> >private> float> amount;> >// public getter and setter methods> >public> long> getAcc_no() {>return> acc_no; }> >public> void> setAcc_no(>long> acc_no)> >{> >this>.acc_no = acc_no;> >}> >public> String getName() {>return> name; }> >public> void> setName(String name) {>this>.name = name; }> >public> String getEmail() {>return> email; }> >public> void> setEmail(String email)> >{> >this>.email = email;> >}> >public> float> getAmount() {>return> amount; }> >public> void> setAmount(>float> amount)> >{> >this>.amount = amount;> >}> }> // Driver Class> public> class> GFG {> >// main function> >public> static> void> main(String[] args)> >{> >// creating instance of Account class> >Account acc =>new> Account();> >// setting values through setter methods> >acc.setAcc_no(90482098491L);> >acc.setName(>'ABC'>);> >acc.setEmail(>'[email protected]'>);> >acc.setAmount(100000f);> >// getting values through getter methods> >System.out.println(> >acc.getAcc_no() +>' '> + acc.getName() +>' '> >+ acc.getEmail() +>' '> + acc.getAmount());> >}> }>

>

>

Produktion

90482098491 ABC [email protected] 100000.0>