Konstruktor na co? – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Konstruktor na co? – Java – Fórum – Programujte.comKonstruktor na co? – Java – Fórum – Programujte.com

 

Pavel
~ Anonymní uživatel
383 příspěvků
16. 7. 2015   #1
-
0
-

Zajímá mě, k čemu je dobrý konstruktor? Vždyť to samé můžu psát přes klasické metody, k čemu je tedy dobré používat kontruktory? Já jsem sice začátečník, ale to co napíšu v konstruktoru, napíšu i v metodě. Tak proč je využívat? Může mi někdo demonstrovat, kdy a proč je použít?

Krom toho, že můžu třeba nějaké int,string, atd inicializovat přímo v konstruktoru, a nemusím to dělat v main?

Nahlásit jako SPAM
IP: 83.208.189.–
Flowy0
Věrný člen
16. 7. 2015   #2
-
0
-

pozri si nieco o OOP ... java je dobra ak chces pouzivat objekty ... ak ti stacia struktury tak nepotrebujes viac ako c++

Nahlásit jako SPAM
IP: 95.105.177.–
https://github.com/Flowy
KIIV
~ Moderátor
+43
God of flame
16. 7. 2015   #3
-
0
-

#2 Flowy
Na struktury bohate staci C

Nahlásit jako SPAM
IP: 94.113.93.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
16. 7. 2015   #4
-
0
-

#1 Pavel
Konstruktor je speciální metodou, která zjednodušuje naplnění objektu. Místo 

Clovek adam = new Clovek();
adam.setName("Adam");

to s pomocí konstruktoru napíšeš na jeden řádek 

Clovek adam = new Clovek("Adam");

Zabráníš tím vzniku nevalidních objektů a zbavíš se potřeby setterů.

Metoda main() s tím nemá nic společného, obvykle se do třídy vůbec nedává.

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

#1 Pavel
Vyuziti je vela, Kit dobre pripomenul "zabranis vzniku nevalidnych objektov". Okrem toho vies zabranit programatorovi instanciovaniu objektu priamo (zmneou accessoru, to je vhodne pri singletonoch, faktoriach, builderoch). Inicializovanie final fieldov. Vies objekt urobit immutable, vhodne pri multithreadingu. Vsetko co som napisal sa da zhrnut do jedneho slova "restrictions".

Nahlásit jako SPAM
IP: 158.195.201.–
Zelenáč
~ Anonymní uživatel
1132 příspěvků
18. 7. 2015   #6
-
0
-

Jednoduše - konstruktor je jediný způsob, jak vytvořit novou instanci. Nejsou konstruktory, není OOP.

Nahlásit jako SPAM
IP: 88.101.166.–
Kit+15
Guru
18. 7. 2015   #7
-
0
-

#6 Zelenáč
Mýlíš se. Je více způsobů, jak vytvořit novou instanci. Konstruktor je jen jedním z nich.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zelenáč
~ Anonymní uživatel
1132 příspěvků
18. 7. 2015   #8
-
0
-

To si nemyslím, povídej.

Nahlásit jako SPAM
IP: 88.101.166.–
Kit+15
Guru
18. 7. 2015   #9
-
0
-

#8 Zelenáč
Podívej se třeba na vzor Simple Factory. Ten nemá konstruktor, ale produkuje objekty. Singleton a Messenger ho také nemají.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zelenáč
~ Anonymní uživatel
1132 příspěvků
18. 7. 2015   #10
-
0
-

Ano, Simple Factory vrací podobně jako konstruktor odkaz na vlastní instanci, ale tu instanci musí nejprve vytvořit konstruktor. Ať už přímo v těle dané tovární metody, nebo např. při deklaraci a zároveň tak i definici statického atributu, jak se obvykle používá u vzoru Singleton.

Nahlásit jako SPAM
IP: 88.101.166.–
Kit+15
Guru
18. 7. 2015   #11
-
0
-

#10 Zelenáč
Jenže konstruktor instanci nevytváří. Pouze její atributy plní hodnotami.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zelenáč
~ Anonymní uživatel
1132 příspěvků
18. 7. 2015   #12
-
0
-

Ano a to je také podstatou vytvoření instance. 

Když budu citovat pana Pecinovského o továrních metodách (Factory method / Simple factory)

