Anonymní profil Anonymní uživatel – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Anonymní uživatel – Programujte.comAnonymní profil Anonymní uživatel – Programujte.com

 

Příspěvky odeslané z IP adresy 89.24.236.–

Anonymní uživatel
Java › Rozhraní (interface) - K čem…
8. 5. 2008   #73277

Nevím, jestli to vysvětlím srozumitelně, ale pokusím se aspoň kapku :)

Hlavní výhoda (a pravděpodobně hlavní smysl) rozhraní je to, že umožňuje jednotný přístup k různým objektům. To se hodí, mají-li například (a je to opravdu jen jeden příklad z mnoha) nějakou stejnou vlastnost, která se ale pro každý objekt zjistí jinak.

Příklad. Kruh, trojúhelník a čtverec jsou jednotlivé objekty. U všech lze spočítat obsah (=stejná vlastnost) Ale tyhle obsahy se počítají každý jinak. Ano, teď si klidně můžeš napsat metody spoctiObsah pro každý objekt zvlášť a pak napsat metodu, která bude všechny tyhle třídy (objekty kruh, čtverec....a jakekoliv další geometrické tvary) využívat kdoví k čemu tak, že bude vytvářet jejich instance a používat metodu spoctiObsah každého objektu zvlášť, normálně přes tečkovou notaci (...Kruh kruh = new Kruh(); ...kruh.spoctiObsah(); ....atd.) tahle metoda by se mohla jmenovat třeba tiskniObsahy() a bude v hlavní třídě, tam, kde je main(). Když to uděláš takhle (hloupě), tak už vždycky budeš muset v téhle metodě rozlišovat, jestli zrovna pracuješ s kruhem nebo čtvercem nebo ...atp. a psát kod pro všechno zvlášť. A pozor, teď to přijde. Když použiješ rozhraní, ano, ty metody spoctiObsah() musíš stejně napsat pro všechny objekty zvlášť, ale v té metodě tiskniObsahy() máš zajištěný jednotný přístup... tzn. ať se jedná o jakejkoliv geom. tvar, tadle metoda spočte jeho obsah v jediném příkazu. Např. takovémto: tvar[i].spoctiObsah() ...kde tvar[i] - tvar je instancí našeho rozhraní, na indexu i v poli tvar je uložena nová instance libovolného objektu (např new Kruh()).

Nebo takto můžeš v nějaké jiné metodě spočíst obsah útvaru, který se skládá z různých geometrických tvarů...a další výhoda - jakmile budeš chtít nějaký tvar doplnit - tedy aby naše metoda tiskniObsahy uměla spočíst a vytisknout i obsah třeba obdelníka...tak jedna z mála věcí, co musíš udělat, je naimplementovat třídu Obdelnik s metodou - ano - spoctiObsah(). Ale v metodě tiskniObsahy se nic nemění, nic nepřidává, žádná nová instance třídy Obdelník a přesto metoda funguje. Uf...snad sem ti ještě víc nezamotala hlavu, mě už se motá, tak toho radši nechám.


 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý