logo

Abstraktio Javassa

Abstraktio Javassa on prosessi, jossa näytämme käyttäjälle vain olennaiset tiedot/toiminnallisuudet. Ei-olennaisia ​​toteutustietoja ei näytetä käyttäjälle.

Tässä artikkelissa opimme abstraktiosta ja siitä, mitä abstrakti tarkoittaa.



Yksinkertainen esimerkki abstraktin ymmärtämiseksi:

Television kaukosäädin on erinomainen esimerkki abstraktiosta . Se yksinkertaistaa vuorovaikutusta television kanssa piilottamalla monimutkaisuuden yksinkertaisten painikkeiden ja symbolien taakse, mikä tekee siitä helppoa ilman, että sinun tarvitsee ymmärtää television toiminnan teknisiä yksityiskohtia.

Mitä Abstraktio on Javassa?

Javassa abstraktio saadaan aikaan käyttöliittymät ja abstrakteja luokat . Voimme saavuttaa 100 % abstraktion rajapintojen avulla.

Tiedonabstraktio voidaan myös määritellä prosessiksi, jossa tunnistetaan vain kohteen vaaditut ominaisuudet ottamatta huomioon merkityksettömiä yksityiskohtia. Objektin ominaisuudet ja käyttäytyminen erottavat sen muista samantyyppisistä objekteista ja auttavat myös objektien luokittelussa/ryhmittelyssä.



Esimerkki abstraktista tosielämästä:

Harkitse tosielämän esimerkkiä miehestä, joka ajaa autoa. Mies tietää vain, että kaasupolkimien painaminen lisää auton nopeutta tai jarruttaminen pysäyttää auton, mutta hän ei tiedä kuinka kaasupoljinta painettaessa nopeus todellisuudessa kasvaa, hän ei tiedä auton sisämekanismista tai kaasupolkimen, jarrujen jne. toteutus autossa. Tämä on sitä, mitä abstraktio on.

Java Abstract -luokat ja Java Abstract -menetelmät

  1. Abstrakti luokka on luokka, joka ilmoitetaan abstraktilla avainsanalla.
  2. Abstrakti menetelmä on menetelmä, joka ilmoitetaan ilman toteutusta.
  3. Abstraktilla luokalla voi olla tai ei välttämättä ole kaikkia abstrakteja menetelmiä. Jotkut niistä voivat olla konkreettisia menetelmiä
  4. Metodin määrittelemä abstrakti on aina määriteltävä uudelleen alaluokassa, mikä tekee ylivoimainen pakollinen tai tekee itse alaluokasta abstraktin.
  5. Jokainen luokka, joka sisältää yhden tai useamman abstraktin menetelmän, on myös ilmoitettava abstraktilla avainsanalla.
  6. Abstraktin luokan objektia ei voi olla. Eli abstraktia luokkaa ei voida instantoida suoraan uusi operaattori .
  7. Abstraktilla luokalla voi olla parametroituja konstruktoreita ja oletuskonstruktori on aina läsnä abstraktissa luokassa.

Algoritmi abstraktion toteuttamiseksi Javassa

  1. Määritä luokat tai rajapinnat, jotka ovat osa abstraktiota.
  2. Luo abstrakti luokka tai käyttöliittymä, joka määrittelee näiden luokkien yleiset käyttäytymiset ja ominaisuudet.
  3. Määritä abstraktit menetelmät abstraktissa luokassa tai käyttöliittymässä, joilla ei ole toteutustietoja.
  4. Toteuta konkreettisia luokkia, jotka laajentavat abstraktia luokkaa tai toteuttavat käyttöliittymän.
  5. Ohita konkreettisten luokkien abstraktit menetelmät tarjotaksesi niiden erityiset toteutukset.
  6. Käytä konkreettisia luokkia toteuttamaan ohjelman logiikka.

Milloin käyttää abstrakteja luokkia ja abstrakteja menetelmiä?

On tilanteita, joissa haluamme määritellä superluokan, joka ilmoittaa tietyn abstraktion rakenteen tarjoamatta täydellistä toteutusta jokaiselle menetelmälle. Joskus haluamme luoda superluokan, joka määrittelee vain yleistyslomakkeen, jonka kaikki alaluokat jakavat, jättäen kunkin alaluokan tehtäväksi täyttää tiedot.

