Výklad základních objektových pojmů

Objekt

V programovacích jazycích jakým je např. Java, je za objekt považováno úplně všechno. Tedy důležitá informace na začátek: Všechno je objekt.

V reálném světě může být objektem například tramvaj, kterou jezdíte do školy, hodinky které máte na ruce, dveře od místnosti, či budík, který Vás ráno probudil. V programovacím jazyku Java pracujeme také s objekty. Protože je však reálný svět a věci (objekty) v něm příliš složité, jsou obvykle reálné objekty do počítačové podoby převáděny ve zjednodušené podobě.

Tomuto "zjednodušování" se říká abstrakce – což znamená, že o daném objektu uvažujeme pouze v takové míře podrobnosti, v jaké potřebujeme – nezabýváme se žádnými detaily, které jsou pro nás v programu nepodstatné.

Příklady objektů

  1. Objekt osoba můžeme v různých programech vytvořit různě. Podle potřeby programu budeme od různých vlastností skutečného člověka abstrahovat:
    • pokud budeme dělat program na evidenci studentů, bude nás především zajímat například jméno, příjmení, adresa a obor, v kterém studují
    • pokud budeme dělat internetový obchod, bude nás zajímat jméno, příjmení a adresa stejně jako z předchozího příkladu, ale již nás nebude zajímat žádný obor, ale například IČO, DIČ a třeba číslo účtu.
    • když budeme ale programovat audiotéku, budou zpěváci v našem programu vystupovat také jako objekty osoba, ale v tomto příkladě nás zase bude zajímat například jméno, datum narození a například jeho nejslavnější píseň.
    • pokud budeme programovat aplikaci na chatování po internetu, bude objekt osoba obsahovat pouze informaci o nickname a heslo, více informací o virtuální osobě potřebovat nebudeme a můžeme tak od nich abstrahovat.
    • v programu pro lékaře budeme u osob evidovat především kromě základních údajů i informace o zdravotní pojišťovně, rodné číslo a informace o zdravotním stavu.
  2. Objekt Automobil
    • v aplikaci pro auto půjčovnu bude objekt automobil obsahovat například značku SPZ, spotřebu benzínu a datum technické kontroly.
    • v internetovém bazaru bude objekt automobil obsahovat informace o značce, stáří vozu, zda je prodávající první majitel, zda je automobil nabouraný atd.
    • v počítačové hře bude automobil představován obrázkem toho, jak automobil vypadá, a jakou má maximální rychlost. Určitě u něho nebudeme sledovat např. SPZ – od této informace můžeme ve hře abstrahovat.
  3. Objekt Dům
    • v aplikaci pro městský úřad bude objekt Dům reprezentovaný popisným číslem a počtem osob v něm žijících.
    • pokud ale budeme vytvářet aplikaci pro stavební firmu, bude objekt dům obsahovat informace například o skladbě zdiva, typu střechy, rozměrech a mnoho dalších informací, které u aplikace pro městský úřad určitě potřebovat nebudeme.
    • v aplikaci pro realitní kancelář bude objekt dům obsahovat především adresu, cenu a počet místností. Více informací obvykle v kanceláři potřebovat nebudou, a proto od nich můžeme abstrahovat – tedy je do našeho objektu nezahrnout.
  4. Objekt Pokrm
    • v aplikaci kuchařka bude takový objekt představován sadou ingrediencí a postupem nutným pro přípravu
    • v základní aplikaci pro restauraci ale bude pravděpodobně stačit informace o ceně
    • v aplikaci pro generování jídelníčku pro zdravou výživu budeme u pokrmu evidovat především jeho energetickou hodnotu, ale již nás nebude zajímat jeho složení a postup přípravy, neboť to lze najít v kuchařce.

Nahoru

Třídy

Každý objekt v reálném světě je nějakého typu/třídy – např. tramvaj č. 9, kterou jezdíte do školy je objektem typu Tramvaj. Tento typ (neboli také třída) Tramvaj nám udává společné znaky všech objektů stejného typu. Každá tramvaj tedy například jezdí na elektriku, jezdí po kolejích a má přiřazené číslo linky.

Stejně tak v programovacím jazyku jsou všechny objekty nějakého typu (třídy).

Nahoru

Instance

