logo

Abstrakcija v Javi

Abstrakcija v Javi je proces, v katerem uporabniku pokažemo le bistvene podrobnosti/funkcionalnost. Nebistvene podrobnosti izvedbe niso prikazane uporabniku.

V tem članku bomo spoznali abstrakcijo in kaj abstraktno pomeni.



Preprost primer za razumevanje abstrakcije:

Televizijski daljinski upravljalnik je odličen primer abstrakcije . Poenostavi interakcijo s televizorjem, tako da skrije zapletenost za preprostimi gumbi in simboli, zaradi česar je preprosta, ne da bi morali razumeti tehnične podrobnosti delovanja televizorja.

Kaj je abstrakcija v Javi?

V Javi je abstrakcija dosežena z vmesniki in abstraktni razredi . Z uporabo vmesnikov lahko dosežemo 100 % abstrakcijo.

Abstrakcijo podatkov lahko definiramo tudi kot postopek identifikacije le zahtevanih lastnosti objekta, pri čemer se ne upoštevajo nepomembne podrobnosti. Lastnosti in obnašanje predmeta ga razlikujejo od drugih predmetov podobnega tipa in pomagajo pri razvrščanju/združevanju predmetov v skupine.



Primer abstrakcije iz resničnega življenja:

Razmislite o resničnem primeru moškega, ki vozi avto. Človek ve le, da bo s pritiskom na plin povečala hitrost avtomobila ali z zaviranjem bo avto ustavil, ne ve pa, kako se s pritiskom na plin hitrost dejansko poveča, ne pozna notranjega mehanizma avtomobila. ali implementacija plina, zavor itd. v avtomobilu. To je tisto, kar je abstrakcija.

Java Abstract razredi in Java Abstract metode

  1. Abstraktni razred je razred, ki je deklariran z abstraktno ključno besedo.
  2. Abstraktna metoda je metoda, ki je deklarirana brez implementacije.
  3. Abstraktni razred ima lahko vse abstraktne metode ali pa tudi ne. Nekatere od njih so lahko konkretne metode
  4. Izvleček, definiran z metodo, je treba vedno znova definirati v podrazredu, s čimer se naredi prevladujoče obvezna ali zaradi abstraktnosti samega podrazreda.
  5. Vsak razred, ki vsebuje eno ali več abstraktnih metod, mora biti deklariran tudi z abstraktno ključno besedo.
  6. Ne more obstajati objekt abstraktnega razreda. To pomeni, da abstraktnega razreda ni mogoče neposredno instancirati z nov operater .
  7. Abstraktni razred ima lahko parametrizirane konstruktorje in privzeti konstruktor je vedno prisoten v abstraktnem razredu.

Algoritem za implementacijo abstrakcije v Javi

  1. Določite razrede ali vmesnike, ki bodo del abstrakcije.
  2. Ustvarite abstrakten razred ali vmesnik, ki definira skupno vedenje in lastnosti teh razredov.
  3. Definirajte abstraktne metode znotraj abstraktnega razreda ali vmesnika, ki nimajo nobenih izvedbenih podrobnosti.
  4. Izvedite konkretne razrede, ki razširijo abstraktni razred ali implementirajte vmesnik.
  5. Preglasite abstraktne metode v konkretnih razredih, da zagotovite njihove posebne izvedbe.
  6. Uporabite konkretne razrede za implementacijo programske logike.

Kdaj uporabiti abstraktne razrede in abstraktne metode?

Obstajajo situacije, v katerih bomo želeli definirati nadrazred, ki deklarira strukturo dane abstrakcije, ne da bi zagotovil popolno izvedbo vsake metode. Včasih bomo želeli ustvariti nadrazred, ki definira samo generalizacijsko obliko, ki si jo bodo delili vsi njegovi podrazredi, pri čemer vsakemu podrazredu prepustimo, da izpolni podrobnosti.