Takto na první pohled by to mohlo vypadat, že tovární metody mají oproti konstruktorům jen samé výhody. Není tomu tak. Používání konstruktorů se nevyhnete, protože novou instanci nemůže vytvořit nikdo jiný. Tovární metoda vám pouze umožní konstruktor před okolím schovat, abyste mohli vytváření instancí trochu ovlivnit.

Nahlásit jako SPAM
IP: 88.101.166.–
Kit+15
Guru
18. 7. 2015   #13
-
0
-

#12 Zelenáč
Ano, pan Pecinovský má ve svých knihách občas chyby nebo přinejmenším věty, které se dají chybně pochopit. Zkus se ještě podívat na vzor Messenger, ten vůbec nepotřebuje konstruktor.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
petrph0
Newbie
19. 7. 2015   #14
-
+1
-
Zajímavé
Kit +

Dobrý den, pokusim se ti to vysvětlit na pár bodech

1. Konstruktor je metoda která se automaticky volá při vytváření objektu třídy.  Vzhledem k tomu že má stejný název jako třída, tak když vytváříš objekt, už voláš jeho konstruktor:
Clovek adam = new Clovek();   //toto  je současně vytvoření objektu a současně volání jeho konstruktoru

2.Kdyř nevíš co a proč dělat s konstruktorem,nemusíš o tom přemýšlet, a ani si ho psát, překladač ti sám vytváří sám tzv.implicitní konstruktor který ti pouze vytvoří objekt a nic víc. Viz příklad z bodu 1

3. Ale pokud tě něco napadne že by se mělo dít hned současně při (hned po)vytváření objektu, tak si ten konstruktor můžeš napsat stejně jako jinou metodu ve třídě a dopsat si potřebné do jeho kódu. Což tedy může být, jak jsi sám napsal naplnění jeho atributů, nebo vytvoření a naplnění nějaké interní struktury,dynamického pole,seznamu v tom objektu, atd. Nebo docela efektivní počítání vznikajících objektů ze třídy s pomocí static atributu. 

3.1 Samozřejmě tedy, můžeš napřed "pouze" vytvořit objekt s implicitním konstruktorem, a potom zavolat další napsanou metodu, která udělá to další co potřebuješ-ale proč volat dvě metody místo jedné a pokaždé na to myslet?

4. Samostatnou kapitolou jsou konverzní a kopírovací konstruktory, kdy sice jde o "naplnění  atributů "ale nejde o čisté přiřazení hodnoty ,ale předáváš mu jako parametr proměnnou jiného typu (či i třídy), takže mu tam musíš předepsat příslušné přetypování, resp. složitější konverzi.A pokud má ten  objekt složitější strukturu (v atributech pointery na jiné objekty..), tak mu tu deep copy musíš předepsat obvykle sám.

5. Jen na doplnění, ale to asi víš (a pan Pecinovský to asi popsal)-konstruktory mohou být stejně jako jiné metody přetížené. To znamená, že ty si při psaní třídy můžeš napsat povícero různých konstruktorů -stejné jméno (jako třída) ale různý počet a typy předávaných parametrů-   A pak tedy při psaní kódu v main (i kdekoliv jinde) když vytváříš objekt tak podle potřeby,právě těmi parametry můžeš rozlišit který z těch konstruktorů se má zavolat..

Nahlásit jako SPAM
IP: 88.100.206.–
Emanuel
~ Anonymní uživatel
3 příspěvky
19. 7. 2015   #15
-
0
-

#14 petrph
Mockrát děkuji, Vaše vysvětlení je přesně to, co jsem hledal! Mockrát děkuji! 

Nahlásit jako SPAM
IP: 83.208.189.–
sleepy
~ Anonymní uživatel
422 příspěvků
24. 7. 2015   #16
-
0
-

Dalsie su napr. (De)Serialization a reflection (za toto ta ziadny programator nepochvali), clone.

Nahlásit jako SPAM
IP: 158.195.201.–
Pavel Denali
~ Anonymní uživatel
2 příspěvky
12. 10. 2015   #17
-
0
-

Konstruktor je v třídě přítomen vždy. Když není implicitně napsán programátorem, vytvoří jej Java automaticky.
Doporučuji přečíst http://www.algoritmy.net/article/21528/Metody-6 kde je vše dobře popsáno.

Nahlásit jako SPAM
IP: 46.173.194.–
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, 16 hostů

Podobná vlákna

Konstruktor — založil Dagi

Konstruktor — založil el

Konstruktor / Destruktor — založil Minko

Konstruktor z charu — založil Spectrik

Konstruktor inicializacia — založil kryptonix

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ý