V objektově orientovaných programovacích jazycích se velmi často setkáte s pojmem instance. Instance vlastně vyjadřuje již vytvořený objekt. Slova instance a objekt se mohou velmi často mezi sebou zaměňovat. První větu předchozí podkapitoly bychom mohli tedy napsat takto: Každý objekt v reálném světě je instancí nějakého typu / třídy.

Nahoru

Metody

Většina objektů neexistuje jen tak pro nic za nic, ale obvykle plní nějaké úkony. Například výtah – výtah je v domě proto, abychom nemuseli běhat po schodech – výtah nás odveze nahoru, nebo dolu. Ve zjednodušeném případě tedy má výtah pouze dvě metody: jedNahoru a jedDolu. V jazyku Java bychom tyto metody zapsaly takto:

jedNahoru() jedDolu()

Metody u objektů tedy existují proto, abychom pomocí těchto metod mohli objekty ovládat, či jim zasílat nějaké informace.

Nahoru

Datové atributy

Většina objektů, které znáte má nějaké datové atributy. A co že to ty datové atributy jsou? Například "číslo linky" je datový atribut každé tramvaje. Tento datový atribut "číslo linky" slouží k uchování (a samozřejmě i k zobrazení) čísla spoje, kterou tramvaj jede. Slouží tedy k uchování informace či „dat“ o daném objektu.

Nahoru

Konstruktory

Konstruktory slouží k vytváření (konstruování) objektů. Konstruktor je vlastně speciální metoda, která se volá automaticky při vytváření jakéhokoliv objektu. Pokud vytváříme například nový míč (neboli nový objekt míč), vytvoříme ho voláním:

new Mic()

Konstruktor slouží k vytvoření daného objektu v paměti počítače a k nastavení jeho základních vlastností. V tomto případě tedy spustí počítač automaticky konstruktor objektu Mic.

Pokud budeme mít například objekt Okno, bude mít zřejmě datový atribut zavrene a tento atribut bude nabývat hodnot pravda/nepravda v závislosti na tom, zda je okno zavřené. Pokud budeme takový objekt vytvářet, uskutečníme to voláním:

new Okno()

Při tomto volání spustí program automaticky konstruktor objektu Okno. Při návrhu třídy Okno budeme předpokládat, že všechna okna jsou standardně zavřená. Jak toho docílíme? Při vytváření všech oken jim budeme muset nastavovat jejich hodnotu zavrene na pravda.

Konstruktor pak bude vypadat takto:

public void Okno(){ this.zavrene = True; }

Nahoru

Parametry metody

Metody ve svém nejzákladnějším tvaru, např.

okno.otevri()

k provedení akce nepotřebují žádné dodatečné informace – tedy otevri() jednoduše zajistí otevření okna. Existují ale i metody, které k provedení své akce potřebují dodatečné informace – například metoda

kalkulacka.sectiDveCisla()

by bez informace o tom, která čísla má sečíst fungovat nemohla. Metodě sečti tedy musíme zadat dvě čísla, která má sečíst. A jak jí tyto čísla předáme? Metodě můžeme předat tyto informace jako parametry – tedy volání

kalkulacka.sectiDveCisla(3, 4)

nám vrátí výsledek 7. Abychom mohli takto metodu zavolat, musí být vytvořená tak, aby právě tyto dva parametry očekávala. V tomto případě bychom tedy metodu deklarovali (neboli zapsali) takto:

public int sectiDveCisla(int i, int j){ return i + j; }

Aby to nebylo tak jednoduché, rozlišujeme dva typy parametrů metod – a to Formální parametr metody a Skutečný parametr metody. S oběma typy jsme se v tomto odstavci již setkali:

Formální parametr metody

Formální parametr metody je zapsaný v její hlavičce, tedy v předchozí metodě secti je to například "i". Proměnná tohoto jména potom bude přístupné uvnitř celé metody. U formálního parametru není možné specifikovat modifikátor přístupu (public, private,…), neboť jinde než uvnitř metody parametr přístupný není.

Skutečný parametr metody

Skutečný parametr metody je pak hodnota, kterou metodě předáme při jejím volání – tedy například trojka 3 a čtyřka 4 při volání metody

kalkulacka.sectiDveCisla(3, 4)

Nahoru

Pomocná proměnná

