Java tutoriál - Objektově orientované programování (3. díl)
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Java tutoriál - Objektově orientované programování (3. díl)Java tutoriál - Objektově orientované programování (3. díl)

 

Java tutoriál - Objektově orientované programování (3. díl)

Google       Google       2. 5. 2007       86 879×

Ve třetím díle překladu oficiálního Java tutoriálu se zaměříme na teorii objektově orientovaného programování.

Reklama
Reklama

Jestliže jste dosud nikdy nepoužívali objektově orientovaný jazyk, budete se muset prvně naučit základní koncepty, než začnete psát první kód. Tato lekce vás uvede do objektů, tříd, dědičnosti, rozhraní a balíčků. Každá část dílu ukazuje na to, jak jsou jednotlivé pojmy propojeny s reálným světem a zároveň vás uvede do základů programovacího jazyka Java.

Co je to Objekt?

Objekty jsou klíčem k pochopení technologie objektově orientovaného programování. Podíváte-li se nyní kolem sebe, jistě uvidíte spoustu příkladů objektů z reálného světa: váš pes, váš stůl, vaše televize, vaše kolo.

Reálné objekty sdílí dvě charakteristiky: všechny mají stavy a akce. Psi mají stavy (jméno, barva, rasa, hlad) a akce (štěkání, vrčení, vrtění ocasem). Jízdní kola mají taktéž stavy (momentální otáčky pedálu, zařazený stupeň, momentální rychlost) a akce (změna vybavení, přehození stupně, použití brzd). Identifikace stavů a akcí reálných objektů je dobrá cesta, jak začít myslet v rámci objektově orientovaného programování.

Nyní se chvíli dívejte kolem sebe a hledejte reálné objekty. Pro každý objekt, který uvidíte, si položte tyto dvě otázky: „Jaké možné stavy tento objekt může mít?“ a „Jaké možné akce může tento objekt vykonat?“.Vypište si výsledky vašeho pozorování. Poté, co to uděláte, si všimněte, že reálné objekty se velice liší ve své komplexnosti; vaše stolní lampa má pouze dva možné stavy (vypnuto a zapnuto) a dvě možné akce (zapnout a vypnout), ale vaše stolní rádio může mít mnohem více stavů (vypnuto, zapnuto, momentální hlasitost, naladěná stanice) a akcí (vypnout, zapnout, zesílit zvuk, zeslabit zvuk, najít stanici, změnit frekvenci). Možná najdete objekty, které obsahují jiné objekty. Tyto věci lze do softwaru přeložit pomocí objektově orientovaného programování.

Softwarové objekty sdílí stejný koncept jako objekty z reálného světa: taktéž obsahují stavy a příbuzné akce. Objekt ukládá své stavy ve vlastnostech (v některých programovacích jazycích členské proměnné) a příslušné akce nabízí přes metody (v některých programovacích jazycích členské funkce). Metody operují nad interními stavy objektu a jsou předurčeny k prvotnímu způsob komunikace mezi dvěma objekty. Skrývání interních stavů a jejich nabízení prostřednictvím metod se nazývá zapouzdření dat – jeden ze základních kamenů objektově orientovaného programování.

Ukažme si to na příkladu jízdního kola:

Uchováváním stavů (momentální rychlost, zařazený stupeň a otáčky) a poskytováním metod pro jejich změnu zůstává objektům možnost kontrolovat, jak okolní svět zachází s hodnotami stavů. Například, pokud má objekt přehazovačku, která má pouze 6 stupňů, měla by metoda pro změnu zařazeného stupně odmítnout jakoukoli hodnotu, která je menší než 1 a větší než 6.

