Inkapsling i Java
Vad är inkapsling i Java?
Inkapsling i Java är en mekanism för att slå ihop variabler (data) och metoder (kod) till en enda enhet. Det är processen att dölja informationsdetaljer och skydda objektets data och beteende. Det är ett av de fyra viktiga OOP-koncepten. Inkapslingsklassen är lätt att testa, så den är också bättre för enhetstestning.
Klicka här. om videon inte är tillgänglig
Lär dig inkapsling i Java med exempel
För att i detalj förstå vad inkapsling är, överväg följande bankkontoklass med insättnings- och saldometoder
class Account { private int account_number; private int account_balance; public void show Data() { //code to show data } public void deposit(int a) { if (a < 0) { //show error } else account_balance = account_balance + a; } }
Anta att en hacker lyckades få tillgång till koden för ditt bankkonto. Nu försöker han sätta in beloppet -100 på ditt konto på två sätt. Låt se hans första metod eller tillvägagångssätt.
Metod 1: Han försöker sätta in ett ogiltigt belopp (säg -100) på ditt bankkonto genom att manipulera koden.
Nu är frågan - Är det möjligt? Låt undersöka. Vanligtvis sätts en variabel i en klass som "privat" som visas nedan. Den kan endast nås med de metoder som definieras i klassen. Ingen annan klass eller objekt kan komma åt dem.
Om en datamedlem är privat betyder det att den endast kan nås inom samma klass. Ingen extern klass kan komma åt privat datamedlem eller variabel i annan klass. Så i vårt fall kan hacker inte sätta in belopp -100 till ditt konto.
Metod 2: Hackers första tillvägagångssätt misslyckades med att sätta in beloppet. Därefter försöker han sätta in ett belopp -100 genom att använda "insättningsmetoden".
Men metodimplementering har en kontroll för negativa värden. Så det andra tillvägagångssättet misslyckas också.
Du exponerar alltså aldrig dina uppgifter för en extern part. Vilket gör din applikation säker.
Hela koden kan ses som en kapsel, och du kan bara kommunicera genom meddelandena. Därav namnet inkapsling.
Data gömmer sig Java
Data gömmer sig Java döljer variablerna i en klass från andra klasser. Den kan endast nås med metoden för deras nuvarande klass. Det döljer implementeringsdetaljerna för användarna. Men mer än att dölja data, det är avsett för bättre hantering eller gruppering av relaterad data. För att uppnå en mindre grad av inkapsling i Java, kan du använda modifierare som "skyddad" eller "offentlig". Med inkapsling kan utvecklare enkelt ändra en del av koden utan att påverka andra.
Getter och Setter in Java
Getter och Setter in Java är två konventionella metoder som används för att hämta och uppdatera värden för en variabel. De används främst för att skapa, ändra, ta bort och visa variabelvärdena. Settermetoden används för att uppdatera värden och gettermetoden används för att läsa eller hämta värdena. De är också kända som en accessor och mutator.
Följande kod är ett exempel på getter- och settermetoder:
class Account{ private int account_number; private int account_balance; // getter method public int getBalance() { return this.account_balance; } // setter method public void setNumber(int num) { this.account_number = num; } }
I exemplet ovan är getBalance()-metoden en getter-metod som läser värdet av variabel kontosaldo och setNumber()-metoden är en sättermetod som ställer in eller uppdaterar värdet för variabel kontonummer.
Abstraktion vs inkapsling
Ofta missförstås inkapsling med Abstraktion. Låt oss studera-
- Inkapsling handlar mer om "Hur" man uppnår en funktionalitet
- Abstraktion handlar mer om "vad" en klass kan göra.
Ett enkelt exempel för att förstå denna skillnad är en mobiltelefon. Där den komplexa logiken i kretskortet är inkapslad i en pekskärm, och gränssnittet tillhandahålls för att abstrahera det.
Fördelar med inkapsling i Java
- Inkapsling binder data med dess relaterade funktioner. Här betyder funktionalitet "metoder" och data betyder "variabler"
- Så vi håller variabel och metoder på ett ställe. Det stället är "klass". Klass är basen för inkapsling.
- Med Java Inkapsling kan du dölja (begränsa åtkomst) till viktiga datamedlemmar i din kod, vilket förbättrar säkerheten
- Som vi diskuterade tidigare, om en datamedlem förklaras "privat", kan den bara nås inom samma klass. Ingen extern klass kan komma åt datamedlem (variabel) av annan klass.
- Men om du behöver komma åt dessa variabler måste du använda offentlig "getter" och "setter" metoder.