Razmislite o klasičnem primeru oblike, morda uporabljenem v računalniško podprtem načrtovalskem sistemu ali simulaciji igre. Osnovni tip je oblika in vsaka oblika ima barvo, velikost itd. Iz tega so izpeljane (podedovane) posebne vrste oblik - krog, kvadrat, trikotnik itd. - od katerih ima vsaka lahko dodatne značilnosti in vedenja. Na primer, določene oblike je mogoče obrniti. Nekatera vedenja so lahko drugačna, na primer, ko želite izračunati površino oblike. Hierarhija tipov uteleša tako podobnosti kot razlike med oblikami.



Abstraktni razred v Javi

Primer abstrakcije Java

Primer 1:

Java


if-else java



// 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());> >}> }>

>

praštevilo java
>

Izhod

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>

Primer 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();> >}> }>

>

>

Izhod

Buddy barks Fluffy meows>

Razlaga zgornjega programa Java:

Ta koda definira abstraktni razred Animal z abstraktno metodo makeSound(). Razreda Dog and Cat razširjata Animal in izvajata metodo makeSound(). Metoda main() ustvari primerke Dog and Cat in na njih pokliče metodo makeSound().

To prikazuje koncept abstrakcije v Javi, kjer definiramo predlogo za razred (v tem primeru Animal), vendar pustimo, da izvajanje določenih metod definirajo podrazredi (v tem primeru makeSound()).

Vmesnik

Vmesniki so še ena metoda izvajanja abstrakcije v Javi. Ključna razlika je v tem, da lahko z uporabo vmesnikov dosežemo 100% abstrakcijo v razredih Java. V Javi ali katerem koli drugem jeziku vmesniki vključujejo metode in spremenljivke, nimajo pa telesa metode. Poleg abstrakcije se lahko vmesniki uporabljajo tudi za implementacijo vmesnikov v Javi.

Izvedba: Za izvajanje an vmesnik uporabljamo ključno besedo izvaja z razredom.

python inicializacijski seznam

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());> >}> }>

>

>

Izhod

Area of Circle: 78.53981633974483 Area of Rectangle: 24.0>

Prednosti abstrakcije

Tukaj je nekaj prednosti abstrakcije:

  1. Zmanjša zapletenost gledanja stvari.
  2. Preprečuje podvajanje kode in povečuje možnost ponovne uporabe.
  3. Pomaga povečati varnost aplikacije ali programa, saj so uporabniku na voljo le bistvene podrobnosti.
  4. Izboljša vzdržljivost aplikacije.
  5. Izboljša modularnost aplikacije.
  6. Izboljšava bo postala zelo enostavna, saj lahko brez vpliva na končne uporabnike izvajamo kakršne koli spremembe v našem notranjem sistemu.
  7. Izboljša možnost ponovne uporabe in vzdrževanja kode.
  8. Skrije podrobnosti izvedbe in izpostavi samo ustrezne informacije.
  9. Uporabniku ponuja jasen in preprost vmesnik.
  10. Poveča varnost s preprečevanjem dostopa do notranjih podrobnosti razreda.
  11. Podpira modularnost, saj je kompleksne sisteme mogoče razdeliti na manjše in bolj obvladljive dele.
  12. Abstrakcija ponuja način, kako skriti kompleksnost podrobnosti izvedbe pred uporabnikom, kar olajša razumevanje in uporabo.
  13. Abstrakcija omogoča prilagodljivost pri izvajanju programa, saj je mogoče spremeniti osnovne podrobnosti izvedbe, ne da bi to vplivalo na uporabniški vmesnik.
  14. Abstrakcija omogoča modularnost in ločevanje zadev, zaradi česar je koda bolj vzdržljiva in jo je lažje odpravljati.

Slabosti abstrakcije v Javi

Tu so glavne pomanjkljivosti abstrakcije v Javi:

  1. Abstrakcija lahko oteži razumevanje delovanja sistema.
  2. Lahko povzroči povečano zapletenost, zlasti če se ne uporablja pravilno.
  3. To lahko omeji fleksibilnost izvedbe.
  4. Abstrakcija lahko kodi doda nepotrebno zapletenost, če se ne uporablja ustrezno, kar vodi do povečanega časa in truda pri razvoju.
  5. Abstrakcija lahko oteži odpravljanje napak in razumevanje kode, zlasti za tiste, ki niso seznanjeni s plastmi abstrakcije in podrobnostmi implementacije.
  6. Prekomerna uporaba abstrakcije lahko povzroči zmanjšano zmogljivost zaradi dodatnih plasti kode in posrednosti.