Zapouzdřením kódu do jednotlivých softwarových objektů získáme spoustu výhod, mezi které patří:

  • Modularita: Zdrojový kód objektu může být napsán a spravován nezávisle na zdrojovém kódu jiných objektů. Jakmile je jednou objekt vytvořen, může být jednoduše předáván přes celý systém.
  • Skrývání informací: Kvůli interakci s vlastnostmi objektu pouze přes jeho metody umožňuje objektu skrýt implementační detaily před okolním světem.
  • Opětovné používání kódu: Jestliže již jednou objekt existuje (byl možná napsán jiným softwarovým vývojářem), můžete tento objekt snadno používat ve svém programu. Toto umožňuje specialistům vyvinout/otestovat/vyladit specifické objekty, které můžete s důvěrou ve svém programu využít.
  • Rozšiřitelnost a snadné ladění: Jestliže začne být nějaký objekt problémový, můžete jej snadno vyjmout ze svého programu a nahradit jej jiným. Toto je analogické s řešením mechanických problémů reálného světa. Jestliže se pokazí brzdy, vyměníte pouze je, ne celé auto.

Co je to Třída?

V reálném světě často najdete příklady objektů, které jsou stejného druhu. Mohou existovat tisíce jízdních kol, které jsou jako jeden model vyrobeny stejně. Každé z jízdních kol bylo vyrobeno podle stejného návrhu a mají stejné komponenty. V objektově orientované terminologii můžeme říct, že právě jedno jízdní kolo je instancí jedné třídy objektů, známé jako jízdní kola.

Třída je návrh, podle kterého jsou jednotlivé objekty vytvářeny.

Následující třída Bicycle je jedna z možných implementací třídy jízdního kola:

class Bicycle {

       int cadence = 0;
       int speed = 0;
       int gear = 1;

       void changeCadence(int newValue) {
            cadence = newValue;
       }

       void changeGear(int newValue) {
            gear = newValue;
       }

       void speedUp(int increment) {
            speed = speed + increment;   
       }

       void applyBrakes(int decrement) {
            speed = speed - decrement;
       }

       void printStates() {
            System.out.println("cadence:"+cadence+" speed:"+speed+" gear:"+gear);
       }
}

Syntaxe programovacího jazyka Java vám nyní může připadat nová, ale návrh této třídy je založen na předchozích návrzích jízdního kola. Vlastnosti cadence, speed a gear reprezentují možné stavy objektu a metody (changeCadence, changeGear, speedUp, aj.) definují, jak bude objekt komunikovat s okolním světem.

Můžete si všimnout, že třída Bicycle neobsahuje metodu main. To je z toho důvodu, protože se nejedná o úplnou aplikaci; jedná se pouze o návrh jízdního kola, který může být použit v aplikaci. Zodpovědnost za vytváření a používání nových objektů třídy Bicycle leží na nějaké jiné třídě vaší aplikace.

Zde je třída BicycleDemo, která vytváří dva oddělené objekty třídy Bicycle a volá jejich metody:

class BicycleDemo {
     public static void main(String[] args) {

          // Create two different Bicycle objects
          Bicycle bike1 = new Bicycle();
          Bicycle bike2 = new Bicycle();

          // Invoke methods on those objects
          bike1.changeCadence(50);
          bike1.speedUp(10);
          bike1.changeGear(2);
          bike1.printStates();

          bike2.changeCadence(50);
          bike2.speedUp(10);
          bike2.changeGear(2);
          bike2.changeCadence(40);
          bike2.speedUp(10);
          bike2.changeGear(3);
          bike2.printStates();
     }
}

Výstup tohoto programu vypíše koncový stupeň, rychlost a vybavení pro dvě jízdní kola:

cadence:50 speed:10 gear:2
cadence:40 speed:20 gear:3

Co je to dědičnost?

Různé druhy reálných objektů mají spoustu stejných vlastností s jinými druhy objektů. Horská, silniční, tandemová kola například sdílí charakteristiky jízdního kola (rychlost, přehoz). Každý z nich však přidává nové vlastnosti, které ho oddělují: tandemová kola mají dvoje sedátka a řídítka; silniční kola odstraňují sedátka; některá horská kola mají přídavný řetěz.

