what is abstraction java learn with examples
Tento tutoriál vysvetľuje, čo je Abstraction in Java, spolu s príkladmi programovania. Dozviete sa tiež, čo je abstraktná trieda a prečo sa používa:
V tejto sérii JAVA budeme diskutovať o dôležitých vlastnostiach objektovo orientovaného programovania (OOP), ktoré sú tiež známe ako štyri piliere, tj. Abstrakcia, zapuzdrenie, dedičnosť a polymorfizmus.
Prvý pilier OOP je „Abstrakcia“. „Abstrakcia je proces výberu údajov, aby sa používateľovi zobrazili iba relevantné informácie.“
=> Tu si pozrite príručku Java Beginners Guide.
Čo sa dozviete:
Abstrakcia v OOP
Jednoducho povedané, abstrakcia „zobrazuje“ iba príslušné atribúty objektov a „skrýva“ nepotrebné podrobnosti.
Napríklad, keď riadime auto, zaujíma nás iba to, ako riadiť auto, ako je štart / stop, zrýchlenie / rozbitie atď. Nezaujíma nás, ako interný mechanizmus skutočného spustenia / zastavenia alebo zrýchlenia / brzdy funguje. Len nás tieto podrobnosti nezaujímajú.
To, čo nás znepokojuje, je „abstraktný“ pohľad na tieto operácie, ktorý nám pomôže poháňať auto dopredu a dostať sa do cieľa. Toto je jednoduchý príklad abstrakcie.
Automobil teda má zavedené všetky mechanizmy a procesy, ale z pohľadu koncového používateľa, teda z pohľadu vodiča automobilu, ho bude zaujímať iba abstraktný pohľad na tieto procesy.
Abstrakcia znižuje programovacie úsilie a tým aj zložitosť. Koncový používateľ používajúci aplikáciu sa nemusí obávať, ako je konkrétna funkcia implementovaná. Môže iba využívať požadované funkcie.
Teda v abstrakcii sa zaoberáme myšlienkami a nie udalosťami. To znamená, že pred používateľom skryjeme podrobnosti implementácie a koncovému používateľovi vystavíme iba funkčnosť. Užívateľ tak bude vedieť iba „čo robí“, nie „ako to robí“.
Abstrakcia v OOP môže byť dvoch typov.
# 1) Abstrakcia údajov
Pri abstrakcii dát väčšinou tvoríme zložité dátové typy a skrývame ich implementáciu. Operáciám na manipuláciu s týmito dátovými typmi vystavujeme iba operácie bez podrobností o ich implementácii.
Výhodou tohto prístupu je, že môžeme kedykoľvek zmeniť implementáciu bez toho, aby sme zmenili správanie, ktoré je vystavené používateľovi.
# 2) Kontrolná abstrakcia
Kontrolná abstrakcia zhromažďuje všetky kontrolné príkazy, ktoré sú súčasťou aplikácie, a sprístupňuje ich ako jednotku. Táto vlastnosť sa používa, keď musíme pomocou tejto riadiacej jednotky vykonať pracovnú vlastnosť.
Regulačná abstrakcia tvorí hlavnú jednotku štruktúrovaného programovania a pomocou abstrakcie riadenia môžeme definovať jednoduché funkcie až po zložité rámce.
Čo je to abstrakcia v prostredí Java
Pretože Java je jazyk OOP, na abstrakciu sa dá pozerať ako na jednu z dôležitých vlastností a stavebných prvkov jazyka Java. V Jave sa abstrakcia implementuje pomocou abstraktnej triedy a rozhrania.
Ako teda implementujeme abstrakciu v Jave? Java poskytuje modifikátor neprístupu „abstrakt“ na implementáciu abstrakcie. Tento abstraktný modifikátor možno použiť s triedami a metódami, ale nie s premennými.
vo svojej sieti ste nahradili predvolenú bránu
Rozhranie poskytuje úplnú abstrakciu, t. J. Poskytuje iba prototypy metód, a nie ich implementáciu. Abstraktná trieda poskytuje čiastočnú abstrakciu, pri ktorej by sa nemala implementovať aspoň jedna metóda.
V tomto výučbe sa budeme podrobne zaoberať abstrakciou s abstraktnými triedami. Rozhrania podrobne preskúmame v našich ďalších tutoriáloch.
Príklad Java Abstrakcie
Pozrime sa na nasledujúci príklad.
//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 } }
Výkon:
Jednoduchý príklad abstrakcie, ktorý je uvedený vyššie, má triedu Car. V tejto triede Auto máme abstraktnú metódu accelerate (). Potom dedíme túto triedu v triede Suzuki. V triede Suzuki implementujeme metódu akcelerácie.
Vyššie uvedený príklad jednoducho ukazuje spôsob, akým je abstraktná trieda definovaná, zdedená a potom použitá v programe.
Čo je to abstraktná trieda Java
Už sme spomenuli, že Java implementuje abstrakciu pomocou abstraktných tried a rozhraní. Poďme si najskôr predstaviť všetko o abstraktnej triede.
Abstraktnú triedu možno definovať ako triedu deklarovanú kľúčovým slovom „abstrakt“ a má obmedzenie, že ju nemožno inštancovať.
Abstraktná trieda môže alebo nemusí mať žiadnu abstraktnú metódu (metóda bez implementácie). Pokiaľ ide o JVM, abstraktná trieda je neúplná trieda, ktorá nemá úplné správanie.
Všeobecná syntax abstraktnej triedy je uvedená nižšie:
abstract class { public abstract void abstractMethod(); public void normalMethod() { //method body } }
Ako je znázornené v syntaxe vyššie uvedenej abstraktnej triedy, v abstraktnej triede môžeme mať abstraktné aj neabstraktné metódy. Kľúčovému slovu „abstrakt“ predchádza vyhlásenie triedy.
Stručne povedané, abstraktnú triedu je možné opísať, ako je uvedené nižšie.
aplikácie na sťahovanie videí z youtube
Abstraktná metóda v Jave
Abstraktná metóda je metóda, ktorej predchádza kľúčové slovo „abstrakt“ bez akejkoľvek implementácie. Abstraktná metóda je deklarovaná vo vnútri abstraktnej triedy.
Abstraktná metóda je tá, ktorá robí triedu neúplnou, pretože nemá implementáciu. Ak teda do triedy začleníme abstraktnú metódu, trieda sa prirodzene stane neúplnou.
Abstraktnú metódu môžeme použiť tak, že ju implementujeme do podtriedy, t.j. trieda dedí abstraktnú triedu a potom implementuje alebo poskytuje kód pre všetky abstraktné metódy deklarované v abstraktnej triede ich prepísaním.
Preto je povinné potlačiť abstraktnú metódu v podtriede. Pokiaľ nie je abstraktná metóda implementovaná aj v podtriede, musíme podtriedu deklarovať aj ako „abstraktnú“.
Všeobecná deklarácia abstraktnej metódy je:
abstraktné neplatný methodName (zoznam_parametrov);
Pri písaní abstraktnej metódy si musíme uvedomiť nasledujúce pravidlá:
- Trieda obsahujúca jednu alebo viac abstraktných metód je abstraktnou triedou.
- Niektoré ďalšie kľúčové slová by sa nemali používať s abstraktným kľúčovým slovom.
Nasledujúce kombinácie sú teda v Jave nelegálne.
- Konečný
- abstraktný rodák
- abstraktné statické
- abstraktné súkromné
- abstraktné synchronizované
- abstraktné strictfp
Uveďme si príklad abstraktnej triedy a abstraktnej metódy.
//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()+'%'); } }
Výkon:
Vo vyššie uvedenom príklade máme bankovú triedu. V tejto triede máme abstraktnú metódu getInterestRate (). Potom deklarujeme dve triedy - ICICI a BOI, ktoré dedia z triedy Bank. Obe tieto triedy implementujú metódu getInterestRate () vrátením svojich príslušných úrokových sadzieb.
Potom v hlavnej metóde vytvoríme bankový objekt. Po prvé, bankový objekt obsahuje objekt triedy ICICI a zobrazuje úrokovú sadzbu. Ďalej sa vytvorí objekt BOI, ktorý zobrazuje úrokovú sadzbu.
Môžeme teda predpokladať, že trieda Bank je akýmsi náčrtom alebo štruktúrou, ktorá nám umožňuje získať úrokovú sadzbu. Z tejto štruktúry môžeme vytvoriť toľko konkrétnych tried, koľko chceme, a potom môžeme získať príslušné úrokové sadzby pre každý bankový objekt (zobrazuje sa to v hlavnej metóde).
Aké je použitie abstraktnej triedy v Jave
Prečo používame abstraktnú triedu, keď v skutočnosti nemá vlastnú implementáciu?
Spolu s odpoveďou na vyššie uvedenú otázku si v nasledujúcom príklade ukážeme aj to, ako použiť abstraktnú triedu.
Zoberme si príklad vozidiel. Vieme, že vozidlá môžu byť mnohých typov. Môžeme mať osobné automobily, skútre, bicykle, mopedy, autobusy atď. Aj keď existuje veľa druhov vozidiel, majú niektoré vlastnosti alebo vlastnosti, ktoré sú spoločné pre všetky vozidlá bez ohľadu na ich typ.
Napríklad, každé vozidlo má model, číslo podvozku, farbu atď. Každé z nich má funkcie ako štart, zastavenie, zrýchlenie, brzdenie atď. Každé vozidlo bude mať vyššie uvedené vlastnosti a metódy, ktoré sú spoločné aj pre ostatné vozidlá. Zároveň by nás ako používateľa vozidla nemuseli zaujímať niektoré aspekty.
Napríklad, ak osoba riadi auto, bude ju zaujímať iba štartovanie a zastavenie vozidla alebo zrýchlenie alebo brzdenie vozidla. Nebude ho zaujímať, ako sa vozidlo štartuje alebo zastaví. Zaujíma nás iba abstraktné fungovanie funkcií, nie ich podrobnosti.
Ak teraz chceme znázorniť vyššie uvedený príklad systému na softvérovú aplikáciu, ako ho navrhneme? Najskôr implementujeme nejakú abstrakciu. Teraz vieme, že niektoré funkcie sú bežné, ale implementácia týchto funkcií sa bude líšiť v závislosti od každého modelu.
Na začiatok deklarujeme abstraktnú triedu „Vozidlo“.
Tento systém sme si ukázali nižšie:
Budeme teda mať abstraktnú triedu Vozidlo a bude existovať konkrétna trieda predstavujúca každý model vozidla. Pre ilustráciu sme použili iba tri modely, a to auto, bicykel a skúter.
Ďalej je uvedená hierarchia tried z vyššie uvedeného systému.
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…} }
Budeme teda mať abstraktnú triedu vozidiel a tri triedy auto, bicykel a skúter. Každá z týchto tried rozšíri triedu vozidiel a potlačí každú z abstraktných metód.
Všeobecne teda platí, že kedykoľvek musíme predstavovať taký systém, ktorý má spoločné metódy alebo operácie, aby sme užívateľovi predstavili iba vonkajšiu perspektívu, ideme po abstrakcii. Vo výsledku odstránime bežné metódy a predstavíme ich ako abstraktné metódy a tieto abstraktné metódy zhromaždíme v spoločnej abstraktnej triede.
Keď máme obrys systému reprezentovaného ako abstraktná trieda a operácie ako abstraktné metódy, môžeme z danej abstraktnej triedy odvodiť ľubovoľný počet tried a prepísať abstraktné metódy na implementáciu týchto operácií pre každú triedu.
Takto sa stane užitočné navrhnúť systém.
Abstraktná trieda a rozhranie
Vyššiu abstraktnú triedu sme videli. Rozhrania sú ešte ďalšími stavebnými prvkami, ktoré implementujú abstrakciu. Rozhrania sú zmluvy a triedy implementujúce rozhranie musia tieto zmluvy rešpektovať.
Zmluvy v rozhraniach nie sú ničím iným ako metódami, ktoré sa neimplementujú. Vo vnútri rozhraní budeme mať iba prototypy metód. Vo vnútri rozhraní nebude existovať jediná implementácia metód.
Ak máme vyhlásenie rozhrania nasledovne:
public interface interfaceA{ void myInterfaceMethod (); }
Každá trieda, ktorá implementuje interfaceA, musí potom prekonať metódu „myInterfaceMethod“.
Ak metódu v triede vôbec neprepíšeme, potom je táto trieda predstavená ako abstraktná.
abstract class TestClass implements interfaceA{ // not a compulsion to override myInterfaceMethod. }
Neskôr budeme mať samostatný výukový program o rozhraní.
Ďalej poďme diskutovať o niektorých rozdieloch medzi abstraktnými triedami a rozhraniami v Jave.
Rozdiel medzi abstraktnou triedou a rozhraním
Abstraktná trieda | Rozhranie |
---|---|
Abstraktná trieda môže mať členov súkromných alebo chránených údajov okrem členov verejnej správy. | Členovia rozhrania sú predvolene verejní. |
Abstraktná trieda môže mať abstraktné a / alebo neabstraktné metódy. | Rozhranie môže mať iba abstraktné metódy. |
Abstrakt môže, ale nemusí obsahovať konečné premenné. | Rozhrania môžu finalizovať premenné ako predvolené premenné. |
Abstraktná trieda môže mať konečné, statické alebo nestatické alebo nekoncové premenné. | Rozhrania môžu mať iba konečné a statické premenné. |
Implementáciu rozhrania môže poskytnúť abstraktná trieda. | Rozhrania nemôžu implementovať abstraktnú triedu. |
Abstraktná trieda sa dedí pomocou kľúčového slova „extends“. | Rozhranie sa implementuje pomocou kľúčového slova „implements“. |
Abstraktná trieda môže rozširovať ďalšie triedy alebo implementovať viac rozhraní. | Rozhranie môže implementovať iba iné rozhranie. |
Kedy použiť abstraktnú triedu a rozhranie v Jave
Rozhodnutie o tom, kedy použiť abstraktnú triedu a kedy použiť rozhranie v aplikácii Java, by sa malo prijať inteligentne po dôkladnom pochopení daného problému. Existujú dva aspekty, ktoré musíme zvážiť, ako je uvedené nižšie.
Abstraktné triedy s čiastočným správaním
Vieme, že abstraktné triedy nemusia byť úplne implementované menej. Môžu sa chovať čiastočne. Na druhej strane rozhrania nemajú žiadnu implementáciu. Takže keď si musíme vybrať medzi abstraktnou triedou a implementáciou, potom musíme zvážiť tento aspekt našej aplikácie.
To znamená, že sa musíme najskôr rozhodnúť, či aplikácia, ktorú navrhujeme, má nejakú spoločnú čiastočnú implementáciu, ktorú môžeme oddeliť v abstraktnej triede.
Napríklad, zvážime, že navrhujeme webovú aplikáciu. K tomu budeme musieť použiť niektoré webové technológie, napríklad Servlet, REST API atď. Každá z týchto webových technológií má teraz niektoré techniky alebo kroky, ktoré je potrebné implementovať bez ohľadu na aplikáciu, ktorú vyvíjame. Potom zostavíme našu prispôsobenú aplikáciu.
V tomto prípade teda môžeme definitívny kód, ktorý musí webová technológia vykonať, vložiť do abstraktnej triedy. Môžeme na to mať rozhranie? Nie. Je to tak preto, lebo rozhranie nemôže mať implementáciu.
Rozhrania iba na základe zmluvy
Vieme, že rozhrania majú zmluvy alebo metódy, ktoré sú ich súčasťou. Tieto metódy sú iba prototypy. Tieto rozhrania musíme implementovať do triedy a potom prepísať metódy.
oddychové otázky a odpovede pre skúsených
Teraz zvážte mapové rozhranie Java Collection Framework. Mnoho tried ako HashMap, TreeMap a HashTable atď. Implementuje toto rozhranie. Každá z týchto tried má inú implementáciu. Nemajú bežné správanie, ktoré by bolo možné znázorniť v abstraktnej triede.
Takže čo robíme, je to, že navrhneme rozhranie s prototypmi metód a potom implementujeme každú z tried.
Takto by sme mali správne zvážiť každý faktor skôr, ako sa rozhodneme medzi abstraktnou triedou a rozhraním.
Rozdiel medzi abstrakciou a zapuzdrením
Poďme sa rozprávať o niektorých rozdieloch medzi abstrakciou a jednou ďalšou dôležitou vlastnosťou OOP, tj. Zapuzdrením.
Abstrakcia | Zapuzdrenie |
---|---|
Proces získavania a abstrahovania informácií | Proces viazania informácií. |
Technika abstrakcie je na úrovni návrhu alebo rozhrania. | Mechanizmus zapuzdrenia je na implementačnej úrovni. |
Abstrakcia skrýva detaily. | Zapuzdrenie viaže informácie v jednu jednotku, čím sa zaisťuje informačná bezpečnosť. |
Abstrakcia sa implementuje pomocou abstraktných tried a rozhraní. | Pri zapuzdrovaní hrajú úlohu modifikátory prístupu, konkrétne verejný, súkromný a chránený a predvolený. |
V abstrakcii sa používateľovi zobrazí jediný abstraktný pohľad, zatiaľ čo zložité a podrobné údaje sa pred používateľom skryjú. | V zapuzdrení sú údaje zhromaždené ako jednotka a je možné ich chrániť alebo sprístupniť pomocou modifikátorov prístupu a metód getra a setra. |
často kladené otázky
Otázka č. 1) Skrývajú sa abstrakcia a dáta rovnaké?
Odpoveď: Nie, skrytie abstrakcie a údajov nie je to isté. Ale obidve sú dôležité vlastnosti objektovo orientovaného programovania. Zatiaľ čo abstrakcia je proces skrývania detailov pozadia, skrývanie údajov je technika izolácie údajov od priameho prístupu.
Otázka 2) Aké sú výhody abstrakcie?
Odpoveď: Niekoľko výhod Abstrakcie je uvedených nižšie:
- Skrytím detailov pozadia a vystavením používateľa iba abstraktnému pohľadu umožňuje abstrakcia kód jednoduchší a čitateľnejší.
- Pretože abstrakcia chráni nepotrebné detaily, kód sa zmenšuje.
- Údržba kódu môže byť bez abstrakcie zložitá a zložitá.
Otázka č. 3) Prečo je abstrakcia taká dôležitá?
Odpoveď: Abstrakcia nám umožňuje skryť detaily pozadia, ktoré sú dôležité a pri úniku do sveta môžu viesť k chaosu. Skrytím detailov pozadia a vystavením používateľa iba požadovaného rozhrania abstrakcia zjednodušuje aplikácie.
Otázka č. 4) Vysvetlite abstrakciu pomocou príkladu v reálnom čase.
Odpoveď: Existuje veľa príkladov abstrakcie v reálnom čase vrátane geometrických tvarov, vozidiel atď. Ďalším príkladom je bankomat (ATM). Bankomat podporuje operácie ako výber hotovosti, kontrola zostatku, prevod peňazí atď. Nie sme si však vedomí toho, ako tieto operácie interne fungujú.
Dostaneme iba monitor s užívateľským rozhraním na výber a vykonávanie požadovaných operácií.
Otázka č. 5) Môžeme dosiahnuť abstrakciu bez zapuzdrenia?
Odpoveď: Abstrakcia chráni detaily implementácie a zapuzdrenie skrýva detaily objektu. Objekt je abstraktnou formou reálneho sveta a jeho podrobnosti sú skryté pomocou zapuzdrenia. Pre abstrakciu je teda potrebné zapuzdrenie.
Záver
V tomto tutoriáli sme sa podrobne zaoberali abstrakciou v Jave. Abstrakcia je technika skrývania nepotrebných detailov pred používateľom. Používateľ má prístup iba k príslušným podrobnostiam. Prevádzka vozidla alebo prevádzka bankomatu sú klasickými príkladmi abstrakcií v skutočnom svete.
Keď používame bankomat, zaujíma nás iba vykonávanie operácií, ako je výber hotovosti atď., Bez toho, aby sme museli poznať podrobnosti o tom, ako presne sa táto operácia vykonáva interne.
Java poskytuje abstrakciu prostredníctvom abstraktných tried a rozhraní. Zatiaľ čo rozhrania poskytujú 100% abstrakciu, abstraktné triedy poskytujú čiastočnú abstrakciu. Výber medzi rozhraniami a abstraktnými triedami by sa mal robiť v závislosti od vyvíjanej aplikácie a tiež od toho, aké informácie majú byť používateľovi sprístupnené.
V tomto tutoriále sme tiež diskutovali o abstraktných metódach spolu s rozdielmi medzi abstraktnými triedami a rozhraniami.
=> Skontrolujte VŠETKY návody Java tu.
Odporúčané čítanie
- Príručka k rozhraniu Java a abstraktnej triede
- Celé číslo Java a trieda Java BigInteger s príkladmi
- Výukový program triedy skenerov Java s príkladmi
- Čo je Java Vector | Výukový program Java Vector Class s príkladmi
- Java Enum: Výukový program Java Enumeration s príkladmi
- Základy jazyka Java: Java Syntax, trieda Java a základné koncepty Java
- Výukový program JAVA pre začiatočníkov: viac ako 100 praktických výučbových programov Java Video
- Java Iterator: Naučte sa používať Iterátory v Jave pomocou príkladov