logo

Abstraksjon i Java

Abstraksjon i Java er prosessen der vi kun viser viktige detaljer/funksjonalitet til brukeren. De ikke-essensielle implementeringsdetaljene vises ikke til brukeren.

I denne artikkelen vil vi lære om abstraksjon og hva abstrakt betyr.



Enkelt eksempel for å forstå abstraksjon:

Fjernkontroll for fjernsyn er en utmerket eksempel på abstraksjon . Det forenkler interaksjonen med en TV ved å skjule kompleksiteten bak enkle knapper og symboler, noe som gjør det enkelt uten å måtte forstå de tekniske detaljene om hvordan TV-en fungerer.

Hva er abstraksjon i Java?

I Java oppnås abstraksjon ved grensesnitt og abstrakte klasser . Vi kan oppnå 100 % abstraksjon ved å bruke grensesnitt.

Dataabstraksjon kan også defineres som prosessen med å identifisere bare de nødvendige egenskapene til et objekt og ignorere de irrelevante detaljene. Egenskapene og virkemåten til et objekt skiller det fra andre objekter av lignende type og hjelper også med å klassifisere/gruppere objektene.



Abstraksjonseksempel i det virkelige liv:

Tenk på et ekte eksempel på en mann som kjører bil. Mannen vet bare at å trykke på gasspedalen vil øke hastigheten til en bil eller å bruke bremser vil stoppe bilen, men han vet ikke hvordan hastigheten faktisk øker når han trykker på gasspedalen, han vet ikke om den indre mekanismen til bilen eller implementering av gasspedalen, bremser osv. i bilen. Dette er hva abstraksjon er.

Java Abstract-klasser og Java Abstract-metoder

  1. En abstrakt klasse er en klasse som er deklarert med et abstrakt nøkkelord.
  2. En abstrakt metode er en metode som er deklarert uten implementering.
  3. En abstrakt klasse kan ha alle abstrakte metoder eller ikke. Noen av dem kan være konkrete metoder
  4. Et metodedefinert abstrakt må alltid omdefineres i underklassen, og dermed lage overordnet obligatorisk eller gjør selve underklassen abstrakt.
  5. Enhver klasse som inneholder en eller flere abstrakte metoder må også deklareres med et abstrakt nøkkelord.
  6. Det kan ikke være noe objekt i en abstrakt klasse. Det vil si at en abstrakt klasse ikke kan instansieres direkte med ny operatør .
  7. En abstrakt klasse kan ha parameteriserte konstruktører og standardkonstruktøren er alltid til stede i en abstrakt klasse.

Algoritme for å implementere abstraksjon i Java

  1. Bestem klassene eller grensesnittene som vil være en del av abstraksjonen.
  2. Lag en abstrakt klasse eller grensesnitt som definerer den vanlige oppførselen og egenskapene til disse klassene.
  3. Definer abstrakte metoder i abstraktklassen eller grensesnittet som ikke har noen implementeringsdetaljer.
  4. Implementer konkrete klasser som utvider den abstrakte klassen eller implementer grensesnittet.
  5. Overstyr de abstrakte metodene i betongklassene for å gi deres spesifikke implementeringer.
  6. Bruk betongklassene til å implementere programlogikken.

Når skal man bruke abstrakte klasser og abstrakte metoder?

Det er situasjoner der vi ønsker å definere en superklasse som erklærer strukturen til en gitt abstraksjon uten å gi en fullstendig implementering av hver metode. Noen ganger vil vi lage en superklasse som bare definerer et generaliseringsskjema som vil deles av alle underklassene, og overlate det til hver underklasse å fylle ut detaljene.

Tenk på et klassisk formeksempel, kanskje brukt i et datastøttet designsystem eller spillsimulering. Basistypen er form og hver form har en farge, størrelse og så videre. Fra dette er spesifikke typer former avledet (arvet) - sirkel, firkant, trekant og så videre - som hver kan ha ytterligere egenskaper og oppførsel. For eksempel kan visse former snus. Noen atferd kan være annerledes, for eksempel når du vil beregne arealet til en form. Typehierarkiet legemliggjør både likheter og forskjeller mellom formene.



