
Pomoc s OO kódom
Zdravím! :) Potreboval by som trochu helfnúť s jedným kódom. Nerobím žiadnu hru (aj keď by sa to tak mohlo zdať), iba sa tak hrám s triedami a skúšam veci s dedičnosťou a polymorfizmom a tak. V OO som neskúsený, prečítal som nejaké knižky ale keď som to skúsil v praxi, našiel som pár zádrhelov Bol by som rád ak by ste mi pomohli nech sa môžem pohnúť ďalej :)
Dal som si aj tú malú námahu cvaknúť UML diagram aby bol môj problém zrozumiteľnejší :) Inak celý popis problému je rovno v tom obrázku :)
(áno, používam názvy lodí zo seriálu Battlestar Galactica, lebo sa mi nechcelo žiadne vymýšlať )
jak presne a kde presne si definoval tie konstanty a kde presne ich "nevidiet" (jak k nim pristupujes) a jak sa to prejavuje to ze ich "nevidiet"? (compiler error alebo exception (jaky?) alebo jak sa prejavi ta zavada?)
ahoj,
ako som vyššie napísal, definície konštánt mám v každej jednej konkrétnej (neabstraktnej) triede.
Teda napr. trieda Viper (to je jeden z typov stíhačiek) vyzerá takto:
Takto zatiaľ vlastne vyzerá každá konkrétna trieda, menia sa iba konštanty (malá stíhačka má menšie pancierovanie ako veľký krížnik).
Tieto konštanty používam v Setteri, využívam enkapsuláciu aby som pri zmenení premennej hull mohol overiť či nepresahuje MAX_HULL, lebo malá stíhačka rady Viper nemôže mať väčší hull ako 15.
Setter mám ale definovaný v superclasse Spaceship, keďže ho majú mať všetky lode rovnaký.
Starship:
Tomu, že supertrieda nevidí premenné a konštanty svojich podtried rozumiem. Potreboval by som preto skôr nejaký návrh, ako tento problém vyriešiť s tým, aby bol kód čo najviac objektovo-orientovaný.
(napísať getter a setter zvlášť pre každú podtriedu by bolo riešenie, ale neverím že neexistuje nič lepšie a elegantnejšie
)
Ďakujem pekne za rady!
Aha, takže Java:
Metóda setHull a konštruktor sú trochu nekonzistentné, pretože v jednej sa vyhadzuje výnimka a v druhej sa potichu nastaví maximálna hodnota. Mal by si si vybrať jednu možnosť a tú dodržiavať.
Konštantu STANDART_HULL som úplne vyhodil, lebo sa mi nezdá, že by si si ju potreboval niekde pamätať. Ale môžeš si ju tam samozrejme pridať.
Ej, no tento návrh sa mi aj celkom pozdáva :) Ak teda rozumiem, tak z podtriedy volám konštruktor supertriedy a posielam do neho hodnoty takto pekne, hmm, ešte som sa týmto netretol veru :)
Popravde sa mi nepáči to, že mi to hádže Exception (ale to si viem vyriešiť), a ten druhý spôsob, čo je v setteri, takú syntax som ešte nevidel
"hull < maxHull ? hull : maxHull;" tie dvojbodky a otázniky ma tam dobre mätú, nestretol som sa ešte s niečim takým 
aj tak ďakujem pekne!
A podle čeho se to učíš? Ve většině učebnic je to někde na začátku.
http://cs.wikipedia.org/wiki/Tern%C3%A1rn%C3%AD_op er%C3%A1tor_(programov%C3%A1n%C3%AD)
Z rôznych zdrojov, ale hlavne odtiaľto: hfjava