what is abstraction java learn with examples
Denne opplæringen forklarer hva som er Abstraksjon i Java sammen med programmeringseksempler. Du vil også lære hva som er en abstrakt klasse og hvorfor brukes den:
I denne JAVA-serien vil vi diskutere de viktige funksjonene i objektorientert programmering (OOP) som også er kjent som fire søyler, dvs. abstraksjon, innkapsling, arv og polymorfisme.
Den første søylen i OOP er “Abstraksjon”. “Abstraksjon er prosessen med å velge data for å bare vise relevant informasjon til brukeren.”
=> Ta en titt på Java Beginners Guide her.
Hva du vil lære:
- Abstraksjon i OOP
- Hva er abstraksjon i Java
- Forskjellen mellom abstraksjon og innkapsling
- Konklusjon
Abstraksjon i OOP
Enkelt sagt “viser” abstraksjon bare de relevante attributtene til objekter og “skjuler” de unødvendige detaljene.
For eksempel, når vi kjører bil, er vi bare opptatt av å kjøre bilen som å starte / stoppe bilen, akselerere / pause osv. Vi er ikke bekymret for hvordan den faktiske start / stopp-mekanismen eller akselerere / bremseprosessen fungerer internt. Vi er bare ikke interessert i disse detaljene.
Det vi er bekymret for, er det “abstrakte” synet på disse operasjonene som vil hjelpe oss å kjøre bilen fremover og nå vårt mål. Dette er et enkelt eksempel på abstraksjon.
hvilket nettsted gir en anmeldelse om programvare for rengjøring av register
Dermed har bilen alle mekanismene og prosessene på plass, men fra sluttbrukerens perspektiv, dvs. bilførers perspektiv, vil han / hun bare være interessert i det abstrakte synet på disse prosessene.
Abstraksjon reduserer programmeringsarbeidet og derved kompleksiteten. En sluttbruker som bruker applikasjonen, trenger ikke være bekymret for hvordan en bestemt funksjon implementeres. Han / hun kan bare bruke funksjonene etter behov.
Dermed håndterer vi i abstraksjon ideer og ikke hendelsene. Dette betyr at vi skjuler implementeringsdetaljene for brukeren og bare utsette funksjonaliteten for sluttbrukeren. Dermed vil brukeren bare vite 'hva den gjør' i stedet for 'hvordan den gjør'.
Abstraksjon i OOP kan være av to typer.
# 1) Dataabstraksjon
I dataabstraksjon oppretter vi stort sett komplekse datatyper og skjuler implementeringen av dem. Vi utsetter bare operasjonene for å manipulere disse datatypene uten å gå i detalj om implementeringen av dem.
En fordel med denne tilnærmingen er at vi når som helst kan endre implementeringen uten å endre atferden som er utsatt for brukeren.
# 2) Kontroll abstraksjon
Kontrollabstrahering samler alle kontrolluttalelsene som er en del av applikasjonen og avslører dem som en enhet. Denne funksjonen brukes når vi må utføre en fungerende funksjon ved hjelp av denne kontrollenheten.
Kontrollabstraksjon danner hovedenheten for strukturert programmering, og ved hjelp av kontrollabstraksjon kan vi definere enkle funksjoner til komplekse rammer.
Hva er abstraksjon i Java
Siden Java er et OOP-språk, kan abstraksjon sees på som en av de viktigste funksjonene og byggesteinene i Java-språket. I Java implementeres abstraksjon ved hjelp av en abstrakt klasse og grensesnitt.
Så hvordan implementerer vi abstraksjon i Java? Java gir et “abstrakt” modifikasjonsmiddel som ikke er tilgjengelig for implementering av abstraksjon. Denne abstrakte modifisereren kan brukes med klasser og metoder, men ikke med variabler.
Grensesnittet gir fullstendig abstraksjon, dvs. det gir bare metodeprototyper og ikke implementeringen av dem. En abstrakt klasse gir delvis abstraksjon der minst én metode ikke skal implementeres.
I denne opplæringen vil vi diskutere abstraksjon med abstrakte klasser i detalj. Vi vil utforske grensesnitt i detalj i våre påfølgende opplæringsprogrammer.
Java Abstraction Eksempel
La oss se på eksemplet nedenfor.
//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 } }
Produksjon:
Det enkle abstraksjonseksemplet som er gitt ovenfor har en klasse Car. I denne klassen Bil har vi en abstrakt metode for å akselerere (). Så arver vi denne klassen i Suzuki-klassen. Inne i Suzuki-klassen implementerer vi akselerasjonsmetoden.
Ovennevnte eksempel viser ganske enkelt hvordan en abstrakt klasse defineres, arves og deretter brukes i programmet.
Hva er Java Abstract Class
Vi nevnte allerede at Java implementerer abstraksjon ved hjelp av abstrakte klasser og grensesnitt. La oss først utforske alt om den abstrakte klassen.
En abstrakt klasse kan defineres som en klasse erklært med nøkkelordet “abstrakt” og har en begrensning på at den ikke kan instantiseres.
En abstrakt klasse kan eller ikke ha noen abstrakt metode (en metode uten implementering). Når det gjelder JVM, er en abstrakt klasse en ufullstendig klasse som ikke har en fullstendig oppførsel.
Den generelle syntaksen til en abstrakt klasse er gitt nedenfor:
abstract class { public abstract void abstractMethod(); public void normalMethod() { //method body } }
Som vist i syntaksen til den ovennevnte abstrakte klassen, kan vi ha både abstrakte og ikke-abstrakte metoder i en abstrakt klasse. Stikkordet ‘abstrakt’ går forut for klassedeklarasjonen.
I et nøtteskall kan en abstrakt klasse beskrives som vist nedenfor.
Abstrakt metode i Java
En abstrakt metode er en metode som innledes med et ‘abstrakt’ nøkkelord uten implementering. En abstrakt metode blir erklært i en abstrakt klasse.
En abstrakt metode er den som gjør en klasse ufullstendig, da den ikke har en implementering. Derfor når vi inkluderer en abstrakt metode i klassen, blir klassen naturlig nok ufullstendig.
Vi kan bruke den abstrakte metoden ved å implementere den i en underklasse, dvs. en klasse arver den abstrakte klassen og implementerer eller gir koden for alle de abstrakte metodene som er erklært i den abstrakte klassen ved å overstyre dem.
Dermed blir det obligatorisk å overstyre den abstrakte metoden i underklassen. Hvis den abstrakte metoden ikke også er implementert i underklassen, må vi også erklære underklassen som “abstrakt”.
Den generelle erklæringen om den abstrakte metoden er:
abstrakt tomrom methodName (parameterliste);
Mens vi skriver den abstrakte metoden, må vi huske følgende regler:
- En klasse som inneholder en eller flere abstrakte metoder er en abstrakt klasse.
- Visse andre nøkkelord skal ikke brukes med det abstrakte nøkkelordet.
Dermed er følgende kombinasjoner ulovlige i Java.
- endelig
- abstrakt innfødt
- abstrakt statisk
- abstrakt privat
- abstrakt synkronisert
- abstrakt striktfp
La oss 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()+'%'); } }
Produksjon:
I eksemplet ovenfor har vi en bankklasse. I denne klassen har vi en abstrakt metode, getInterestRate (). Deretter erklærer vi to klasser - ICICI og BOI som arver fra bankklassen. Begge disse klassene implementerer getInterestRate () -metoden ved å returnere sine respektive renter.
Så i hovedmetoden lager vi et bankobjekt. For det første inneholder bankobjektet et objekt av ICICI-klasse og viser renten. Deretter opprettes BOI-objektet og det viser renten.
Dermed kan vi anta at bankklassen er en slags skisse eller en struktur som gjør at vi kan få en rente. Fra denne strukturen kan vi lage så mange konkrete klasser vi vil, og så kan vi få de respektive rentene for hvert bankobjekt (dette vises i hovedmetoden).
Hva er bruken av en abstrakt klasse i Java
Hvorfor bruker vi en abstrakt klasse når den i virkeligheten ikke har noen egen implementering?
Sammen med svaret på spørsmålet ovenfor, vil vi også illustrere hvordan man bruker en abstrakt klasse i eksemplet som følger.
La oss se på et eksempel på kjøretøy. Vi vet at kjøretøy kan være av mange typer. Vi kan ha biler, scootere, sykler, mopeder, busser osv. Selv om det er mange typer kjøretøy, har de noen egenskaper eller attributter som er felles for alle kjøretøyene, uansett type.
For eksempel, hvert kjøretøy har en modell, chassisnummer, farge osv. Hver av dem har funksjoner som start, stopp, akselerasjon, brems osv. Nå vil hvert kjøretøy ha de ovennevnte egenskapene og metodene som er felles for de andre også. På samme tid som en bilbruker er vi kanskje ikke interessert i noen aspekter.
For eksempel, hvis en person kjører bil, er det han / hun vil være interessert i bare å starte og stoppe kjøretøyet eller akselerere eller bremse kjøretøyet. Han / hun vil ikke være interessert i å vite hvordan kjøretøyet starter eller stopper. Vi er bare interessert i den abstrakte funksjonen til funksjonene og ikke i detaljene deres.
Nå hvis vi ønsker å representere det ovennevnte eksempelsystemet i en programvare, hvordan designer vi det? Først og fremst vil vi implementere noe abstraksjon. Nå vet vi at noen funksjoner er vanlige, men avhengig av hver modell vil implementeringen av disse funksjonene være annerledes.
hvordan lage prosjekt i formørkelse
Til å begynne med erklærer vi en abstrakt klasse “Vehicle”.
Vi har vist dette systemet nedenfor:
Så vi vil ha en abstrakt klasse Vehicle, og det vil være en konkret klasse som representerer hver modell av kjøretøyet. For illustrasjonsformål har vi bare brukt tre modeller, dvs. bil, sykkel 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 ha en kjøretøyabstrakt klasse og tre klasser bil, sykkel og scooter. Hver av disse klassene vil utvide kjøretøyklassen og overstyre hver av de abstrakte metodene.
Således generelt, når vi må representere et slikt system som har vanlige metoder eller operasjoner å representere, så for å presentere bare det ytre perspektivet for brukeren, går vi for abstraksjon. Som et resultat tar vi ut de vanlige metodene og representerer dem som abstrakte metoder og samler disse abstrakte metodene i en vanlig abstrakt klasse.
Når vi først har skissert et system representert som en abstrakt klasse og operasjonene som abstrakte metoder, kan vi deretter utlede et hvilket som helst antall klasser fra den gitte abstrakte klassen og overstyre de abstrakte metodene for å implementere disse operasjonene for hver klasse.
På denne måten blir det nyttig å designe et system.
Abstrakt klasse og grensesnitt
Vi har sett den abstrakte klassen ovenfor. Grensesnitt er enda andre byggesteiner som implementerer abstraksjon. Grensesnitt er kontrakter, og klasser som implementerer grensesnittet må respektere disse kontraktene.
Kontrakter i grensesnitt er bare metoder som ikke implementeres. Inne i grensesnitt vil vi bare ha metodeprototyper. Det vil ikke være en eneste implementering av metoder i grensesnitt.
Hvis vi har en grensesnitterklæring som følger:
public interface interfaceA{ void myInterfaceMethod (); }
Deretter må enhver klasse som implementerer grensesnittet A overstyre ‘myInterfaceMethod’.
Hvis vi i det hele tatt ikke overstyrer metoden i en klasse, blir den klassen representert som abstrakt.
abstract class TestClass implements interfaceA{ // not a compulsion to override myInterfaceMethod. }
Vi vil ha en egen veiledning om grensesnittet senere.
La oss deretter diskutere noen av forskjellene mellom abstrakte klasser og grensesnitt i Java.
Forskjellen mellom abstrakt klasse og grensesnitt
Abstrakt klasse | Grensesnitt |
---|---|
En abstrakt klasse kan ha private eller beskyttede datamedlemmer bortsett fra offentlige medlemmer. | Grensesnittmedlemmer er som standard offentlige. |
En abstrakt klasse kan ha abstrakte og / eller ikke-abstrakte metoder. | Et grensesnitt kan bare ha abstrakte metoder. |
Sammendraget inneholder kanskje ikke de endelige variablene. | Grensesnitt kan endelige variabler som standardvariabler. |
En abstrakt klasse kan ha endelige, statiske eller ikke-statiske eller ikke-endelige variabler. | Grensesnitt kan bare ha endelige og statiske variabler. |
En abstrakt klasse kan gi grensesnittimplementering. | Grensesnitt kan ikke implementere en abstrakt klasse. |
En abstrakt klasse arves ved å bruke søkeordet 'utvider'. | Grensesnittet implementeres ved hjelp av nøkkelordet 'implementerer'. |
En abstrakt klasse kan utvide andre klasser eller implementere flere grensesnitt. | Grensesnittet kan bare implementere et annet grensesnitt. |
Når skal du bruke abstrakt klasse og grensesnitt i Java
Beslutningen om når du skal bruke abstrakt klasse og når du skal bruke grensesnitt i Java-applikasjonen, bør tas intelligent etter å ha forstått det aktuelle problemet. Det er to aspekter som vi må vurdere som vist nedenfor.
Abstrakte klasser med delvis atferd
Vi vet at abstrakte klasser kanskje ikke blir implementert mindre. De kan ha delvis oppførsel. På den annen side har grensesnitt ingen implementering. Så når vi må velge mellom en abstrakt klasse og en implementering, så må vi vurdere dette aspektet av søknaden vår.
Dette betyr at vi først må avgjøre om applikasjonen vi designer har noen felles delvis implementering som vi kan skille i en abstrakt klasse.
For eksempel, vurdere at vi designer en webapplikasjon. For dette vil vi måtte bruke noe webteknologi som Servlet, REST API osv. Nå har hver av disse webteknologiene noen teknikker eller trinn som skal implementeres uavhengig av applikasjonen vi utvikler. Så bygger vi vår tilpassede applikasjon.
Så i dette tilfellet kan den bestemte koden som webteknologien må utføre, legges i en abstrakt klasse. Kan vi ha et grensesnitt for dette? Nei. Dette er fordi grensesnittet ikke kan implementeres.
Grensesnitt bare for kontrakt
Vi vet at grensesnitt har kontrakter eller metoder som er en del av det. Disse metodene er bare prototyper. Vi må implementere disse grensesnittene i en klasse og deretter overstyre metodene.
c ++ ide med kompilator
Vurder nå Kartgrensesnittet til Java Collections Framework. Mange klasser som HashMap, TreeMap og HashTable, etc. implementerer dette grensesnittet. Hver av disse klassene har en annen implementering. De har ingen vanlig oppførsel som kan representeres i den abstrakte klassen.
Så det vi gjør er at vi designer et grensesnitt med metodeprototyper og deretter implementerer hver av klassene.
På denne måten bør vi veie hver faktor riktig før vi velger mellom en abstrakt klasse og grensesnitt.
Forskjellen mellom abstraksjon og innkapsling
La oss diskutere noen av forskjellene mellom abstraksjon og et viktig trekk ved OOP, dvs. innkapsling.
Abstraksjon | Innkapsling |
---|---|
Prosess for å skaffe og trekke ut informasjonen | Prosess for å binde informasjonen. |
Abstraksjonsteknikken er på design- eller grensesnittnivå. | Innkapslingsmekanismen er på implementeringsnivå. |
Abstraksjon skjuler detaljene. | Innkapsling binder informasjonen i en enhet for å sikre informasjonssikkerhet. |
Abstraksjon implementeres ved hjelp av abstrakte klasser og grensesnitt. | Tilgangsmodifikatorer, nemlig offentlige, private og beskyttede og standard spiller en rolle i innkapsling. |
I abstraksjon presenteres det eneste abstrakte synet for brukeren mens komplekse og detaljerte data er skjult for brukeren. | I innkapsling er data samlet som en enhet og kan beskyttes eller gjøres tilgjengelig ved hjelp av tilgangsmodifikatorer og getter- og settermetoder. |
ofte stilte spørsmål
Q # 1) Skjuler abstraksjon og data det samme?
Svar: Nei, abstraksjon og skjuling av data er ikke det samme. Men begge er viktige trekk ved objektorientert programmering. Mens abstraksjon er en prosess for å skjule bakgrunnsdetaljene, er dataskjæring en teknikk for å isolere dataene fra direkte tilgang.
Q # 2) Hva er fordelene med abstraksjon?
Svar: Få fordeler med abstraksjon er gitt nedenfor:
- Ved å skjule bakgrunnsdetaljene og kun utsette det abstrakte synet for brukeren, gjør abstraksjon koden enklere og mer lesbar.
- Ettersom abstraksjon beskytter unødvendige detaljer, gjør den koden mindre.
- Kodevedlikehold kan bli komplisert og vanskelig uten abstraksjon.
Q # 3) Hvorfor er abstraksjon så viktig?
Svar: Abstraksjon lar oss skjule bakgrunnsdetaljer som er viktige og kan føre til kaos hvis de lekkes til verden. Ved å skjule bakgrunnsdetaljene og bare utsette det nødvendige grensesnittet for brukeren, gjør abstraksjon applikasjoner enklere.
Q # 4) Forklar abstraksjon med et sanntidseksempel.
Svar: Det er mange sanntidseksempler på abstraksjon, inkludert geometriske former, kjøretøy, etc. Nok et eksempel er ATM (Automated Teller Machine). Minibanken støtter operasjoner som kontantuttak, balansekontroll, pengeoverføring osv. Men vi er ikke klar over hvordan disse operasjonene fungerer internt.
Vi får bare en skjerm med et brukergrensesnitt for å velge og utføre de nødvendige operasjonene.
Sp # 5) Kan vi oppnå abstraksjon uten innkapsling?
Svar: Abstraksjon beskytter implementeringsdetaljene og innkapsling skjuler objektdetaljene. Objektet er den abstrakte formen for den virkelige verden og dens detaljer er skjult ved hjelp av innkapsling. Dermed er innkapsling nødvendig for abstraksjon.
Konklusjon
I denne opplæringen har vi diskutert abstraksjon i Java i detalj. Abstraksjon er en teknikk for å skjule unødvendige detaljer for brukeren. Brukeren får kun tilgang til detaljene som er relevante. Kjøretøyoperasjoner eller minibankoperasjoner er klassiske eksempler på abstraksjoner i den virkelige verden.
Når vi bruker minibank, er vi bare interessert i å utføre operasjonene som kontantuttak osv. Uten å måtte vite detaljene om hvordan nøyaktig operasjonen utføres internt.
Java gir abstraksjon gjennom abstrakte klasser og grensesnitt. Mens grensesnitt gir 100% abstraksjon, gir abstrakte klasser delvis abstraksjon. Valget mellom grensesnitt og abstrakte klasser bør tas avhengig av applikasjonen som skal utvikles, og også hvilken informasjon som skal eksponeres for brukeren.
Vi diskuterte også de abstrakte metodene i denne opplæringen sammen med forskjellene mellom abstrakte klasser og grensesnitt.
=> Sjekk ALLE Java-opplæringsprogrammer her.
Anbefalt lesing
- Java-grensesnitt og abstrakt klasseopplæring med eksempler
- Java Integer og Java BigInteger Class med eksempler
- Java-skanner klasseveiledning med eksempler
- Hva er Java Vector | Java Vector Class Tutorial med eksempler
- Java Enum: Opplæring i Java-oppregning med eksempler
- Java Basics: Java Syntax, Java Class og Core Java Concepts
- JAVA-opplæring for nybegynnere: 100+ praktiske Java-videoveiledninger
- Java Iterator: Lær å bruke Iteratorer i Java med eksempler