Abstrakt klasse i Java

Eksempel på Java-abstraksjon

Eksempel 1:

Java


strengen er tom



// Java program to illustrate the> // concept of Abstraction> abstract> class> Shape {> >String color;> > >// these are abstract methods> >abstract> double> area();> >public> abstract> String toString();> > >// abstract class can have the constructor> >public> Shape(String color)> >{> >System.out.println(>'Shape constructor called'>);> >this>.color = color;> >}> > >// this is a concrete method> >public> String getColor() {>return> color; }> }> class> Circle>extends> Shape {> >double> radius;> > >public> Circle(String color,>double> radius)> >{> > >// calling Shape constructor> >super>(color);> >System.out.println(>'Circle constructor called'>);> >this>.radius = radius;> >}> > >@Override> double> area()> >{> >return> Math.PI * Math.pow(radius,>2>);> >}> > >@Override> public> String toString()> >{> >return> 'Circle color is '> +>super>.getColor()> >+>'and area is : '> + area();> >}> }> class> Rectangle>extends> Shape {> > >double> length;> >double> width;> > >public> Rectangle(String color,>double> length,> >double> width)> >{> >// calling Shape constructor> >super>(color);> >System.out.println(>'Rectangle constructor called'>);> >this>.length = length;> >this>.width = width;> >}> > >@Override> double> area() {>return> length * width; }> > >@Override> public> String toString()> >{> >return> 'Rectangle color is '> +>super>.getColor()> >+>'and area is : '> + area();> >}> }> public> class> Test {> >public> static> void> main(String[] args)> >{> >Shape s1 =>new> Circle(>'Red'>,>2.2>);> >Shape s2 =>new> Rectangle(>'Yellow'>,>2>,>4>);> > >System.out.println(s1.toString());> >System.out.println(s2.toString());> >}> }>

>

ankita lokhande alder
>

Produksjon

Shape constructor called Circle constructor called Shape constructor called Rectangle constructor called Circle color is Redand area is : 15.205308443374602 Rectangle color is Yellowand area is : 8.0>

Eksempel 2:

Java




// Java Program to implement> // Java Abstraction> > // Abstract Class declared> abstract> class> Animal {> >private> String name;> > >public> Animal(String name) {>this>.name = name; }> > >public> abstract> void> makeSound();> > >public> String getName() {>return> name; }> }> > // Abstracted class> class> Dog>extends> Animal {> >public> Dog(String name) {>super>(name); }> > >public> void> makeSound()> >{> >System.out.println(getName() +>' barks'>);> >}> }> > // Abstracted class> class> Cat>extends> Animal {> >public> Cat(String name) {>super>(name); }> > >public> void> makeSound()> >{> >System.out.println(getName() +>' meows'>);> >}> }> > // Driver Class> public> class> AbstractionExample {> >// Main Function> >public> static> void> main(String[] args)> >{> >Animal myDog =>new> Dog(>'Buddy'>);> >Animal myCat =>new> Cat(>'Fluffy'>);> > >myDog.makeSound();> >myCat.makeSound();> >}> }>

>

>

Produksjon

Buddy barks Fluffy meows>

Forklaring av Java-programmet ovenfor:

Denne koden definerer en Animal abstrakt klasse med en abstrakt metode makeSound(). Hund- og katt-klassene utvider Animal og implementerer makeSound()-metoden. Main()-metoden lager forekomster av Dog and Cat og kaller makeSound()-metoden på dem.

python-programliste

Dette demonstrerer abstraksjonskonseptet i Java, der vi definerer en mal for en klasse (i dette tilfellet Animal), men lar implementeringen av visse metoder bli definert av underklasser (i dette tilfellet makeSound()).

Grensesnitt

