Abstrakce v Java

V ฤem je abstrakce Java?

Abstrakce je koncept objektovฤ› orientovanรฉho programovรกnรญ, kterรฉ โ€žukazujeโ€œ pouze podstatnรฉ atributy a โ€žskrรฝvรกโ€œ nepotล™ebnรฉ informace. Hlavnรญm รบฤelem abstrakce je skrytรญ nepotล™ebnรฝch detailลฏ pล™ed uลพivateli. Abstrakce je vรฝbฤ›r dat z vฤ›tลกรญho fondu, aby se uลพivateli zobrazily pouze relevantnรญ detaily objektu. Pomรกhรก sniลพovat sloลพitost programovรกnรญ a รบsilรญ. Je to jeden z nejdลฏleลพitฤ›jลกรญch konceptลฏ OOP.

kliknฤ›te zde pokud video nenรญ pล™รญstupnรฉ

Pojฤme studovat abstrakci v OOP s pล™รญkladem:

Pล™edpoklรกdejme, ลพe chcete vytvoล™it bankovnรญ aplikaci a budete poลพรกdรกni o shromรกลพdฤ›nรญ vลกech informacรญ o vaลกem zรกkaznรญkovi. Existuje ลกance, ลพe pล™ijdete s nรกsledujรญcรญmi informacemi o zรกkaznรญkovi

Abstrakce v Java
Abstrakce v Java

K vytvoล™enรญ bankovnรญ aplikace vลกak nejsou nutnรฉ vลกechny vรฝลกe uvedenรฉ informace. Musรญte tedy vybrat pouze uลพiteฤnรฉ informace pro vรกs bankovnรญ aplikace z toho bazรฉnu. Data jako jmรฉno, adresa, daลˆovรฉ informace atd. majรญ smysl pro bankovnรญ aplikaci, kterรก je pล™รญkladem abstrakce v OOP

Abstrakce v Java

Vzhledem k tomu, ลพe jsme zรญskali/odstranili/vybrali informace o zรกkaznรญcรญch z vฤ›tลกรญho fondu, je tento proces oznaฤovรกn jako abstrakce v OOP. Avลกak tytรฉลพ informace, jakmile jsou extrahovรกny, mohou bรฝt pouลพity pro ลกirokou ลกkรกlu aplikacรญ. Mลฏลพete napล™รญklad pouลพรญt stejnรก data pro nemocniฤnรญ aplikaci, aplikaci pracovnรญho portรกlu, vlรกdnรญ databรกzi atd. s malรฝmi nebo ลพรกdnรฝmi รบpravami. Stane se tedy vaลกimi kmenovรฝmi daty. To je vรฝhoda abstrakce v OOP.

Rozdรญl mezi abstrakcรญ a zapouzdล™enรญm

Abstrakce Zapouzdล™enรญ
Abstrakce v objektovฤ› orientovanรฉm programovรกnรญ ล™eลกรญ problรฉmy na รบrovni nรกvrhu. Zapouzdล™enรญ to ล™eลกรญ na รบrovni implementace.
Abstrakce v programovรกnรญ je o skrytรญ nechtฤ›nรฝch detailลฏ a zรกroveลˆ zobrazenรญ nejdลฏleลพitฤ›jลกรญch informacรญ. Zapouzdล™enรญ znamenรก spojenรญ kรณdu a dat do jedinรฉ jednotky.
Abstrakce dat v Java umoลพลˆuje zamฤ›ล™it se na to, co musรญ informaฤnรญ objekt obsahovat Zapouzdล™enรญ znamenรก skrytรญ vnitล™nรญch detailลฏ nebo mechaniky toho, jak objekt nฤ›co dฤ›lรก, z bezpeฤnostnรญch dลฏvodลฏ.

Rozdรญl mezi abstraktnรญ tล™รญdou a rozhranรญm

Abstraktnรญ tล™รญda Rozhranรญ
Abstraktnรญ tล™รญda mลฏลพe mรญt jak abstraktnรญ, tak neabstraktnรญ metody. Rozhranรญ mลฏลพe mรญt pouze abstraktnรญ metody.
Nepodporuje vรญcenรกsobnou dฤ›diฤnost. Podporuje vรญcenรกsobnou dฤ›diฤnost.
Mลฏลพe zajistit implementaci rozhranรญ. Nemลฏลพe poskytnout implementaci abstraktnรญ tล™รญdy.
Abstraktnรญ tล™รญda mลฏลพe mรญt chrรกnฤ›nรฉ a abstraktnรญ veล™ejnรฉ metody. Rozhranรญ mลฏลพe mรญt pouze veล™ejnรฉ abstraktnรญ metody.
Abstraktnรญ tล™รญda mลฏลพe mรญt koneฤnou, statickou nebo statickou koneฤnou promฤ›nnou s libovolnรฝm specifikรกtorem pล™รญstupu. Rozhranรญ mลฏลพe mรญt pouze veล™ejnou statickou koneฤnou promฤ›nnou.

