Diskuze: Úkol 4 - Reference na instance objektu
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 5 zpráv z 5.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Předně, není to moc dobře naprogramováno.To jsi vytvořil ty nebo to je vzorové řešení? teď si to už nepamatuju.
Zkusím to trošku zobecnit.
Reference = odkaz na něco.
Základem všeho je proměnná. Proměnná se skládá z:
Pokud máš proměnnou s primitivním datovým typem, tak tato hodnota je naplněná vždy konečnou hodnotou (nemůžeš na to už volat jiné metody a tato hodnota už je prostě konečná a nebude se nijak rozvíjet. Můžeš ji leda měnit, pracovat s ní, ale to je tak vše).
No a pak máš proměnná, která má uloženou REFERENCI (odkaz) na nějaký objekt.
Trošku názorně, abys viděl konkrétní příklady:
Máš proměnnou s priminitivním datovým typem (mimochodem, existuje pouze 8 primitivních datových typů, to jen tak pro info).
private int number = 4;
Vidíš sám, že tato proměnná má konkrétní hodnotu. Není to reference
(odkaz na objekt), ale hodnota.
(Trocha filozofie.... kupříkladu JavaScript bere úplně všechno jako objekt,
takže on by dokázal říct, že třeba ta čtverka je také objekt, ale v
Javě, i když je Java ryze objektová, tak se toto rozlišuje).
Takže prostě a jednoduše - proměnná neodkazuje na referenci (na žádný
objekt), takže už nemůžeš volat na ní žádné metody.
Nemůžeš zavolat ani třeba:
number.toString();
Naproti tomu, proměnná objektového datového typu uchovává v sobě ne
hodnotu, ale REFERENCI (odkaz) na objekt.
Takže když máš třeba:
private Hrad hrad = new Hrad();
tak v proměnné hrad máš v podstatě schovaný objekt.
Proměnná objektového datového typu může dokonce už nabývat hodnoty null
- to je také rozdíl třeba mezi nulou a null. Nula je konkrétní hodnota.
Null znamená, že odkazuješ na žádný objekt.
A teď k tvému příkladu.
Úplně za prvé... pokud k tomu nemáš skutečně dobrý důvod a ty
důvody prakticky už dneska skoro neexistují, protože se dá většinou
najít čistčí řešení, tak nepiš proměnné s modifikátorem přístupu
public.
Zapamatuj si konvenci, že proměnná se píše prioritně private.
Takže teď už bys mohl vědět odpověď na 1. bod
Ne, v uvedeném příkladu nevytváříš žádnou referenci.
Ono se to trošku rozděluje.
To, co jsi uvedl, tak je právě deklarace. Deklarace znamená, že pouze někde uvedeš, že vytváříš proměnnou. Deklarace tedy znamená: modifikátor přístupu, datový typ a název. Nic víc
Potom je právě inicializace. To prostě ber tak,že napíšeš rovnítko a buď napíšeš konkrétní hodnotu (v případě primitivních datových typů) nebo buď vytvoříš nový objekt a nebo použiješ stávající (to v případě objektového datového typu). V případě objektového datového typu uložíš do proměnné referenci na objekt.
V bodě 2 ano, vytváříš nové objekty a uložíš je (získáš referenci na ně) do proměnných.
k dalším bodům se vyjádřím v dalším komentáři, ať to není dlouhé

u třetího bodu to říkáš špatně. Ne do referencí, ale do proměnných
uložíš reference.
A pro tvoje info. Toto je čuňárna, o které jsem mluvil. Říká se tomu
zapouzdření. Je nebezpečné, aby k atributům třídy měla přístup jiná
třída. Toto se řeší přes tzv. přístupové metody (settery, gettery).
Kdyby tě to zajímalo, mohl bych ti pak o tom víc napsat i s konkrétními
příklady.
4. bod - ne není vytvořena reference. aktuálníLokace je opět proměnná, která uchovává v sobě referenci.(vždy aktuální vybranou lokaci).
5. bod. Máš tam 2 podmínky (obě rozvětvené). Pokud bude splněna
první,přejde se k druhé. Pokud nebude, tak se metoda ukončí.
Možná by se sem víc hodila rekurze, než ukončovat takhle metodu a pak ji
provolávat, ale to je na uvážení programátora.
V případě, že se první podmínka splní v první větvi a přejde se do další větve, tak se prochází další podmínka, která v jednotlivých případech nastaví referenci na lokaci do proměnné aktualniLokace (podle toho, jakou volbu zvolíš).
6. bod, kterému nerozumíš.
To je jedna z přístupových metod, o které jsem i mluvil. Je to tzv. getter
nebo getMetoda. Anglicky se vrat řekne get 
Tato metoda je návratová. Návratová metoda nemá void, ale datový typ,
který vrátí. V podstatě je to právě ta čistá varianta, o které jsem
mluvil. Neodkazuješ se přímo na proměnnou aktualniLokace, ale použiješ
referenci v této proměnné přes tuto metodu.
Může se zdát, že je to zbytečné, dalo by se místo metody vratAktualniLokaci() používat přímo proměnnou aktualniLokace - viz příklad:
private Lokace aktualniLokace = new Lokace()
public Lokace getAktualniLokace() {
return aktualniLokace;
}
public void metoda() {
//A nyní můžeš napsat:
System.out.println(getAktualniLokace());
//A nebo:
System.out.println(aktualniLokace);
// Dostaneš ten samý výsledek
}
Proč to tak je přes tyto metody, tak s tím souvisí teorie a koncept OOP. Jestli bys měl zájem, můžu ti o tom teda napsat víc.
Víc ještě o rozdílu mezi referencí a hodnotou najdeš zde. Nenašel jsem
doteď lepší článek, který by to lépe vystihl. Je skutečně nádherně
zpracován a nevytkl bych tomu ani čárku mezi větou.
https://www.itnetwork.cz/…ge-collector
Zobrazeno 5 zpráv z 5.