Objektově orientované programování umožňuje třídám dědit obecně používané stavy a akce od jiných tříd. V našem příkladě se třída Bicycle stane rodičem (superclass) tříd MountainBike, RoadBike a TandemBike. V programovacím jazyce Java je povoleno, aby každá třída měla pouze jednoho přímého rodiče, ale může mít neomezená množství potomků (subclasses):

Syntaxe vytvoření potomka jiné třídy je snadné. Na začátku definice vaší třídy uveďte klíčové slovo extends následované jménem třídy, od které chcete potomka odvodit:

class MountainBike extends Bicycle {

     // zde budou přidané vlastnosti a metody

}

Toto dává třídě MountainBike stejné vlastnosti a metody, jako má Bicycle, a zároveň to umožňuje přidat kód, který třídu učiní jedinečnou. Kód potomka se stává lépe čitelným. Nicméně, musíte se pečlivě starat o dokumentaci každé metody a vlastnosti v rodiči, neboť tyto vlastnosti nejsou součástí zdrojového kódu potomka.

Co je to rozhraní?

Jak jste se již naučili, metody definují, jak objekt komunikuje s okolním světem. Metody formují rozhraní s okolním světem; například tlačítka ve předu televize jsou rozhraní mezi vámi a elektrickými obvody na zadní straně plastového obalu. Pomocí tlačítka Power můžete televizi vypnout a zapnout.

V jeho nejběžnější formě je rozhraní (interface) skupina metod s prázdnými těly. Akce jízdního kola, pokud je specifikujeme jako rozhraní, mohou vypadat například takto:

interface Bicycle {

       void changeCadence(int newValue);

       void changeGear(int newValue);

       void speedUp(int increment);

       void applyBrakes(int decrement);
}

Pro implementaci tohto rozhraní musíte změnit název vaší třídy (například na ACMEBicycle) a použít klíčové slovo implements v deklaraci třídy:

class ACMEBicycle implements Bicycle {

   // zbytek třídy bude stejný jako výše

}

Implementací rozhraní bude třída více formálně definovat, jaké akce nabízí. Rozhraní definují vztah mezi třídou a okolním světem a tento vztah je vynucen kompilátorem již v době překladu. Jestliže vaše třída říká, že implementuje nějaké rozhraní, všechny metody, definované v rozhraní, se musí objevit ve zdrojovém kódu třídy předtím, než bude třída úspěšně zkompilována.

Poznámka:
Abyste nyní mohli zkompilovat třídu ACMEBycicle, budete muset přidat klíčové slovo public na začátek implementace všech metod, definovaných rozhraním. Důvody se naučíte v příštích dílech tutoriálu.

Co je to balíček?

Balíček (package) je názvový prostor pro skupinu příbuzných tříd a rozhraní. Koncepčně je systém balíčků shodný se systémem složek na vašem pevném disku. Můžete uchovávat HTML stránky v jedné složce, obrázky ve druhé a skripty nebo aplikace v jiné. Protože se software napsaný v Javě může skládat ze stovek nebo dokonce tisíců jednotlivých tříd, je možnost udržet v nich přehled pomocí organizování příbuzných tříd a rozhraní do balíčků.

Java platforma poskytuje enormní knihovnu tříd (skupinu balíčků), určenou pro použití ve vašich aplikacích. Tato knihovna je známa jako „Application Programming Interface“ (zkráceně jako API). Tyto balíčky reprezentují běžné úkony v programování. Pro příklad, objekt String reprezentují stavy a akce pro řetězce znaků; objekt File umožňuje vývojáři vytvářet, mazat, prohlížet nebo upravovat soubor na pevném disku; objekt Socket umožňuje vytvářet a používat síťové sokety; různé objekty GUI, jako jsou tlačítka nebo seznamy, umožňují snadno vytvářet grafické uživatelské rozhraní. Existují doslova tisíce tříd, ze kterých si můžete vybrat. To umožňuje vám, programátorovi, zaměřit se přímo na vytváření aplikací, než na vytváření infrastruktury, aby tyto aplikace vůbec fungovaly.