Může se stát, že pro vykonání nějaké metody budeme potřebovat během výpočtu si uložit nějaký mezivýsledek, s kterým budeme dále pracovat. Takovýto mezivýsledek si tedy uložíme do pomocné proměnné uvnitř metody. Hodnota této proměnné bude rozdílná při každém volání metody. Po jejím skončení dojde automaticky ke zrušení proměnné – mimo metodu není tato proměnná přístupná.

Nahoru

Rozhraní

Rozhraní, neboli anglicky interface, nám udává, jakým způsobem komunikuje objekt se svým okolím. Například televize – televize je docela složitý přístroj, ale protože má jednoduché rozhraní / interface, které je velmi jednoduché, může ji ovládat i malé dítě. Co je u televize tím rozhraním? Je jím dálkové ovládání – to nám umožňuje televizi ovládat. Pomocí tohoto ovládání můžeme přepínat programy, zeslabovat či zesilovat zvuk či televizi vypnout nebo zapnout.

Dálkové ovládání televize je tedy jejím interfacem a umožňuje jí tak komunikovat se svým okolím – tedy s námi. U již zmíněného výtahu jsou jeho rozhraním ovládací tlačítka. Stiskem tlačítek ve výtahu vlastně voláme metody výtahu – jedNahoru() nebo jedDolu().

Nahoru

Balíčky

Balíčky slouží ke sdružování objektů, které slouží ke jednomu účelu. Pokud jedete na dovolenou, budete si s sebou brát určitě nějaké věci, které na dovolené budete potřebovat – vlastně takový soubor nebo balíček věcí.

Na dovolenou si s sebou budete brát například ručník, potápěčské brýle a opalovací krém. Jak jsme si již řekli – vše je objekt – budete si tedy na dovolenou brát tři objekty – objekt ručník, objekt potápěčské brýle a objekt opalovací krém. Balíček věcí – neboli objektů – slouží v tomto případě k tomu, aby se Vám na dovolené líbilo.

V jazyku Java jsou objekty také shlukovány do balíčků. Klíčové slovo, kterým balíček definujeme, je Package (česky balíček).

Pojmenování balíčků

Mohlo by se lehce stát, že dva lidé na světě vytvoří balíček se stejným názvem – takovým balíčkem by mohl být například balíček domácízvířátka. Kdybychom následně chtěli takový balíček použít pouze pomocí jména domácízvířátka počítač by nevěděl, který z balíčků má použít.

Z toho důvodu se jména balíčků tvoří z doménových jmen, neboť ty jsou na celém světě jedinečné. Například webové stránky katedry informatiky na VŠE mají adresu http://kit.vse.cz/ – používá se tedy doménové jméno kit.vse.cz. .Pokud toto jméno otočíme, dostaneme tvar: cz.vse.kit. Toto jméno se pak stane základem jména pro balíčky vytvářené lidmi na této katedře.

Pokud bychom tedy vytvářeli balíček domácízvířátka, celé jméno by bylo cz.vse.kit.domacizviratka – potom kdokoli, kdo použije balíček s tímto názvem, získá právě náš balíček.

Nahoru

Deklarace

Deklarace znamená vytvoření proměnné - např.

String barva;

Proměnné deklarujeme uvnitř třídy a říkáme tím, jaké atributy budou objekty dané třídy mít. Při deklaraci ale neříkáme, jakou hodnotu proměnná bude mít.

Nahoru

Inicializace

Při inicializaci naopak přiřazujeme deklarované proměnné její hodnotu – např.

barva = "cervena".

Nahoru

Definice

Někdy můžeme spojit deklaraci a inicializaci do jediného příkazu – tedy např.

String barva = "cervena"

Takovému to zápisu potom říkáme definice

Nahoru

Identifikátor

V reálném světě mají všechny věci nějaký svůj název, aby bylo jednoduché o nich mluvit. Také neříkáme "takový dopravní prostředek s dvěmi koly, řídítky a motorem", ale používáme název "motocykl". Název motocykl je tedy identifikátorem – dle svého jména identifikuje věc, kterou vyjadřuje.

V jazyce Java potřebujeme objekty, metody, třídy a ostatní jednoduše používat – proto musí mít své jméno neboli identifikátor. Identifikátor = jméno. Aby byl kód, který programátor napíše lehce srozumitelný i ostatním, jsou vytvořené určité konvence pojmenování identifikátorů:

Pojmenování Tříd a Rozhraní (Class a Interface)

Pojmenování jmen metod, jejich parametrů a proměnných

Pojmenování konstant


Nahoru