Trošku teorie...OOP – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Trošku teorie...OOP – Java – Fórum – Programujte.comTrošku teorie...OOP – Java – Fórum – Programujte.com

 

Honza
~ Anonymní uživatel
451 příspěvků
11. 1. 2017   #1
-
0
-

Ahoj mistři, bohužel jsem na Javu zanevřel a teď mi jaksi některé věci unikají..a proto jsem zde, abych si doplnil znalosti :D

O co mi jde, potřebuju vysvětlit gettery, settery a konstruktor.

Ok, když mám něco private, vygeneruj gettNeco settNeco.. a pak to neco můžu nastavit přes objekt.settNeco(neco)...

Jenže to samé můžu udělat pře konstruktor... takže se tážu, proč vlastně co a kdy použít? Uvedu kódy.. Jsem z toho trošku mimo, protože nevím co vlastně mám použít..i když co jsem se dočetl, tak když mám v třídě něco private..tak se používají settery/gettery..ale vždyť  tu práci udělá i konstruktor, tak jsem z toho blázen :D

Snad jsou kody v pohodě-bez chyb, píšu to tak narychlo, tak snad mě někdo pochopí :)

    public String getZeme() {
        return Zeme;
    }

    public void setZeme(String Zeme) {
        Zeme = Zeme;
    }

//konstruktor třídy Planety

Planety(String Zeme){
	this.Zeme = Zeme;
}

No a pak instance..

Planety VypisPlanet = new Planety("Země");

Anebo, Země nastavit přes settery.

 VypisPlanet.settZeme("Země")
Nahlásit jako SPAM
IP: 88.103.163.–
Kit+15
Guru
11. 1. 2017   #2
-
0
-

#1 Honza
Máš pravdu, gettery a settery jsou v OOP zcela zbytečné. Používej konstruktory a nezapomeň, že atributy objektu by měly být vždy privátní, tedy až na výjimky uvedené v návrhových vzorech.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Honza
~ Anonymní uživatel
451 příspěvků
11. 1. 2017   #3
-
0
-

Ale tak občas se musí hodit, ne? Jinak by to neexistovalo :D

Nahlásit jako SPAM
IP: 88.103.163.–
Kit+15
Guru
11. 1. 2017   #4
-
0
-

#3 Honza
To si vymysleli programátoři, kteří stále chtějí programovat imperativně. Gettery ani settery nepoužívám a nechybí mi.

Samozřejmě občas musím pracovat s nějakou knihovnou, která takové metody má, tak je samozřejmě musím použít, ale sám je nevytvářím. Když programuješ objektově, tak je nepotřebuješ.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:1ca:1...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
gna
~ Anonymní uživatel
1891 příspěvků
11. 1. 2017   #5
-
0
-

#1 Honza
Konstruktor se vyvolává jen při vytváření objektu. Setter lze zavolat i kdykoliv později a opakovaně s různými hodnotami.

Nahlásit jako SPAM
IP: 213.211.51.–
Kit+15
Guru
11. 1. 2017   #6
-
0
-

#5 gna
Jenže takový setter je pak zpravidla v rozporu s principy OOP. Operace nad objektem se pak dělají zbytečně mimo objekt místo toho, aby se dělaly přímo uvnitř objektu.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Honza
~ Anonymní uživatel
451 příspěvků
11. 1. 2017   #7
-
0
-

A jak to funguje při dědění? Když mám třídu, v ní něco private a potřebuju to dostat do třídy, která z ní dědí? Tam se to pak řeší přes protected?

Nahlásit jako SPAM
IP: 88.103.163.–
Kit+15
Guru
11. 1. 2017   #8
-
0
-

#7 Honza
Ano, to se řeší přes protected, ale to jsem už také hodně dlouho nepoužil. Raději z potomka volám metody rodiče.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Honza
~ Anonymní uživatel
451 příspěvků
11. 1. 2017   #9
-
0
-

Projíždím knížku Javy, abych ty základy zase pochytil a je tam příklad, je třída, ta má nějakou private, další třída z ní dědí a s tou proměnou nějak pracuje, výpočty, pracuje s ní skrze právě gettery/settery. 

A tohle by se jak řešilo skrze konstruktory? :D

Nahlásit jako SPAM
IP: 88.103.163.–
Kit+15
Guru
11. 1. 2017   #10
-
0
-

#9 Honza
To bude nějaká divná knížka od někoho, kdo dříve programoval v C.

Javu jsem se učil od Bruce Eckela, ten to má od začátku objektově.

K dotazu: V konstruktoru zavoláš super(parametry) . Musí to být voláno jako jeho první příkaz.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Honza
~ Anonymní uživatel
451 příspěvků
11. 1. 2017   #11
-
0
-

hm asi kouknu na nějakou jinou knížku, ale díky ti!   

btw, od Herberta Schildta

Nahlásit jako SPAM
IP: 88.103.163.–
Kit+15
Guru
12. 1. 2017   #12
-
0
-

#11 Honza
Od Herberta Schildta jsem našel jen knihu Java the Complete Reference, což je referenční příručka, ale ne učebnice. O getterech a setterech se zmiňuje jako o návrhových vzorech, což je blbost. Příklady mají do OOP hodně daleko, je to typické imperativní programování křížem mezi objekty bez nějakého zapouzdřování.

Dědičnost má docela dobře, i když začíná chybným výkladem jako v podobných příručkách. B totiž nikdy nemůže být potomkem A. Polymorfismus vysvětluje špatně, i když v následující kapitole o rozhraní ho použije správně. O kus dál zase špatně.

Tato kniha může docela dobře posloužit jako referenční příručka pro někoho, kdo již OOP zná a nenechá se strhnout. Pro začátečníky ji však nedoporučuji, protože v nich může vypěstovat chybné návyky.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ovrscout
~ Anonymní uživatel
113 příspěvků
12. 1. 2017   #13
-
0
-

#12 Kit
Můžeš prosím poradit nějakou lepší literaturu? :)

Nahlásit jako SPAM
IP: 193.165.79.–
Kit+15
Guru
12. 1. 2017   #14
-
0
-

#13 Ovrscout
Už jsem tady zmínil Bruce Eckela, který napsal knihu Thinking in Java. Byla přeložena i do češtiny.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
NotBeginner
~ Anonymní uživatel
185 příspěvků
12. 1. 2017   #15
-
0
-

#1 Honza
.. když mám v třídě něco private..tak se používají settery/gettery..ale vždyť  tu práci udělá i konstruktor, tak jsem z toho blázen :D

Názory Kita ber z notnou rezervou. On je divný. Ale zpět k tématu, ano lze to jak přes konstruktor tak i přes setter. Obojí je správně, a obojí je v praxi používané. Způsob použití se mění podle potřeby. Jednou potřebuješ inicializovat celý objekt tak použiješ konstruktor a jindy pouze jeden atribut a tehdy využiješ setter. To je celé.

Nahlásit jako SPAM
IP: 217.112.161.–
Kit+15
Guru
12. 1. 2017   #16
-
0
-

#15 NotBeginner
Ty první dvě věty sis mohl odpustit. Napadání oponenta do korektní diskuze nepatří.

Konstruktor slouží k inicializaci objektu. Pokud potřebuješ inicializovat pouze jeden atribut, bude mít konstruktor jen jeden parametr. Je tedy zbytečné dělat k němu ještě setter.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
KIIV
~ Moderátor
+43
God of flame
12. 1. 2017   #17
-
+1
-
Zajímavé
Kit +

Ciste konstruktorama to jde. Tusim ze se tomu rikalo  Immutable objekty (trida String by mela byt v tomto duchu)

Vicemene jde o to, ze objekt nelze menit. Vzdy vytvoris novy objekt ze stareho s pridanou/zmenenou hodnotou.

U slozitejsich objektu se pak muze pouzit Builder pattern pro nastavovani polozek.

Nahlásit jako SPAM
IP: 212.47.3.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
12. 1. 2017   #18
-
0
-

Gettery a settery jsou typické tím, že jejich názvy začínají get... nebo set... To však není jediný způsob modifikace objektů. Co třeba metody add(), push(), update(), notify() apod? Ty také modifikují stav objektu a přesto se jim neříká settery. Ani metodám toString(), format() nebo show() se neříká gettery.

Nahlásit jako SPAM
IP: 194.228.13.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 44 hostů

Moderátoři diskuze

 

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