Harkitse klassista muotoesimerkkiä, jota käytetään ehkä tietokoneavusteisessa suunnittelujärjestelmässä tai pelisimulaatiossa. Perustyyppi on muoto ja jokaisella muodolla on väri, koko ja niin edelleen. Tästä johdetaan (peritty) tietyntyyppisiä muotoja - ympyrä, neliö, kolmio ja niin edelleen - joilla jokaisella voi olla lisäominaisuuksia ja -käyttäytymistä. Esimerkiksi tiettyjä muotoja voidaan kääntää. Jotkut käytökset voivat olla erilaisia, esimerkiksi silloin, kun haluat laskea muodon alueen. Tyyppihierarkia sisältää sekä muotojen väliset yhtäläisyydet että erot.



Abstrakti luokka Javassa

Java-abstraktioesimerkki

Esimerkki 1:

Java


rivi autocad-komento



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

>

kuinka paljon kat timpf painaa
>

Lähtö

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>

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

>

>

Lähtö

Buddy barks Fluffy meows>

Selitys yllä olevasta Java-ohjelmasta:

päivitys sql:ssä liittymällä

Tämä koodi määrittelee Animal-abstraktin luokan abstraktilla menetelmällä makeSound(). Koira- ja Kissa-luokat laajentavat Animalia ja toteuttavat makeSound()-menetelmän. Main()-menetelmä luo esiintymiä koirasta ja kissasta ja kutsuu niissä makeSound()-metodia.

Tämä havainnollistaa Java:n abstraktiokonseptia, jossa määritetään luokalle (tässä tapauksessa Animal) malli, mutta jätetään tiettyjen menetelmien toteutus alaluokkien määritettäväksi (tässä tapauksessa makeSound()).

Käyttöliittymä

Liitännät ovat toinen menetelmä abstraktin toteuttamiseksi Javassa. Keskeinen ero on, että käyttöliittymiä käyttämällä voimme saavuttaa 100 %:n abstraktion Java-luokissa. Javassa tai millä tahansa muulla kielellä käyttöliittymät sisältävät sekä menetelmiä että muuttujia, mutta niiltä puuttuu metodirunko. Abstraation lisäksi rajapintoja voidaan käyttää myös Java-rajapintojen toteuttamiseen.

Toteutus: Toteuttaaksesi an käyttöliittymä käytämme avainsanaa toteuttaa luokan kanssa.

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 merkkijono vertaa

>

>

Lähtö

Area of Circle: 78.53981633974483 Area of Rectangle: 24.0>

Abstraation edut

Tässä on joitain abstraktion etuja:

  1. Se vähentää asioiden katselun monimutkaisuutta.
  2. Välttää koodin päällekkäisyyden ja lisää uudelleenkäytettävyyttä.
  3. Auttaa lisäämään sovelluksen tai ohjelman turvallisuutta, koska käyttäjälle annetaan vain olennaiset tiedot.
  4. Se parantaa sovelluksen ylläpidettävyyttä.
  5. Se parantaa sovelluksen modulaarisuutta.
  6. Parannuksesta tulee erittäin helppoa, koska voimme tehdä kaikenlaisia ​​muutoksia sisäiseen järjestelmäämme vaikuttamatta loppukäyttäjiin.
  7. Parantaa koodin uudelleenkäytettävyyttä ja ylläpidettävyyttä.
  8. Piilottaa toteutustiedot ja paljastaa vain olennaiset tiedot.
  9. Tarjoaa selkeän ja yksinkertaisen käyttöliittymän käyttäjälle.
  10. Lisää turvallisuutta estämällä pääsyn luokan sisäisiin tietoihin.
  11. Tukee modulaarisuutta, koska monimutkaiset järjestelmät voidaan jakaa pienempiin ja paremmin hallittaviin osiin.
  12. Abstraktio tarjoaa tavan piilottaa toteutuksen yksityiskohtien monimutkaisuus käyttäjältä, mikä helpottaa niiden ymmärtämistä ja käyttöä.
  13. Abstraktio mahdollistaa joustavuuden ohjelman toteutuksessa, koska taustalla oleviin toteutusyksityiskohtiin voidaan tehdä muutoksia vaikuttamatta käyttäjälle suunnattuun käyttöliittymään.
  14. Abstraktio mahdollistaa modulaarisuuden ja huolenaiheiden erottamisen, mikä tekee koodista helpommin ylläpidettävän ja helpompia virheenkorjausta.

Abstractionin haitat Javassa

Tässä ovat Java:n abstraktion tärkeimmät haitat:

  1. Abstraktio voi vaikeuttaa järjestelmän toiminnan ymmärtämistä.
  2. Se voi lisätä monimutkaisuutta, varsinkin jos sitä ei käytetä oikein.
  3. Tämä saattaa rajoittaa toteutuksen joustavuutta.
  4. Abstraktio voi lisätä koodiin tarpeetonta monimutkaista, jos sitä ei käytetä asianmukaisesti, mikä lisää kehitysaikaa ja vaivaa.
  5. Abstraktio voi vaikeuttaa koodin virheenkorjausta ja ymmärtämistä, varsinkin niille, jotka eivät tunne abstraktiokerroksia ja toteutuksen yksityiskohtia.
  6. Abstraktion liiallinen käyttö voi heikentää suorituskykyä koodin ja epäsuoran lisäkerrosten vuoksi.

