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

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
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().
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ฤ.
Objekt tลรญdnรญho trojรบhelnรญku dรก trojรบhelnรญk, opฤt bฤลพnรฝ kaลพdodennรญ tvar.
Ale jak by vypadal pลedmฤt Class Shape v praktickรฉm svฤtฤ?
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.