Dokument Java Platform API Specifikace obsahuje seznam všech balíčků, tříd, rozhraní, vlastností a metod nabízených produktem Java Platform 6, Standard Edition. Načtěte si stránku ve svém oblíbeném internetovém prohlížeči a uložte si ji do oblíbených. Pro vás, jako programátora, se bude jednat o jedno z nejdůležitějších míst, kde si budete moci zjistit referenční podrobnosti.

V příštím díle

V příštím díle se zaměříme na samotné programování a začneme proměnnými.

Zdroj: Official Java(TM) Tutorial

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor se věnuje programování všeho druhu, hlavně v Javě a .NET Frameworku.

Nové články

Obrázek ke článku Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Malware KONNI se úspěšně skrýval 3 roky. Odhalil ho bezpečnostní tým Cisco Talos

Bezpečnostní tým Cisco Talos odhalil celkem 4 kampaně dosud neobjeveného malwaru, který dostal jméno KONNI. Ten se dokázal úspěšně maskovat od roku 2014. Zpočátku se malware zaměřoval pouze na krádeže citlivých dat. Za 3 roky se ale několikrát vyvinul, přičemž jeho současná verze umožňuje útočníkovi z infikovaného počítače nejenom krást data, ale i mapovat stisky na klávesnici, pořizovat screenshoty obrazovky či v zařízení spustit libovolný kód. Pro odvedení pozornosti oběti zasílali útočníci v příloze také obrázek, zprávu a výhružkách severokorejského režimu či kontakty na členy mezinárodních organizací.

Reklama
Reklama
Obrázek ke článku Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Pouze jedna z deseti lokálních firem ví o pokutách plynoucích z GDPR

Trend Micro, celosvětový lídr v oblasti bezpečnostních řešení a VMware, přední světový dodavatel cloudové infrastruktury a řešení pro podnikovou mobilitu, oznámily výsledky výzkumu mezi českými a slovenskými manažery zodpovědnými za ochranu osobních údajů, který zjišťoval, jak jsou připraveni na nové nařízení o ochraně osobních údajů (GDPR). Většina firem v České republice a na Slovensku nad 100 zaměstnanců je již s novým nařízením GDPR obeznámena. Výzkum provedený ve spolupráci s agenturou Ipsos ukázal, že téměř 8 firem z 10 o nařízení ví, přičemž jeho znalost je o něco vyšší na Slovensku (89 %) než v České republice (69 %).

Obrázek ke článku Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Vyděračský software Locky se vrací, tváří se jako potvrzení platby, odhalil tým Cisco Talos

Jeden z nejznámějších ransomwarů, Locky, se vrací. Po většinu roku 2016 patřil mezi nejrozšířenější vyděračské softwary. Ke svému šíření využíval emailové kampaně s infikovanými přílohami. Ransomware Locky byl rozesílán prostřednictvím botnetu (internetový robot zasílající spamy) Necurs. Jeho aktivita na konci roku 2016 téměř upadla a spolu s ní i šíření ransomwaru Locky. Před několika týdny se Necurs opět probudil a začal posílat spamy nabízející výhodný nákup akcií. Dne 21. dubna zaznamenal bezpečnostní tým Cisco Talos první velkou kampaň ransomwaru Locky prostřednictvím botnetu Necurs za posledních několik měsíců.

Obrázek ke článku Dovozci baterií mění logistiku, letadlo nahrazuje námořní doprava

Dovozci baterií mění logistiku, letadlo nahrazuje námořní doprava

Dovozci baterií do mobilů či notebooků upouštějí od letecké přepravy zboží. V letošním roce plánují dovézt až 80 % produktů lodí. Přitom před 5 lety byla většina baterií do mobilních přístrojů dovezených do České republiky přepravována letadlem. Za proměnou způsobu transportu akumulátorů stojí zpřísnění pravidel pro leteckou přepravu, která přinášejí vyšší náklady i náročnou agendu.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032017 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý