Skip to main content

Myslíme objektově v jazyku Java (Ukázka, strana 99)

Page 1

98

Myslíme objektově v jazyku Java

Při pokusu o překlad přejmenované třídy však překladač vypíše v informačním panelu v dolní části okna editoru chybovou zprávu (viz obr. 3.14) invalid method declaration; return type required

v níž nás překladač upozorňuje na to, že jsme špatně definovali metodu, protože jsme v ní neuvedli typ návratové hodnoty. Současně v editačním panelu zvýraznil řádek, kde chybu objevil. Podíváte-li se ale na označený řádek, ihned poznáte, že chyba spočívala v něčem jiném: při přejmenovávání třídy jsme zapomněli zadat nový typ návratové hodnoty konstruktoru, tj. typ instance, kterou bude konstruktor inicializovat a vracet odkaz na ni. To za nás BlueJ neudělá (profesionální vývojová prostředí to však dělají). Po přejmenování tohoto typu na Strom již proběhne překlad bez problémů.

Obrázek 3.14 Po uložení souboru s přejmenovanou třídou BlueJ tuto třídu v diagramu tříd okamžitě přejmenuje

3.7 Ladění Ne vždy se nám podaří napsat program bez chyby (před chvílí jsme se o tom přesvědčili). Pravdou je spíše opačné tvrzení – téměř každý program obsahuje nějakou chybu. Chyby, které se v programech objevují, bychom mohli rozdělit do tří skupin:

Ukázka elektronické knihy, UID: KOS181067


Kapitola 3: Vytváříme vlastní třídu

99

Syntaktické chyby jsou prohřešky proti pravidlům zápisu jazyka. Tyto chyby jsou svým způsobem „nejpříjemnější“, protože je odhalí již překladač a poměrně jasně nás na ně upozorní, i když občas neodhalí příčinu chyby správně (viz náš problém s nepřejmenovaným typem návratové hodnoty). Syntaktickou chybou by v našich prvních programech bylo např. vynechání některé ze závorek, případně přidání nadbytečné závorky, vynechání středníku, zkomolení názvu typu návratové hodnoty, atributu či třídy apod. Běhové chyby jsou chyby, na které se nepodaří přijít během překladu a které se projeví až za běhu programu a vedou k nějakým výjimečným situacím. Mezi takovéto chyby patří např. dělení nulou, pokus o použití objektu, který ještě nebyl vytvořen apod. Tyto chyby jsou sice nepříjemné, ale při důkladném testování programu bychom je měli mít šanci všechny (nebo alespoň skoro všechny) odhalit a opravit. Logické chyby (často se setkáte s označením sémantické1 chyby) jsou chyby v logice programu, které zapříčiní, že program nedělá přesně to, co má. Ty se umějí nejlépe maskovat a dá většinou nejvíce práce je odhalit a opravit. Sémantickou chybou by v našem předchozím programu např. bylo, kdybychom špatně spočítali souřadnice nebo velikost obrazců a výsledný strom by pak vypadal divně, pokud by vůbec vypadal jako strom. Vyzkoušíme si nyní všechny druhy chyb a podíváme se, jak na ně bude počítač (a následně i my) reagovat.

Syntaktické chyby Jak jsem již řekl, odhalování a opravování syntaktických chyb je nejjednodušší, i když i ony nám jsou schopny občas připravit pěkný rébus. Již jsme se s takovou chybou setkali – nyní si o nich povíme podrobněji. Udělejte nejprve v programu chybu – odstraňte např. středník za prvním příkazem – a zkuste program znovu přeložit. BlueJ váš program opět nejprve uloží a pak jej začne překládat. Protože však najde v programu chybu, překlad nedokončí a místo očekávané hlášky Třída byla úspěšně přeložena – žádné syntaktické chyby zobrazí v dolním informačním poli chybovou zprávu ';' expected (viz obr. 3.15). Navíc ve zdrojovém textu zvýrazní řádek, v němž chybu odhalil.

Obrázek 3.15 BlueJ ohlásil chybu při překladu 1

Sémantický = významový.

Ukázka elektronické knihy, UID: KOS181067


100

Myslíme objektově v jazyku Java

Tato zpráva je sice psána anglicky, ale klepnutím na otazník na pravém okraji informačního pole otevřete dialogové okno, které vám většinou chybové hlášení přeloží a často i česky vysvětlí – viz obr. 3.16. Tato vysvětlení sice nejsou k dispozici pro všechny chyby, nicméně nejčastější chyby takto vysvětleny jsou. Minule se překladač spletl v odhadu příčiny chyby, nyní se spletl v označení řádku s chybou. Zapomenutý středník je typickou chybou, na kterou překladač přijde na jiném místě programu, než na kterém k chybě došlo. Chybu totiž neoznámí v místě, kde jsme ji udělali, ale v místě, kde ji odhalil. V našem předchozím příkladě mu samozřejmě nevadilo, že jsme středník neudělali hned za voláním konstruktoru. Jak jsem již řekl, Javě je poměrně jedno, jak program uspořádáme do řádků. Překladač proto objeví chybějící středník až v okamžiku, kdy narazí na něco, co nemůže do zpracovávaného příkazu zařadit. V našem případě to byl další operátor new nalezený na následujícím řádku. Jakmile chybu opravíte, BlueJ váš program přeloží a budete jej moci znovu používat.

Obrázek 3.16 Pro většinu chyb má BlueJ připraveno české vysvětlení

Zkuste vyrobit další syntaktické chyby tak, že odstraníte nebo přidáte do programu nějaký znak, a podívejte se, jak na ně bude BlueJ reagovat.

Běhové chyby Běhové chyby jsou v pořadí nepříjemnosti chyb uprostřed. Překladač je sice neodhalí již při překladu, avšak chyba se „iniciativně“ projeví při běhu programu – většinou tím, že program zkolabuje. Abychom takovéto chyby odhalili, musí program krizovým místem proběhnout. Musíme si proto připravit sadu testů, které postupně prozkoumají všechna zákoutí programu a umožní nám takovéto chyby najít dřív, než na ně přijde zákazník. Podívejme se, jak v případě takovýchto chyb reaguje BlueJ. Zkuste např. v prvním příkazu nahradit první nulu výrazem 0/0 (v programech se pro dělení používá znak „/“) a požádejte opět o překlad.

Ukázka elektronické knihy, UID: KOS181067


Turn static files into dynamic content formats.

Create a flipbook