Lue myös:

Abstraktio Javassa – UKK

Q1. Miksi käytämme abstraktia?

Yksi keskeinen syy, miksi käytämme abstrakteja käsitteitä, on monimutkaisuuden yksinkertaistaminen. Kuvittele, että yrität selittää koko maailmankaikkeuden jokaisella atomilla ja tähdellä! Abstraktien avulla voimme loitontaa, tarttua tärkeimpiin ideoihin, kuten painovoimaan ja energiaan, ja saada järkeä kaikesta menettämättä yksityiskohtiin.

Tässä on joitain muita syitä, miksi käytämme abstraktia Javassa:

1. Abstraktio : Abstrakteja luokkia käytetään määrittelemään yleinen malli muille luokille, joita seurataan. He määrittelevät joukon sääntöjä ja ohjeita, joita heidän alaluokkien on noudatettava. Tarjoamalla abstraktin luokan voimme varmistaa, että sitä laajentavilla luokilla on johdonmukainen rakenne ja käyttäytyminen. Tämä tekee koodista järjestelmällisemmän ja helpompi ylläpitää.

2. Polymorfismi : Abstraktit luokat ja menetelmät mahdollistavat polymorfismin Javassa. Polymorfismi on esineen kykyä ottaa monia muotoja. Tämä tarkoittaa, että abstraktin tyypin muuttuja voi sisältää minkä tahansa abstraktin luokan konkreettisen alaluokan objekteja. Tämä tekee koodista joustavamman ja mukautuvamman erilaisiin tilanteisiin.

3. Kehykset ja sovellusliittymät: Javalla on lukuisia kehyksiä ja API:ita, jotka käyttävät abstrakteja luokkia. Abstrakteja luokkia käyttämällä kehittäjät voivat säästää aikaa ja vaivaa rakentamalla olemassa olevaan koodiin ja keskittymällä sovelluksilleen ominaisiin näkökohtiin.

Q2. Mitä eroa on Kapselointi ja tietojen abstraktio?

Tässä on joitain keskeisiä eroja mustavalkokapseloinnin ja abstraktion välillä:

Kapselointi

Abstraktio

Kapselointi on tietojen piilottamista (tietojen piilottaminen) Abstraktio on yksityiskohtainen piilottaminen (toteutuksen piilottaminen).
Kapselointi ryhmittelee tiedot ja menetelmät, jotka vaikuttavat dataan Data Abstraction käsittelee käyttöliittymän paljastamista käyttäjälle ja toteutuksen yksityiskohtien piilottamista
Kapseloidut luokat ovat Java-luokkia, jotka seuraavat tietojen piilottamista ja abstraktiota Abstraktion toteutus tapahtuu abstraktien luokkien ja käyttöliittymän avulla
Kapselointi on prosessi, joka tapahtuu toteutustasolla abstraktio on suunnittelutason prosessi

Q3. Mikä on tosielämän esimerkki datan abstraktiosta?

Television kaukosäädin on erinomainen tosielämän esimerkki abstraktiosta. Se yksinkertaistaa vuorovaikutusta television kanssa piilottamalla monimutkaisuuden yksinkertaisten painikkeiden ja symbolien taakse, mikä tekee siitä helppoa ilman, että sinun tarvitsee ymmärtää television toiminnan teknisiä yksityiskohtia.

Q4. Mitä eroa on abstraktien luokkien ja käyttöliittymien välillä Javassa?

Tässä on joitain keskeisiä eroja Java-abstraktien luokkien ja käyttöliittymien välillä:

Abstrakti luokka

cdr täysi muoto

Liitännät

Abstraktit luokat tukevat abstrakteja ja ei-abstrakteja menetelmiä Käyttöliittymätuilla on vain abstrakteja menetelmiä.
Ei tue moniperintöä Tukee useita perintöjä
Abstrakteja luokkia voidaan laajentaa Java-luokilla ja useilla käyttöliittymillä Käyttöliittymää voidaan laajentaa vain Java-rajapinnalla.
Abstraktit luokan jäsenet Javassa voivat olla yksityisiä, suojattuja jne. Liitännät ovat oletuksena julkisia.

Esimerkki:

julkinen abstrakti luokka ajoneuvo{
julkinen abstrakti tyhjä asema()
}

Esimerkki:

julkinen käyttöliittymä Animal{
void speak();
}