Grensesnitt er en annen metode for å implementere abstraksjon i Java. Hovedforskjellen er at ved å bruke grensesnitt kan vi oppnå 100% abstraksjon i Java-klasser. I Java eller et hvilket som helst annet språk inkluderer grensesnitt både metoder og variabler, men mangler en metodekropp. Bortsett fra abstraksjon, kan grensesnitt også brukes til å implementere grensesnitt i Java.

Gjennomføring: Å implementere en grensesnitt vi bruker nøkkelordet redskaper med klasse.

Java




// Define an interface named Shape> interface> Shape {> >double> calculateArea();>// Abstract method for> >// calculating the area> }> > // Implement the interface in a class named Circle> class> Circle>implements> Shape {> >private> double> radius;> > >// Constructor for Circle> >public> Circle(>double> radius) {>this>.radius = radius; }> > >// Implementing the abstract method from the Shape> >// interface> >public> double> calculateArea()> >{> >return> Math.PI * radius * radius;> >}> }> > // Implement the interface in a class named Rectangle> class> Rectangle>implements> Shape {> >private> double> length;> >private> double> width;> > >// Constructor for Rectangle> >public> Rectangle(>double> length,>double> width)> >{> >this>.length = length;> >this>.width = width;> >}> > >// Implementing the abstract method from the Shape> >// interface> >public> double> calculateArea() {>return> length * width; }> }> > // Main class to test the program> public> class> Main {> >public> static> void> main(String[] args)> >{> >// Creating instances of Circle and Rectangle> >Circle myCircle =>new> Circle(>5.0>);> >Rectangle myRectangle =>new> Rectangle(>4.0>,>6.0>);> > >// Calculating and printing the areas> >System.out.println(>'Area of Circle: '> >+ myCircle.calculateArea());> >System.out.println(>'Area of Rectangle: '> >+ myRectangle.calculateArea());> >}> }>

>

java understreng

>

Produksjon

Area of Circle: 78.53981633974483 Area of Rectangle: 24.0>

Fordeler med abstraksjon

Her er noen fordeler med abstraksjon:

  1. Det reduserer kompleksiteten ved å se på ting.
  2. Unngår kodeduplisering og øker gjenbrukbarheten.
  3. Bidrar til å øke sikkerheten til en applikasjon eller et program, da kun viktige detaljer er gitt til brukeren.
  4. Det forbedrer vedlikeholdsevnen til applikasjonen.
  5. Det forbedrer modulariteten til applikasjonen.
  6. Forbedringen vil bli veldig enkel fordi uten å påvirke sluttbrukere kan vi utføre alle typer endringer i vårt interne system.
  7. Forbedrer gjenbrukbarhet og vedlikehold av kode.
  8. Skjuler implementeringsdetaljer og viser bare relevant informasjon.
  9. Gir et oversiktlig og enkelt grensesnitt til brukeren.
  10. Øker sikkerheten ved å hindre tilgang til interne klassedetaljer.
  11. Støtter modularitet, da komplekse systemer kan deles inn i mindre og mer håndterbare deler.
  12. Abstraksjon gir en måte å skjule kompleksiteten til implementeringsdetaljer for brukeren, noe som gjør det enklere å forstå og bruke.
  13. Abstraksjon gir mulighet for fleksibilitet i implementeringen av et program, ettersom endringer i de underliggende implementeringsdetaljene kan gjøres uten å påvirke det brukervendte grensesnittet.
  14. Abstraksjon muliggjør modularitet og separasjon av bekymringer, noe som gjør koden mer vedlikeholdbar og enklere å feilsøke.

Ulemper med abstraksjon i Java

Her er de viktigste ulempene med abstraksjon i Java:

  1. Abstraksjon kan gjøre det vanskeligere å forstå hvordan systemet fungerer.
  2. Det kan føre til økt kompleksitet, spesielt hvis det ikke brukes riktig.
  3. Dette kan begrense fleksibiliteten til implementeringen.
  4. Abstraksjon kan legge til unødvendig kompleksitet til koden hvis den ikke brukes på riktig måte, noe som fører til økt utviklingstid og innsats.
  5. Abstraksjon kan gjøre det vanskeligere å feilsøke og forstå kode, spesielt for de som ikke er kjent med abstraksjonslagene og implementeringsdetaljer.
  6. Overforbruk av abstraksjon kan føre til redusert ytelse på grunn av de ekstra lagene med kode og indirektion.

