logo

Abstrakcija Java

Abstrakcija Java yra procesas, kurio metu vartotojui parodome tik esmines detales/funkcionalumą. Neesminė diegimo informacija vartotojui nerodoma.

Šiame straipsnyje mes sužinosime apie abstrakciją ir tai, ką reiškia abstrakcija.



Paprastas pavyzdys, kaip suprasti abstrakciją:

Televizoriaus nuotolinio valdymo pultas yra puikus abstrakcijos pavyzdys . Jis supaprastina sąveiką su televizoriumi, nes sudėtingumą paslepia už paprastų mygtukų ir simbolių, todėl nereikia suprasti techninių televizoriaus veikimo detalių.

Kas yra abstrakcija Java?

Java programoje abstrakcija pasiekiama naudojant sąsajos ir abstrakčios klasės . Naudodami sąsajas galime pasiekti 100% abstrakciją.

Duomenų abstrakcija taip pat gali būti apibrėžiama kaip procesas, kai nustatomos tik reikiamos objekto savybės, ignoruojant nereikšmingas detales. Objekto savybės ir elgsena išskiria jį iš kitų panašaus tipo objektų, taip pat padeda klasifikuoti/grupuoti objektus.



Abstrakcijos realaus gyvenimo pavyzdys:

Apsvarstykite realų pavyzdį, kai vyras vairuoja automobilį. Vyras žino tik tiek, kad paspaudus akceleratorių padidės automobilio greitis arba stabdžius sustabdys automobilį, bet nežino, kaip paspaudus akceleratorių greitis iš tikrųjų didėja, nežino apie vidinį automobilio mechanizmą. arba akceleratoriaus, stabdžių ir pan. įrengimas automobilyje. Štai kas yra abstrakcija.

Java Abstract klasės ir Java Abstract metodai

  1. Abstrakti klasė yra klasė, kuri deklaruojama abstrakčiu raktiniu žodžiu.
  2. Abstraktus metodas yra metodas, kuris deklaruojamas neįgyvendinus.
  3. Abstrakčioji klasė gali turėti visus abstrakčius metodus arba ne. Kai kurie iš jų gali būti konkretūs metodai
  4. Metodo apibrėžta santrauka visada turi būti iš naujo apibrėžta poklasyje, tokiu būdu sukuriant svarbiausias privalomas arba pats poklasis tampa abstrakčiu.
  5. Bet kuri klasė, kurioje yra vienas ar daugiau abstrakčių metodų, taip pat turi būti deklaruojama naudojant abstraktų raktinį žodį.
  6. Negali būti jokio abstrakčios klasės objekto. Tai reiškia, kad abstrakčios klasės negalima tiesiogiai sudaryti naujas operatorius .
  7. Abstrakčioje klasėje gali būti parametrizuoti konstruktoriai, o numatytasis konstruktorius visada yra abstrakčioje klasėje.

Algoritmas abstrakcijai įgyvendinti Java

  1. Nustatykite klases arba sąsajas, kurios bus abstrakcijos dalis.
  2. Sukurkite abstrakčią klasę arba sąsają, kuri apibrėžia bendrą šių klasių elgesį ir savybes.
  3. Apibrėžkite abstrakčiuosius metodus abstrakčioje klasėje arba sąsajoje, kurioje nėra jokios įgyvendinimo informacijos.
  4. Įdiekite konkrečias klases, kurios praplečia abstrakčią klasę arba įgyvendina sąsają.
  5. Nepaisykite abstrakčių metodų konkrečiose klasėse, kad pateiktumėte konkrečius jų įgyvendinimus.
  6. Programos logikai įgyvendinti naudokite konkrečias klases.

Kada naudoti abstrakčias klases ir abstrakčius metodus?

Yra situacijų, kai norime apibrėžti superklasę, kuri deklaruoja tam tikros abstrakcijos struktūrą, nepateikdama visiško kiekvieno metodo įgyvendinimo. Kartais norime sukurti superklasę, kuri apibrėžia tik apibendrinimo formą, kuria dalinsis visi jos poklasiai, palikdami kiekvienam poklasiui užpildyti išsamią informaciją.

Apsvarstykite klasikinės formos pavyzdį, galbūt naudojamą kompiuterinėje projektavimo sistemoje arba žaidimo modeliavime. Pagrindinis tipas yra forma, o kiekviena forma turi spalvą, dydį ir pan. Iš to išvedami (paveldėti) specifiniai formų tipai – apskritimas, kvadratas, trikampis ir t. t. – kiekviena iš jų gali turėti papildomų savybių ir elgsenos. Pavyzdžiui, tam tikras figūras galima apversti. Kai kurie veiksmai gali skirtis, pvz., kai norite apskaičiuoti figūros plotą. Tipo hierarchija įkūnija ir formų panašumus, ir skirtumus.



Abstrakti klasė Java

Java abstrakcijos pavyzdys

1 pavyzdys:

Java


powershell mažesnis arba lygus



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

>

"Kuo skiriasi liūtas ir tigras"
>

Išvestis

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>

2 pavyzdys:

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

>

>

Išvestis

ką tai reiškia xd
Buddy barks Fluffy meows>

Aukščiau pateiktos Java programos paaiškinimas:

Šis kodas apibrėžia abstrakčią gyvūnų klasę su abstrakčiu metodu makeSound(). Šunų ir kačių klasės išplečia Animal ir įgyvendina makeSound() metodą. Pagrindinis() metodas sukuria šuns ir katės egzempliorius ir iškviečia juos makeSound() metodą.

Tai parodo Java abstrakcijos koncepciją, kai apibrėžiame klasės šabloną (šiuo atveju Animal), bet paliekame tam tikrų metodų įgyvendinimą apibrėžti poklasiais (šiuo atveju makeSound()).

Sąsaja

Sąsajos yra dar vienas „Java“ abstrakcijos įgyvendinimo būdas. Pagrindinis skirtumas yra tas, kad naudodami sąsajas galime pasiekti 100% abstrakciją Java klasėse. „Java“ ar bet kurioje kitoje kalboje sąsajos apima ir metodus, ir kintamuosius, tačiau neturi metodo pagrindo. Be abstrakcijos, sąsajos taip pat gali būti naudojamos sąsajoms įdiegti „Java“.

Įgyvendinimas: Norėdami įgyvendinti an sąsaja naudojame raktinį žodį padargai su klase.

Java




išvalyti talpyklą npm

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

>

>

Išvestis

Area of Circle: 78.53981633974483 Area of Rectangle: 24.0>

Abstrakcijos privalumai

Štai keletas abstrakcijos pranašumų:

  1. Tai sumažina dalykų žiūrėjimo sudėtingumą.
  2. Išvengia kodo dubliavimo ir padidina pakartotinį naudojimą.
  3. Padeda padidinti programos ar programos saugumą, nes vartotojui pateikiama tik esminė informacija.
  4. Tai pagerina programos priežiūrą.
  5. Tai pagerina programos moduliškumą.
  6. Tobulinimas taps labai lengvas, nes nepaveikdami galutinių vartotojų galėsime atlikti bet kokius savo vidinės sistemos pakeitimus.
  7. Pagerina kodo pakartotinį naudojimą ir priežiūrą.
  8. Slepia įgyvendinimo detales ir atskleidžia tik svarbią informaciją.
  9. Suteikia vartotojui aiškią ir paprastą sąsają.
  10. Padidina saugumą, užkertant kelią prieigai prie vidinės klasės informacijos.
  11. Palaiko moduliškumą, nes sudėtingas sistemas galima suskirstyti į mažesnes ir lengviau valdomas dalis.
  12. Abstrakcija suteikia galimybę paslėpti diegimo detalių sudėtingumą nuo vartotojo, kad būtų lengviau suprasti ir naudoti.
  13. Abstrakcija suteikia galimybę lanksčiai diegti programą, nes galima atlikti pagrindinių diegimo detalių pakeitimus nepažeidžiant vartotojo sąsajos.
  14. Abstrakcija suteikia galimybę moduliuoti ir atskirti problemas, todėl kodą lengviau prižiūrėti ir lengviau derinti.

Abstrakcijos trūkumai Java

Štai pagrindiniai „Java“ abstrakcijos trūkumai:

  1. Dėl abstrakcijos gali būti sunkiau suprasti, kaip sistema veikia.
  2. Tai gali padidinti sudėtingumą, ypač netinkamai naudojant.
  3. Tai gali apriboti įgyvendinimo lankstumą.
  4. Abstrakcija gali sukelti nereikalingą kodo sudėtingumą, jei jis netinkamai naudojamas, todėl pailgėja kūrimo laikas ir pastangos.
  5. Dėl abstrakcijos gali būti sunkiau derinti ir suprasti kodą, ypač tiems, kurie nėra susipažinę su abstrakcijos sluoksniais ir įgyvendinimo detalėmis.
  6. Per didelis abstrakcijos naudojimas gali sumažinti našumą dėl papildomų kodo ir netiesioginių sluoksnių.

Taip pat skaitykite:

Abstrakcija Java – DUK

Q1. Kodėl mes naudojame abstrakčius?

Viena iš pagrindinių priežasčių, kodėl naudojame abstrakčias sąvokas, yra sudėtingumo supaprastinimas. Įsivaizduokite, kad bandote paaiškinti visą visatą su kiekvienu atomu ir žvaigžde! Santraukos leidžia mums nutolinti, patraukti pagrindines idėjas, tokias kaip gravitacija ir energija, ir visa tai suprasti nepasiklystant detalėse.

Štai keletas kitų priežasčių, kodėl „Java“ naudojame abstrakčius:

1. Abstrakcija : abstrakčios klasės naudojamos apibrėžti bendrąjį šabloną kitoms klasėms. Jie apibrėžia taisyklių ir gairių rinkinį, kurių turi laikytis jų poklasiai. Pateikdami abstrakčią klasę galime užtikrinti, kad ją pratęsiančios klasės turėtų nuoseklią struktūrą ir elgesį. Dėl to kodas yra labiau organizuotas ir lengviau prižiūrimas.

2. Polimorfizmas : abstrakčios klasės ir metodai įgalina „Java“ polimorfizmą. Polimorfizmas yra objekto gebėjimas įgauti įvairias formas. Tai reiškia, kad abstrakčiojo tipo kintamasis gali turėti bet kurio konkretaus tos abstrakčios klasės poklasio objektus. Dėl to kodas tampa lankstesnis ir pritaikomas skirtingoms situacijoms.

3. Struktūra ir API: „Java“ turi daugybę struktūrų ir API, kuriose naudojamos abstrakčios klasės. Naudodami abstrakčias klases kūrėjai gali sutaupyti laiko ir pastangų, remdamiesi esamu kodu ir sutelkdami dėmesį į specifinius jų taikomųjų programų aspektus.

Q2. Koks skirtumas tarp Inkapsuliavimas ir duomenų abstrakcija?

Štai keletas pagrindinių skirtumų tarp juodos spalvos inkapsuliacijos ir abstrakcijos:

Inkapsuliavimas

Abstrakcija

Inkapsuliavimas yra duomenų slėpimas (informacijos slėpimas) Abstrakcija yra detalus slėpimas (įgyvendinimo slėpimas).
Inkapsuliavimas sugrupuoja duomenis ir metodus, kurie veikia duomenis Duomenų abstrakcija susijusi su sąsajos pateikimu vartotojui ir įgyvendinimo detalių slėpimu
Inkapsuliuotos klasės yra „Java“ klasės, kurios seka duomenų slėpimą ir abstrakciją Abstrakcijos įgyvendinimas atliekamas naudojant abstrakčias klases ir sąsają
Inkapsuliavimas yra procedūra, kuri vyksta įgyvendinimo lygmeniu abstrakcija yra dizaino lygio procesas

Q3. Kas yra realus duomenų abstrakcijos pavyzdys?

Televizoriaus nuotolinio valdymo pultas yra puikus realaus gyvenimo abstrakcijos pavyzdys. Jis supaprastina sąveiką su televizoriumi, nes sudėtingumą paslepia už paprastų mygtukų ir simbolių, todėl nereikia suprasti techninių televizoriaus veikimo detalių.

4 klausimas. Kuo skiriasi abstrakčios klasės ir „Java“ sąsajos?

Štai keletas pagrindinių „Java“ juodųjų / baltų abstrakčių klasių ir sąsajų skirtumų:

Abstrakti klasė

spyruokliniai moduliai

Sąsajos

Abstrakčios klasės palaiko abstrakčiuosius ir neabstrakčiuosius metodus Sąsajos atramos turi tik abstrakčius metodus.
Nepalaiko kelių paveldėjimo Palaiko daugialypį paveldėjimą
Abstrakčias klases galima išplėsti Java klasėmis ir keliomis sąsajomis Sąsaja gali būti išplėsta tik naudojant Java sąsają.
Abstrakčios klasės nariai Java gali būti privatūs, apsaugoti ir pan. Pagal numatytuosius nustatymus sąsajos yra viešos.

Pavyzdys:

viešoji abstrakčios klasės transporto priemonė{
viešas abstraktus tuščias diskas ()
}

Pavyzdys:

viešoji sąsaja gyvūnas{
tuščias kalbėjimas ();
}