Co je abstraktnรญ tล™รญda?

ABSTRAKTNร Tล˜รDA je typem tล™รญdy v Java, kterรฉ deklarujรญ jednu nebo vรญce abstraktnรญch metod. Tyto tล™รญdy mohou mรญt abstraktnรญ metody i konkrรฉtnรญ metody. Normรกlnรญ tล™รญda nemลฏลพe mรญt abstraktnรญ metody. Abstraktnรญ tล™รญda je tล™รญda, kterรก obsahuje alespoลˆ jednu abstraktnรญ metodu. Pojem mลฏลพeme pochopit podle pล™รญklad tvaru v Javฤ›.

Zvaลพte nรกsledujรญcรญ hierarchii tล™รญd sestรกvajรญcรญ z tล™รญdy Shape, kterรก je zdฤ›dฤ›na tล™emi tล™รญdami Rectangle, Circle a Triangle. Tล™รญda Shape je vytvoล™ena, aby ลกetล™ila spoleฤnรฉ atributy a metody sdรญlenรฉ tล™emi tล™รญdami Rectangle, Circle a Triangle. Jednou z takovรฝch metod sdรญlenรฝch vลกemi tล™emi podล™รญzenรฝmi tล™รญdami a pล™รญtomnรฝmi ve tล™รญdฤ› Shape je metoda countArea().

Abstraktnรญ tล™รญda v Java

Pล™รญklad tvarovรฉ abstrakce

Nynรญ pล™edpoklรกdejme, ลพe pรญลกete kรณd pro vytvoล™enรญ objektลฏ pro tล™รญdy zobrazenรฉ vรฝลกe. Podรญvejme se, jak tyto pล™edmฤ›ty budou vypadat v praktickรฉm svฤ›tฤ›. Objekt tล™รญdy obdรฉlnรญk dรก obdรฉlnรญk, tvar, kterรฝ tak bฤ›ลพnฤ› pozorujeme v kaลพdodennรญm ลพivotฤ›.

Abstraktnรญ tล™รญda

Objekt tล™รญdnรญho trojรบhelnรญku dรก trojรบhelnรญk, opฤ›t bฤ›ลพnรฝ kaลพdodennรญ tvar.

Abstraktnรญ tล™รญda

Ale jak by vypadal pล™edmฤ›t Class Shape v praktickรฉm svฤ›tฤ›?

Abstraktnรญ tล™รญda

Pokud pozorujete, ลพe tล™รญda Shape slouลพรญ v nรกลก cรญl dosรกhnout dฤ›dictvรญ a polymorfismus. Nebylo to ale stavฤ›no pro vytvรกล™enรญ instancรญ. Takovรฉ tล™รญdy mohou bรฝt oznaฤeny Abstraktnรญ. Abstraktnรญ tล™รญdu Java nelze vytvoล™it.

Syntaxe:

abstract class Shape{
	// code
}

Je moลพnรฉ, ลพe tล™รญdu Shape NEOZNAฤŒUJETE jako abstraktnรญ a potรฉ ji vytvoล™รญte. Ale takovรฝ objekt nebude mรญt ve vaลกem kรณdu ลพรกdnรฉ vyuลพitรญ a otevล™e prostor pro potenciรกlnรญ chyby. Proto to nenรญ ลพรกdoucรญ.

V ฤem jsou abstraktnรญ metody Java?

ABSTRAKTNร METODA in Java, je metoda, kterรก mรก pouze definici metody, ale neobsahuje implementaci. Metoda bez tฤ›la je znรกmรก jako abstraktnรญ metoda. Musรญ bรฝt deklarovรกn v abstraktnรญ tล™รญdฤ›. Abstraktnรญ metoda nebude nikdy koneฤnรก, protoลพe abstraktnรญ tล™รญda musรญ implementovat vลกechny abstraktnรญ metody.

Jak vลกichni vรญme, vzorec pro vรฝpoฤet plochy pro obdรฉlnรญk, kruh a trojรบhelnรญk je jinรฝ. Metoda countArea() bude muset bรฝt pล™epsรกna dฤ›dรญcรญmi tล™รญdami. Nemรก smysl ji definovat ve tล™รญdฤ› Shape, ale musรญme se ujistit, ลพe vลกechny dฤ›dรญcรญ tล™รญdy majรญ metodu.

Takovรฉ metody mohou bรฝt oznaฤeny abstraktnรญ.

Syntaxe:

abstract public void calculateArea();

Pro abstraktnรญ metoda, nenรญ nutnรก ลพรกdnรก implementace. Definuje se pouze podpis metody.

Pล™รญklad kรณdu abstrakce

abstract class Shape{  
  abstract void calculateArea();  
}  
 class guru99 extends Shape{  
void calculateArea(){System.out.println("Area of Shape");}  
public static void main(String args[]){  
 Shape obj = new guru99();  
 obj.calculateArea();
}  
}

Vรฝhody abstrakce

  • Hlavnรญ vรฝhodou pouลพitรญ abstrakce v Programovรกnรญ spoฤรญvรก v tom, ลพe vรกm umoลพลˆuje seskupit nฤ›kolik pล™รญbuznรฝch tล™รญd jako sourozence.
  • Abstrakce v objektovฤ› orientovanรฉm programovรกnรญ pomรกhรก snรญลพit sloลพitost procesu nรกvrhu a implementace softwaru.

Koneฤnรฉ klรญฤovรฉ slovo v Java

Poslednรญ modifikรกtor se vztahuje na tล™รญdy, metody a promฤ›nnรฉ. Vรฝznam koncovรฉho se liลกรญ od kontextu k kontextu, ale zรกkladnรญ myลกlenka je stejnรก.

  • Poslednรญ tล™รญdu nelze zdฤ›dit
  • Koneฤnรก promฤ›nnรก se stรกvรก konstantou a jejรญ hodnotu nelze zmฤ›nit.
  • Koneฤnou metodu nelze pล™epsat. To se provรกdรญ z bezpeฤnostnรญch dลฏvodลฏ a tyto metody se pouลพรญvajรญ pro optimalizaci.

Pล™รญklad - Nauฤte se abstraktnรญ a koneฤnรก klรญฤovรก slova

Krok 1) Zkopรญrujte nรกsledujรญcรญ kรณd do editoru.

abstract class Shape{
   final int b = 20;
   public void display(){
     System.out.println("This is display method");
   }
   abstract public void calculateArea();
}

public class Rectangle extends Shape{
   public static void main(String args[]){
      Rectangle obj = new Rectangle();
      obj.display();
     //obj.b=200;
  }
  //public void calculateArea(){}
}

Krok 2) Uloลพte, zkompilujte a spusลฅte kรณd.

Krok 3) Chyba =? Abstraktnรญ metoda nenรญ implementovรกna ve tล™รญdฤ› Rectangle. Chcete-li problรฉm vyล™eลกit, zruลกte komentรกล™ na ล™รกdku #15.

Krok 4) Odkomentujte ล™รกdek ฤ. 13. Uloลพte a zkompilujte kรณd.

Krok 5) Chyba = ? promฤ›nnรก b je koneฤnรก

Kdy pouลพรญt abstraktnรญ metody a abstraktnรญ tล™รญdu?

Abstraktnรญ metody jsou vฤ›tลกinou deklarovรกny tam, kde dvฤ› nebo vรญce podtล™รญd takรฉ dฤ›lajรญ totรฉลพ rลฏznรฝmi zpลฏsoby prostล™ednictvรญm rลฏznรฝch implementacรญ. Takรฉ rozลกiล™uje stejnou tล™รญdu Abstract a nabรญzรญ rลฏznรฉ implementace abstraktnรญch metod.

Abstraktnรญ tล™รญdy pomรกhajรญ popsat obecnรฉ typy chovรกnรญ a hierarchii tล™รญd objektovฤ› orientovanรฉho programovรกnรญ. Popisuje takรฉ podtล™รญdy, kterรฉ nabรญzejรญ podrobnosti o implementaci abstraktnรญ tล™รญdy.

Shrnutรญ:

  • Abstrakce v programovรกnรญ je proces vรฝbฤ›ru dลฏleลพitรฝch datovรฝch souborลฏ pro Objekt ve vaลกem softwaru a vynechejte ty nepodstatnรฉ.
  • Jakmile namodelujete svลฏj objekt pomocรญ Data Abstraction in Java, stejnรก sada dat mลฏลพe bรฝt pouลพita v rลฏznรฝch aplikacรญch.

Shrลˆte tento pล™รญspฤ›vek takto: