what is abstraction java learn with examples
Denne vejledning forklarer, hvad der er Abstraktion i Java sammen med programmeringseksempler. Du lærer også, hvad der er en abstrakt klasse, og hvorfor bruges den:
I denne JAVA-serie vil vi diskutere de vigtige træk ved objektorienteret programmering (OOP), der også er kendt som fire søjler, dvs. abstraktion, indkapsling, arv og polymorfisme.
Den første søjle i OOP er 'Abstraktion'. 'Abstraktion er processen med at vælge data, der kun viser brugeren den relevante information.'
=> Se på Java Beginners Guide her.
Hvad du vil lære:
- Abstraktion i OOP
- Hvad er abstraktion i Java
- Forskellen mellem abstraktion og indkapsling
- Konklusion
Abstraktion i OOP
Enkelt sagt “viser” abstraktion kun de relevante attributter for objekter og “skjuler” de unødvendige detaljer.
For eksempel, når vi kører bil, er vi kun bekymrede over at køre bilen som at starte / stoppe bilen, accelerere / gå i stykker osv. Vi er ikke bekymrede for, hvordan den faktiske start / stop-mekanisme eller accelerere / bremseprocessen fungerer internt. Vi er bare ikke interesseret i disse detaljer.
Det, vi er bekymret for, er det “abstrakte” syn på disse operationer, der vil hjælpe os med at køre bilen fremad og nå vores destination. Dette er et simpelt eksempel på abstraktion.
Således har bilen alle mekanismer og processer på plads, men set fra slutbrugerens perspektiv, dvs. bilchaufførens perspektiv, vil han / hun kun være interesseret i det abstrakte syn på disse processer.
Abstraktion reducerer programmeringsindsatsen og derved kompleksiteten. En slutbruger, der bruger applikationen, behøver ikke være bekymret for, hvordan en bestemt funktion implementeres. Han / hun kan bare bruge funktionerne efter behov.
Således i abstraktion beskæftiger vi os med ideer og ikke begivenhederne. Dette betyder, at vi skjuler implementeringsoplysningerne for brugeren og kun udsætter funktionaliteten for slutbrugeren. Dermed vil brugeren kun vide “hvad det gør” snarere end “hvordan det gør”.
Abstraktion i OOP kan være af to typer.
# 1) Data abstraktion
I dataabstraktion opretter vi for det meste komplekse datatyper og skjuler deres implementering. Vi udsætter kun operationerne for at manipulere disse datatyper uden at gå i detaljer med deres implementering.
En fordel ved denne tilgang er, at vi når som helst kan ændre implementeringen uden at ændre den adfærd, der udsættes for brugeren.
# 2) Kontrol abstraktion
Kontrolabstraktion samler alle kontroludtalelser, der er en del af applikationen, og udsætter dem for en enhed. Denne funktion bruges, når vi skal udføre en funktionsfunktion ved hjælp af denne kontrolenhed.
Kontrolabstraktion udgør hovedenheden i struktureret programmering, og ved hjælp af kontrolabstraktion kan vi definere enkle funktioner til komplekse rammer.
Hvad er abstraktion i Java
Da Java er et OOP-sprog, kan abstraktion ses som en af de vigtige funktioner og byggesten i Java-sproget. I Java implementeres abstraktion ved hjælp af en abstrakt klasse og interface.
Så hvordan implementerer vi abstraktion i Java? Java leverer en “abstrakt” modifikator, der ikke er adgang til implementering af abstraktion. Denne abstrakte modifikator kan bruges med klasser og metoder, men ikke variabler.
Interfacet giver komplet abstraktion, dvs. det giver kun metodeprototyper og ikke deres implementering. En abstrakt klasse giver delvis abstraktion, hvor mindst en metode ikke skal implementeres.
I denne vejledning vil vi diskutere abstraktion med abstrakte klasser i detaljer. Vi vil udforske grænseflader i detaljer i vores efterfølgende tutorials.
Eksempel på Java-abstraktion
Lad os overveje nedenstående eksempel.
//abstract class abstract class Car{ abstract void accelerate(); } //concrete class class Suzuki extends Car{ void accelerate(){ System.out.println('Suzuki::accelerate'); } } class Main{ public static void main(String args()){ Car obj = new Suzuki(); //Car object =>contents of Suzuki obj.accelerate(); //call the method } }
Produktion:
Det enkle abstraktionsexempel, der er givet ovenfor, har en klasse Car. I denne klasse Car har vi en abstrakt metode til at accelerere (). Så arver vi denne klasse i Suzuki-klassen. Inde i Suzuki-klassen implementerer vi accelerationsmetoden.
Ovenstående eksempel viser simpelthen den måde, hvorpå en abstrakt klasse defineres, arves og derefter bruges i programmet.
Hvad er Java Abstract Class
Vi nævnte allerede, at Java implementerer abstraktion ved hjælp af abstrakte klasser og grænseflader. Lad os først undersøge alt om den abstrakte klasse.
opsætning af c ++ i formørkelse
En abstrakt klasse kan defineres som en klasse, der er erklæret med nøgleordet 'abstrakt' og har en begrænsning for, at den ikke kan instantieres.
En abstrakt klasse kan eller ikke have nogen abstrakt metode (en metode uden implementering). For så vidt angår JVM er en abstrakt klasse en ufuldstændig klasse, der ikke har en fuldstændig adfærd.
Den generelle syntaks for en abstrakt klasse er angivet nedenfor:
abstract class { public abstract void abstractMethod(); public void normalMethod() { //method body } }
Som vist i syntaksen for ovenstående abstrakte klasse, kan vi have både abstrakte og ikke-abstrakte metoder i en abstrakt klasse. Nøgleordet 'abstrakt' går forud for klassedeklarationen.
I en nøddeskal kan en abstrakt klasse beskrives som vist nedenfor.
Abstrakt metode i Java
En abstrakt metode er en metode forud for et 'abstrakt' nøgleord uden nogen implementering. En abstrakt metode erklæres inde i en abstrakt klasse.
En abstrakt metode er den, der gør en klasse ufuldstændig, da den ikke har en implementering. Derfor når vi inkluderer en abstrakt metode i klassen, bliver klassen naturligvis ufuldstændig.
Vi kan bruge den abstrakte metode ved at implementere den i en underklasse, dvs. en klasse arver den abstrakte klasse og implementerer eller giver derefter koden til alle de abstrakte metoder, der er erklæret i den abstrakte klasse ved at tilsidesætte dem.
Således bliver det obligatorisk at tilsidesætte den abstrakte metode i underklassen. Hvis den abstrakte metode ikke også implementeres i underklassen, er vi nødt til at erklære underklassen også som 'abstrakt'.
Den generelle erklæring om den abstrakte metode er:
abstrakt ugyldig methodName (parameter_list);
Mens vi skriver den abstrakte metode, skal vi huske følgende regler:
- En klasse, der indeholder en eller flere abstrakte metoder, er en abstrakt klasse.
- Visse andre nøgleord bør ikke bruges sammen med det abstrakte nøgleord.
Følgende kombinationer er således ulovlige i Java.
soapui interview spørgsmål og svar til erfarne
- endelig
- abstrakt indfødte
- abstrakt statisk
- abstrakt privat
- abstrakt synkroniseret
- abstrakt strengfp
Lad os implementere et eksempel på en abstrakt klasse og en abstrakt metode.
//abstract class abstract class Bank{ abstract int getInterestRate(); } //concrete class class Citi extends Bank{ int getInterestRate(){return 7;} } //concrete class class HSBC extends Bank{ int getInterestRate(){return 6;} } class Main{ public static void main(String args()){ Bank b; b = new Citi (); // concrete class object System.out.println('Citi Rate of Interest is: '+b.getInterestRate()+'%'); b = new HSBC (); // concrete class object System.out.println('HSBC Rate of Interest is: '+b.getInterestRate()+'%'); } }
Produktion:
I ovenstående eksempel har vi en bankklasse. I denne klasse har vi en abstrakt metode, getInterestRate (). Derefter erklærer vi to klasser - ICICI og BOI, der arver fra bankklassen. Begge disse klasser implementerer getInterestRate () -metoden ved at returnere deres respektive renter.
Derefter opretter vi et bankobjekt i hovedmetoden. For det første indeholder bankobjektet et objekt af ICICI-klasse og viser renten. Derefter oprettes BOI-objektet, og det viser renten.
Vi kan således antage, at bankklassen er en slags skitse eller en struktur, der giver os mulighed for at få en rente. Fra denne struktur kan vi oprette så mange konkrete klasser, som vi vil, og så kan vi få de respektive rentesatser for hvert bankobjekt (dette vises i hovedmetoden).
Hvad er brugen af en abstrakt klasse i Java
Hvorfor bruger vi en abstrakt klasse, når den i virkeligheden ikke har nogen egen implementering?
Sammen med svaret på ovenstående spørgsmål vil vi også illustrere, hvordan man bruger en abstrakt klasse i det følgende eksempel.
Lad os overveje et eksempel på køretøjer. Vi ved, at køretøjer kan være af mange typer. Vi kan have biler, scootere, cykler, knallerter, busser osv. Selvom der er mange typer køretøjer, har de nogle egenskaber eller attributter, der er fælles for alle køretøjer uanset deres type.
For eksempel, hvert køretøj har en model, chassisnummer, farve osv. Hver af dem har funktioner som start, stop, acceleration, bremsning osv. Nu vil hvert køretøj have ovenstående egenskaber og metoder, der også er fælles for de andre. På samme tid som en køretøjsbruger er vi måske ikke interesseret i nogle aspekter.
For eksempel, hvis en person kører en bil, hvad han / hun vil være interesseret i er bare at starte og stoppe køretøjet eller fremskynde eller bremse køretøjet. Han / hun vil ikke være interesseret i at vide, hvordan køretøjet starter eller stopper. Vi er kun interesseret i funktionernes abstrakte funktion og ikke i deres detaljer.
Hvis vi nu vil repræsentere ovenstående eksempelsystem i en softwareapplikation, hvordan designer vi det så? Først og fremmest implementerer vi nogle abstraktioner. Nu ved vi, at nogle funktioner er almindelige, men afhængigt af hver model vil implementeringen af disse funktioner være forskellig.
Til at begynde med erklærer vi en abstrakt klasse “Vehicle”.
Vi har vist dette system nedenfor:
Så vi vil have en abstrakt klasse køretøj, og der vil være en konkret klasse, der repræsenterer hver model af køretøjet. Til illustration har vi kun brugt tre modeller, dvs. bil, cykel og scooter.
Nedenfor er klassehierarkiet fra ovenstående system.
abstract class Vehicle{ abstract void start () ; abstract void stop (); abstract void accelerate (); abstract void brake (); } class Car extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Bike extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} } class Scooter extends Vehicle{ void start () { //code here…} void stop () { //code here…} void accelerate () { //code here…} void brake () { //code here…} }
Så vi vil have en køretøjs abstrakt klasse og tre klasser bil, cykel og scooter. Hver af disse klasser udvider køretøjsklassen og tilsidesætter hver af de abstrakte metoder.
Således generelt, når vi skal repræsentere et sådant system, der har fælles metoder eller operationer at repræsentere, så for kun at præsentere det ydre perspektiv for brugeren, går vi til abstraktion. Som et resultat tager vi de almindelige metoder ud og repræsenterer dem som abstrakte metoder og samler disse abstrakte metoder i en fælles abstrakt klasse.
Når vi først har skitseret et system, der er repræsenteret som en abstrakt klasse, og operationerne som abstrakte metoder, kan vi derefter udlede et hvilket som helst antal klasser fra den givne abstrakte klasse og tilsidesætte de abstrakte metoder til at implementere disse operationer for hver klasse.
På denne måde bliver det nyttigt at designe et system.
Abstrakt klasse og interface
Vi har set den abstrakte klasse ovenfor. Grænseflader er endnu en byggesten, der implementerer abstraktion. Grænseflader er kontrakter, og klasser, der implementerer grænsefladen, skal overholde disse kontrakter.
Kontrakter i grænseflader er kun metoder, der ikke implementeres. Inde i grænseflader har vi kun metodeprototyper. Der vil ikke være en enkelt implementering af metoder inde i grænseflader.
Hvis vi har en interface-erklæring som følger:
public interface interfaceA{ void myInterfaceMethod (); }
Derefter skal enhver klasse, der implementerer interface A, tilsidesætte 'myInterfaceMethod'.
Hvis vi overhovedet ikke tilsidesætter metoden i en klasse, så er denne klasse repræsenteret som abstrakt.
abstract class TestClass implements interfaceA{ // not a compulsion to override myInterfaceMethod. }
Vi vil have en separat vejledning om grænsefladen senere.
Lad os derefter diskutere nogle af forskellene mellem abstrakte klasser og grænseflader i Java.
Forskellen mellem abstrakt klasse og interface
Abstrakt klasse | Interface |
---|---|
En abstrakt klasse kan have private eller beskyttede datamedlemmer bortset fra offentlige medlemmer. | Interface medlemmer er som standard offentlige. |
En abstrakt klasse kan have abstrakte og / eller ikke-abstrakte metoder. | En grænseflade kan kun have abstrakte metoder. |
Abstraktet indeholder måske eller måske ikke de endelige variabler. | Grænseflader kan endelige variabler som standardvariabler. |
En abstrakt klasse kan have endelige, statiske eller ikke-statiske eller ikke-endelige variabler. | Grænseflader kan kun have endelige og statiske variabler. |
En abstrakt klasse kan give interfaceimplementering. | Grænseflader kan ikke implementere en abstrakt klasse. |
En abstrakt klasse arves ved hjælp af nøgleordet 'udvider'. | Interfacet implementeres ved hjælp af nøgleordet 'implementerer'. |
En abstrakt klasse kan udvide andre klasser eller implementere flere grænseflader. | Interfacet kan kun implementere en anden grænseflade. |
Hvornår skal man bruge abstrakt klasse og interface i Java
Beslutningen om hvornår man skal bruge abstrakt klasse og hvornår man skal bruge grænseflader i Java-applikationen skal tages intelligent efter en grundig forståelse af det aktuelle problem. Der er to aspekter, som vi skal overveje som vist nedenfor.
Abstrakte klasser med delvis adfærd
Vi ved, at abstrakte klasser måske ikke implementeres mindre. De kan have delvis adfærd. På den anden side har grænseflader ikke nogen implementering. Så når vi skal vælge mellem en abstrakt klasse og en implementering, er vi nødt til at overveje dette aspekt af vores ansøgning.
Dette betyder, at vi først skal beslutte, om den applikation, vi designer, har nogen fælles delvis implementering, som vi kan adskille i en abstrakt klasse.
For eksempel, overvej, at vi designer en webapplikation. Til dette bliver vi nødt til at bruge nogle webteknologier som Servlet, REST API osv. Nu har hver af disse webteknologier nogle teknikker eller trin, der skal implementeres, uanset hvilken applikation vi udvikler. Derefter bygger vi vores tilpassede applikation.
Så i dette tilfælde kan den bestemte kode, som webteknologien skal udføre, placeres i en abstrakt klasse. Kan vi have en grænseflade til dette? Nej. Dette skyldes, at grænsefladen ikke kan implementeres.
Kontraktsgrænseflader
Vi ved, at grænseflader har kontrakter eller metoder, der er en del af det. Disse metoder er kun prototyper. Vi er nødt til at implementere disse grænseflader i en klasse og derefter tilsidesætte metoderne.
hvordan man installerer formørkelse til c ++
Overvej nu kortgrænsefladen til Java Collections Framework. Mange klasser som HashMap, TreeMap og HashTable osv. Implementerer denne grænseflade. Hver af disse klasser har forskellige implementeringer. De har ikke nogen almindelig opførsel, der kan repræsenteres i den abstrakte klasse.
Så hvad vi gør er, at vi designer en grænseflade med metodeprototyper og derefter implementerer hver af klasserne.
På denne måde skal vi veje hver faktor korrekt, inden vi vælger mellem en abstrakt klasse og interface.
Forskellen mellem abstraktion og indkapsling
Lad os diskutere nogle af forskellene mellem abstraktion og et mere vigtigt træk ved OOP, dvs. indkapsling.
Abstraktion | Indkapsling |
---|---|
Process med at hente og abstrahere informationen | Process med at binde informationen. |
Abstraktionsteknikken er på design- eller interface-niveau. | Indkapslingsmekanismen er på implementeringsniveauet. |
Abstraktion skjuler detaljerne. | Indkapsling binder informationen i en enhed, hvilket sikrer informationssikkerhed. |
Abstraktion implementeres ved hjælp af abstrakte klasser og grænseflader. | Adgangsmodifikatorer, nemlig offentlige, private og beskyttede, og standard spiller en rolle i indkapsling. |
I abstraktion præsenteres den eneste abstrakte visning for brugeren, mens komplekse og detaljerede data er skjult for brugeren. | I indkapsling er data samlet som en enhed og kan beskyttes eller gøres tilgængelige ved hjælp af adgangsmodifikatorer og getter- og settermetoder. |
Ofte stillede spørgsmål
Q # 1) Skjuler abstraktion og data det samme?
Svar: Nej, abstraktion og dataskydning er ikke det samme. Men begge er vigtige træk ved objektorienteret programmering. Mens abstraktion er en proces til at skjule baggrundsdetaljerne, er dataskydning en teknik til at isolere dataene fra direkte adgang.
Spørgsmål nr. 2) Hvad er fordelene ved abstraktion?
Svar: Få fordele ved abstraktion er angivet nedenfor:
- Ved at skjule baggrundsdetaljerne og kun udsætte den abstrakte visning for brugeren gør abstraktion koden enklere og mere læselig.
- Da abstraktion beskytter unødvendige detaljer, gør den koden mindre.
- Kode vedligeholdelse kan blive kompleks og vanskelig uden abstraktion.
Spørgsmål nr. 3) Hvorfor er abstraktion så vigtig?
Svar: Abstraktion giver os mulighed for at skjule baggrundsdetaljer, der er vigtige og kan føre til kaos, hvis de lækkes til verden. Ved at skjule baggrundsdetaljerne og kun udsætte den krævede grænseflade for brugeren gør abstraktion applikationer enklere.
Q # 4) Forklar abstraktion med et eksempel i realtid.
Svar: Der er mange eksempler i realtid på abstraktion, herunder geometriske former, køretøjer osv. Endnu et andet eksempel er ATM (Automated Teller Machine). Pengeautomaten understøtter operationer som kontantudtag, saldokontrol, pengeoverførsel osv. Men vi er ikke opmærksomme på, hvordan disse operationer fungerer internt.
Vi får kun en skærm med en brugergrænseflade til at vælge og udføre de nødvendige handlinger.
Spørgsmål nr. 5) Kan vi opnå abstraktion uden indkapsling?
Svar: Abstraktion beskytter implementeringsdetaljerne, og indkapsling skjuler objektdetaljerne. Objektet er den abstrakte form af den virkelige verden, og dens detaljer skjules ved hjælp af indkapsling. Således er indkapsling påkrævet for abstraktion.
Konklusion
I denne vejledning har vi diskuteret abstraktion i Java detaljeret. Abstraktion er en teknik til at skjule unødvendige detaljer for brugeren. Brugeren får kun adgang til de relevante detaljer. Køretøjsoperationer eller ATM-operationer er klassiske eksempler på abstraktioner i den virkelige verden.
Når vi bruger ATM, er vi kun interesserede i at udføre operationerne som kontantudtag osv. Uden at skulle vide detaljerne om, hvordan nøjagtigt denne operation udføres internt.
Java giver abstraktion gennem abstrakte klasser og grænseflader. Mens grænseflader giver 100% abstraktion, giver abstrakte klasser delvis abstraktion. Valget mellem grænseflader og abstrakte klasser skal foretages afhængigt af applikationen, der skal udvikles, og også hvilken information der skal eksponeres for brugeren.
Vi diskuterede også de abstrakte metoder i denne vejledning sammen med forskellene mellem abstrakte klasser og grænseflader.
=> Tjek ALLE Java-tutorials her.
Anbefalet læsning
- Java-interface og abstrakt klasseundervisning med eksempler
- Java-heltal og Java BigInteger-klasse med eksempler
- Java Scanner-klassevejledning med eksempler
- Hvad er Java Vector | Java Vector Class Tutorial med eksempler
- Java Enum: Java-optællingsvejledning med eksempler
- Java Basics: Java Syntax, Java Class og Core Java Concepts
- JAVA-vejledning til begyndere: 100+ praktiske Java-videovejledninger
- Java Iterator: Lær at bruge Iteratorer i Java med eksempler