Les også:

Abstraksjon i Java – Vanlige spørsmål

Q1. Hvorfor bruker vi abstrakt?

En viktig grunn til at vi bruker abstrakte begreper er å forenkle kompleksitet. Tenk deg å prøve å forklare hele universet med hvert eneste atom og stjerne! Abstrakter lar oss zoome ut, ta tak i hovedideene som tyngdekraft og energi, og gi mening ut av det hele uten å gå oss vill i detaljene.

Her er noen andre grunner til at vi bruker abstrakt i Java:

1. Abstraksjon : Abstrakte klasser brukes til å definere en generisk mal som andre klasser kan følge. De definerer et sett med regler og retningslinjer som deres underklasser må følge. Ved å tilby en abstrakt klasse kan vi sikre at klassene som utvider den har en konsistent struktur og oppførsel. Dette gjør koden mer organisert og enklere å vedlikeholde.

2. Polymorfisme : Abstrakte klasser og metoder muliggjør polymorfisme i Java. Polymorfisme er evnen til et objekt til å anta mange former. Dette betyr at en variabel av en abstrakt type kan inneholde objekter av enhver konkret underklasse av den abstrakte klassen. Dette gjør koden mer fleksibel og tilpasningsdyktig til ulike situasjoner.

3. Rammer og APIer: Java har mange rammeverk og APIer som bruker abstrakte klasser. Ved å bruke abstrakte klasser kan utviklere spare tid og krefter ved å bygge på eksisterende kode og fokusere på aspektene som er spesifikke for applikasjonene deres.

Q2. Hva er forskjellen mellom Innkapsling og dataabstraksjon?

Her er noen viktige forskjeller i svart/hvitt innkapsling og abstrering:

Innkapsling

Abstraksjon

Innkapsling er dataskjuling (informasjonsskjuling) Abstraksjon er detaljert skjul (implementeringsskjuling).
Innkapsling grupperer data og metoder som virker på dataene Dataabstraksjon handler om å eksponere grensesnittet for brukeren og skjule detaljene i implementeringen
Innkapslede klasser er Java-klasser som følger dataskjuling og abstraksjon Implementering av abstraksjon gjøres ved hjelp av abstrakte klasser og grensesnitt
Innkapsling er en prosedyre som foregår på implementeringsnivå abstraksjon er en prosess på designnivå

Q3. Hva er et virkelighetseksempel på dataabstraksjon?

Fjernkontroll for fjernsyn er et utmerket virkelighetseksempel på abstraksjon. Det forenkler interaksjonen med en TV ved å skjule kompleksiteten bak enkle knapper og symboler, noe som gjør det enkelt uten å måtte forstå de tekniske detaljene om hvordan TV-en fungerer.

Q4. Hva er forskjellen mellom abstrakte klasser og grensesnitt i Java?

Her er noen viktige forskjeller b/h abstrakte klasser og grensesnitt i Java:

Abstrakt klasse

hvordan oppfant skolen

Grensesnitt

Abstrakte klasser støtter abstrakte og ikke-abstrakte metoder Grensesnittstøtter har kun abstrakte metoder.
Støtter ikke multippel arv Støtter multippel arv
Abstrakte klasser kan utvides med Java-klasser og flere grensesnitt Grensesnittet kan kun utvides med Java-grensesnitt.
Abstrakte klassemedlemmer i Java kan være private, beskyttede osv. Grensesnitt er offentlige som standard.

Eksempel:

offentlig abstrakt klasse Vechicle{
offentlig abstrakt void drive()
}

Eksempel:

offentlig grensesnitt Animal{
void snakk();
}