Preberite tudi:

Abstrakcija v Javi – pogosta vprašanja

Q1. Zakaj uporabljamo abstraktno?

Eden ključnih razlogov, zakaj uporabljamo abstraktne koncepte, je poenostavitev kompleksnosti. Predstavljajte si, da poskušate razložiti celotno vesolje z vsakim atomom in zvezdo! Povzetki nam omogočajo, da pomanjšamo, zgrabimo glavne ideje, kot sta gravitacija in energija, in vse skupaj razumemo, ne da bi se izgubili v podrobnostih.

rajesh khanna

Tukaj je nekaj drugih razlogov, zakaj uporabljamo abstrakt v Javi:

1. Abstrakcija : Abstraktni razredi se uporabljajo za definiranje generične predloge, ki ji bodo sledili drugi razredi. Določijo nabor pravil in smernic, ki jih morajo upoštevati njihovi podrazredi. Z zagotavljanjem abstraktnega razreda lahko zagotovimo, da imajo razredi, ki ga razširjajo, dosledno strukturo in obnašanje. To naredi kodo bolj organizirano in lažjo za vzdrževanje.

2. Polimorfizem : Abstraktni razredi in metode omogočajo polimorfizem v Javi. Polimorfizem je sposobnost predmeta, da prevzame številne oblike. To pomeni, da lahko spremenljivka abstraktnega tipa vsebuje objekte katerega koli konkretnega podrazreda tega abstraktnega razreda. Zaradi tega je koda bolj fleksibilna in prilagodljiva različnim situacijam.

3. Ogrodja in API-ji: Java ima številna ogrodja in API-je, ki uporabljajo abstraktne razrede. Z uporabo abstraktnih razredov lahko razvijalci prihranijo čas in trud tako, da gradijo na obstoječi kodi in se osredotočajo na vidike, specifične za njihove aplikacije.

Q2. Kaj je razlika med Enkapsulacija in abstrakcija podatkov?

Tukaj je nekaj ključnih razlik med črno-belo inkapsulacijo in abstrakcijo:

Enkapsulacija

Abstrakcija

Enkapsulacija je skrivanje podatkov (skrivanje informacij) Abstrakcija je podrobno skrivanje (skrivanje implementacije).
Enkapsulacija združuje podatke in metode, ki delujejo na podlagi podatkov Abstrakcija podatkov se ukvarja z izpostavljanjem vmesnika uporabniku in skrivanjem podrobnosti implementacije
Enkapsulirani razredi so razredi Java, ki sledijo skrivanju in abstrakciji podatkov Implementacija abstrakcije poteka z uporabo abstraktnih razredov in vmesnika
Enkapsulacija je postopek, ki poteka na implementacijski ravni abstrakcija je proces na ravni oblikovanja

Q3. Kaj je resnični primer abstrakcije podatkov?

Televizijski daljinski upravljalnik je odličen primer abstrakcije v resničnem življenju. Poenostavi interakcijo s televizorjem, tako da skrije zapletenost za preprostimi gumbi in simboli, zaradi česar je preprosta, ne da bi morali razumeti tehnične podrobnosti delovanja televizorja.

Q4. Kakšna je razlika med abstraktnimi razredi in vmesniki v Javi?

Tukaj je nekaj ključnih razlik med abstraktnimi razredi in vmesniki v Javi:

Abstraktni razred

kako prekličeš izbiro v gimp

Vmesniki

Abstraktni razredi podpirajo abstraktne in neabstraktne metode Vmesniške podpore imajo samo abstraktne metode.
Ne podpira večkratnega dedovanja Podpira večkratno dedovanje
Abstraktne razrede je mogoče razširiti z razredi Java in več vmesniki Vmesnik je mogoče razširiti samo z vmesnikom Java.
Člani abstraktnega razreda v Javi so lahko zasebni, zaščiteni itd. Vmesniki so privzeto javni.

primer:

javni abstraktni razred Vechicle{
javni abstraktni void pogon()
}

primer:

javni vmesnik Žival{
prazen govor();
}