Diskuze: Volání objektu na objekt
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 10 zpráv z 10.
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.
No očividně jsi se učil na zdejších tutoriálech viď?:(
A přesně, co jsem tolikrát tak často zmiňoval - tyto stránky jsou
perfektní, ale tutoriál na Javu naprosto ignoruje zapouzdření a taky ten
kód tak šíleně vypadá:(
Metoda Insert asi podle názvu bude vkládat prvky do seznamu. Předpokládám, že třída Node reprezentuje 1 položku ze seznamu, která si jen pamatuje nějakou hodnotu a odkaz na další položku. (tady bych se trošku zamyslel nad logikou aplikace - asi by bylo možná lepší předávat jako parametr v metodě insert přímo objekt Node). Když se přidává do seznamu položka, tak seznam vyžaduje, aby každý Node měl současně odkaz na svojeho "následníka". Takže když přidáváš Noda, tak si vezmeš poslední Node v seznamu (je v atributu last), přidáš tomuto Nodovi toho nového Noda, (prostě last.next zavolá atribut toho posledního noda, jde to tak, ale je to čuňárna). A ten nový Node nastavíš jako last, takže při příštím vkládání bude on ten, kdo si přidá nového noda.
A toto je právě to, o čem jsem mluvil na začátku. Je to svinstvo a
rozhodně to není čisté OOP programování. Jde to, ale porušuje to
zapouzdření. Princip zapouzdření spočívá v tom, že by žádný jiný
objekt neměl přistupovat přímo k atributům jiného objektu. Proto existují
tzv. přístupové metody (access methods) známé taky jako settry a gettry.
Pokud chceš aby měl "zbytek světa" přístup k atributům třídy, tak pro
nastavování tohoto atributu použij metodu setNazevAtributu(parametr) a pro
získání tohoto parametru použij metodu getNazevAtributu(). Dřív to byla
pouze zavedená konvence,
dneska je to naprostý standart. (a dokonce dnešní IDEčka už umožňují
vygenerovat přímo settry, gettry nebo současně i settry a gettry u
vybraných parametrů)
Samozřejmě - jak vidíš, tak to jde i bez zapouzdření, ale vzniká velké nebezpečí a navíc ten kód vypadá strašně.
this.last.next = n;
Jak mohu volat na objekt další objekt? (který není ani inicializovaný)
Nevoláš tedy objekt na objekt, ale voláš atribut objektu. Buď tečkou můžeš volat metody (a to bys měl v OOP pouze a jenom) a nebo volat atribut této třídy.
Mockrát děkuji
. Tenhle
kod není psaný mnou, právě proto mě to dost zmátlo, protože jsem se s
tímhle způsobem volání atributu nesetkal. Gettery/settery používám
běžně, ale nenapadlo mě, že to lze pomocí toho tady přepsat.:)
dobrý, tak se to tak ani neuč:D
Primy pristup k atributum tridy Node v tomto pripade neni porusenim principu
zapouzdreni, protoze trida Node je privatni a tedy viditelna jen v ramci
implementace tridy LinkedList. Kdyz se treba podivas na implementaci LinkedList
v JDK 8 tak to delaji uplne stejnym zpusobem, jen je Node genericky.
Pouzivat tridu Node jako parametr metody insert je taky spatny napad, protoze
tim by jsi vystavil vnitrni implementaci vazeb linked listu vsem kdo pouzivaji
dany linked list. Kdokoli by mohl rozbit vazby v tom linked listu. Vystaveni
tridy Node by bylo prave poruseni zapouzdreni tridy LinkedList.
Na tridu Node v tomto konkretnim pripade se nelze divat jako na klasickou java
tridu. V tomto pripade se jedna spise o interni datovou strukturu jine tridy.
Samozrejme syntakticky to trida je, protoze java nema nic jako datove
struktury.
Co si myslíš, že je lepší?
player.addExperience(42);
anebo
player.setExperience(player.getExperience() + 42);
this.last.next = n;
Ale je inicializovaný.
if (size == 0)
protože jsme v konstruktoru definovaly size = 0 tak vždy první porovnání(vyhodnocení) if končí true co vede k cyklu kdy se tvz. přiřadí reference privatním proměnným first a last třídy LinkedList.
if (size == 0) {
this.first = n;
this.last = n;
}
A na konci metody insert zvýšíš proměnou size o 1.
size++;
else {
this.last.next = n;
this.last = n;
}
takže vidíš že last je inicializovaný a tudíž k jeho proměnné lze přistupovat a provést nastavení.
Prvá možnosť je síce zrozumiteľnejšia a prehľadnejšia, ale java "style" je ten druhý prípad.
trošku nechápu tvůj dotaz, protože to máš dva rozdílné výsledky....
player.addExperience(42);
ti nastaví hodnotu na 42
player.setExperience(player.getExperience() + 42);
ti zvýší aktuální hodnotu o 42.... Nechápu co to má společného s tímto ticketem a už vůbec s tím, co jsem psal já....
Zobrazeno 10 zpráv z 10.
