4IT101 otázky k závěrečnému testu verze pro zimní semestr 2007/2008 Které programovací jazyky byly primárně navrženy pro oblast vědecko-technických výpočtů? Které programovací jazyky se často používají pro programování operačních systémů (v širším slova smyslu)? Popište krátce některé jazyky, které slouží pro komunikaci s počítačem a nejsou programovací. Popište krátce rozdíly v požadavcích na programovací jazyky pro vědecko-technické výpočty od požadavků na programovací jazyky pro obchodní aplikace. Vysvětlete výrok „Programátor komunikuje s virtuálním strojem příslušného programovacího jazyka“. Jaké jsou fáze překladu u klasicky překládaných programovacích jazyků? Vysvětlete rozdíl mezi klasicky překládaným programovacím jazykem a interpretem. Jaké jsou výhody a nevýhody interpretovaných programovacích jazyků? Z hlediska překladu se Java označuje za hybridní programovací jazyk. Proč je právě hybridní? Jak byste charakterizovali assembler. Vyjmenujte čtyři základní rysy procedurálních programovacích jazyků. Které programovací jazyky byste zařadili mezi procedurální programovací jazyky? Napište příklady programovacích jazyků, které byly doplněny o objektové vlastnosti a příklady programovacích jazyků, které byly od začátku navrženy objektově. Charakterizujte programovací jazyky 4. generace. K čemu se používají skriptovací programovací jazyky? Charakterizujte programovací jazyk Plankalkül. Charakterizujte programovací jazyk Fortran. Charakterizujte programovací jazyk LISP. Charakterizujte programovací jazyk Algol. Charakterizujte programovací jazyk Algol 68. Jak ovlivnil další programovací jazyky? Charakterizujte programovací jazyk Cobol. Charakterizujte programovací jazyk Basic či Visual Basic. Charakterizujte programovací jazyk PL/I.
Charakterizujte programovací jazyk Pascal. Charakterizujte programovací jazyk C. Charakterizujte programovací jazyk Prolog. Charakterizujte programovací jazyk Ada. Charakterizujte programovací jazyk Smalltalk. Charakterizujte programovací jazyk C++. Charakterizujte programovací jazyk C#. Charakterizujte programovací jazyk JavaScript. Charakterizujte programovací jazyk PHP. Zkuste krátce vysvětlit pojem proměnná. Jaké jsou atributy proměnné. Co se zvažuje při návrhu pravidel pro názvy proměnných v programovacím jazyce? Co je to jmenná konvence? Uveďte příklady jmenných konvencí. Zkuste krátce charakterizovat maďarskou notaci. Jaké jsou výhody statické vazby typu k proměnné? Používá se i Javě? Vysvětlete pojem dynamická vazba typu proměnné. Jaké má výhody? Jaký je rozdíl mezi zásobníkem a haldou z hlediska alokace paměti pro proměnné? Co to je globální proměnná? Jaké má výhody/nevýhody? Co to je typová kontrola? Kdy se provádí? Co znamená, že je nějaký programovací jazyk je silně typový? Uveďte příklady silně typových jazyků. Jaký je rozdíl mezi životností a rozsahem platnosti proměnné. Jaké typy se zařazují mezi primitivní datové typy v Javě? Charakterizujte dekadický číselný typ. Jak se může alokovat paměť pro pole? K čemu se používá datový typ pointer? Jaké operace jsou pro pointer k dispozici? Jaký je rozdíl mezi typem pointer a referenčním typem?
Jaké vlastnosti musí splňovat abstraktní datový typ? Patří typ záznam mezi uživatelem definované typy? Proč? Patří typ záznam mezi abstraktní datové typy? Proč? Jaké jsou výhody abstraktního datového typu? Uveďte příklad parametrických abstraktních datových typů. V čem se liší datový typ objekt od abstraktního datového typu? Co víte o objektech (datovém typu objekt) ve Smalltalku? Co víte o objektech (datovém typu objekt) v C++? Popište rozdíl mezi používáním počítačového programu a programováním počítače. Vypište nevýhody assembleru vůči programovacímu jazyku vyšší úrovně. Co označuje pojem integrované vývojové prostředí Jedním z kritérií pro hodnocení programovacích jazyků jsou náklady spojené s konkrétním programovacím jazykem. Co všechno se do těchto nákladů zahrnuje? Vysvětlete (např. pomocí příkladů) vliv jednoduchosti návrhu programovacího jazyka na čitelnost programu? Co označuje pojem ortogonalita v souvislosti s návrhem programovacího jazyka? Jaká kritéria ovlivňují čitelnost kódu určitého programovacího jazyka? Co ovlivňuje snadnost zápisu programu v jednotlivých programovacích jazycích? Co se označuje výrazem expresivita programovacího jazyka? Jaký je rozdíl mezi lexikální a syntaktickou analýzou? Jaký je rozdíl mezi syntaxí a sémantikou programovacího jazyka. Jak se formálně popisuje syntaxe programovacího jazyka. Co to je syntaktický strom programu. K čemu se používá Backus-Naurova forma? V čem se liší statická sémantika od dynamické sémantiky? Jak lze popsat dynamickou sémantiku programovacího jazyka? Popište výčtový typ v Javě? Jakým jiným způsobem se realizuje v některých jiných programovacích jazycích? Co označuje pojem asociativní pole? Je k dispozici programátorům v Javě? Pokud ano, jak se v Javě označuje.
Co to je datový typ záznam (record)? Uveďte příklady programovacích jazyků, které používají datový typ záznam. Co víte o datovém typu union (záznam proměnlivé délky)? Je k dispozici programátorům v Javě – pokud ano, tak pod jakým názvem. Vysvětlete datovou abstrakci. Jaký je rozdíl mezi infixovou a postfixovou notací? Vysvětlete prefixovou (polskou) notaci. Kde se používá? Popište krátce rozdíly mezi procedurálními a funkcionálními programovacími jazyky? Vypište nejznámější funkcionální programovací jazyky včetě stručné charakteristiky. Pro jaké aplikace se nejčastěji používají funkcionální programovací jazyky? Stručně charakterizujte logické programovací jazyky? Vysvětlete tvrzení, že Prolog patří mezi deklarativní jazyky. Jaké jsou nejčastější oblasti použití Prologu. Jaký je v Prologu rozdíl mezi faktem (predikátem) a pravidlem. Vysvětlete pojem informace. Jaký je rozdíl mezí syntaxí a sémantikou informace? Jaké jsou základní oblasti aplikované informatiky? Definujte osobní informatiku. Definujte podnikovou informatiku. Co je to proces z pohledu podnikové informatiky? Jaké jsou základní prvky von Neumanova návrhu počítače? Co je to instrukční sada počítače? Jaké instrukční sady znáte? Vysvětlete pojem sběrnice. Jaké typy sběrnic znáte? Jaký je rozdíl mezi pamětmi ROM a RAM? Co je to vnější paměť počítače? Uveďte několik příkladů. Jaký je rozdíl mezi programem a algoritmem? Jaký je rozdíl mezi centralizovaným a decentralizovaným zpracováním? Jaký je rozdíl mezi klient-server modelem distribuovaného zpracování a peer-to-peer modelem? Uveďte příklady aplikací pro oba modely.
Jaký je rozdíl mezi základním programovým vybavením a aplikačními programy? Uveďte příklady aplikací z jednotlivých skupin. Vysvětlete pojem operační systém. Jaké jsou základní funkce operačního systému? Uveďte příklady operačních systémů. Vysvětlete pojem soubor. K čemu se používá souborový systém? Uveďte příklady souborových systémů. Vysvětlete pojem middleware. Jaké jsou formy prezentace dat? Jaký je rozdíl mezi položkou a záznamem při ukládání dat v systému? Jaké jsou výhody tradičního (souborového) přístupu k datům? Jaké jsou výhody databázového přístupu k datům? Co je to kódování znaků? Uveďte několik standardů pro kódování českých znaků. Co je to schéma databáze? Co je součástí SQL (Structure Query Language)? Co je to XML? K čemu se používá DTD (Document Type Definition)? K čemu se používá XSLT? Co je to parsování XML dokumentů? Jaký je rozdíl mezi HTML a XHTML? Jaký je rozdíl mezi rastrovou (bitmapovou) a vektorovou grafikou? Stručně charakterizujte grafické formáty GIF, JPEG a PNG. Popište rozdíly mezi instancí a třídou. Popište rozdíly mezi instancí a odkazem na instanci. Popište rozdíly mezi objektem a instancí. Popište rozdíly mezi konstruktorem a metodou. Popište rozdíly mezi datovým atributem a identifikátorem odkazujícím na tento atribut.
Jaké jsou rozdíly mezi datovým atributem a lokální proměnnou. Popište následující pojmy: příkaz sekvence příkazů blok příkazů Lze přetypovat potomka na předka? Pokud ano, napište nějaký příklad. Pokud ne, vysvětlete proč. Lze přetypovat předka na potomka? Pokud ano, napište nějaký příklad. Pokud ne, vysvětlete proč. Proč je nebezpečné používat veřejné datové atributy? Kde (v čem) se uchovává stav instance mezi jednotlivými voláními metod instance. Existuje dědičnost mezi rozhraními? Pokud ano, zkuste popsat situaci, kdy by mělo smysl ji použít. Stručně vysvětlete rozdíl mezi metodou instance a statickou metodou. Co označuje v souvislostí s objektovou teorií pojem "posílání zpráv"?. Jak se realizuje v Javě? Čím se liší konstruktor od ostatních metod? Jak souvisí dědičnost se znovupoužitelností kódu? Nakreslete diagram tříd, ve kterém je třída A potomkem třídy B a třída A současně implementuje rozhraní R. Ukažte na příkladu, jak rozhraní umožňuje volbu implementace. Stručně vysvětlete polymorfismus v souvislosti s přetěžováním metod. Vysvětlete pojem zapouzdření z objektové teorie. Vysvětlete pojem ukrývání implementace z objektové teorie. Popište rozdíly mezi příkazy new Ucet(5, "Jarmila", 10); a Ucet ucet = new Ucet(5, "Jarmila", 10); Popište rozdíly mezi deklaracemi Ucet a; a Ucet a = new Ucet(5, "Jarmila", 10); Popište chybu v následujícím kódu: CtyrUhelnik r = (5, 10, 15, 20); Popište chybu v následujícím kódu: double x = Ucet(5, "Jarmila", 10).getStav(); Popište chybu v následujících dvou řádcích kódu: Ucet ucet; ucet.vloz(10000); Přepiště následující výraz pomocí matematického zápisu: obsah = 4 * Math.PI * Math.pow(r , 3) / 3; Která z následujících tříd je neměnná (read only): String java.util.Random java.util.ArrayList
Jednou z vlastností objektově orientovaných jazyků je posílání zpráv, které se v Javě obvykle realizuje přes volání metod. Kdy se v Javě kontroluje, zda příjemce typ poslané zprávy zná? Napište aspoň tři varianty příkazu pro přičtení 1 k proměnné x typu int. Jaký počáteční obsah doplní překladač do následujících datových atributů? private int cislo; private boolean noveCislo; private char operator; K čemu se používá příkaz přiřazení? Jak se zapisuje v Javě? Jak zakreslíte typ enum v diagramu tříd? K čemu se používá metoda System.exit() ? Lze v Javě dědit konstruktory mezi třídami? Co to je Java virtual machine? Co to je konzole? Popište speciální význam escape znaku \ při psaní znakových řetězců v Javě. Jaký je význam odkazu this. Jaký význam má použití klíčového slova final v deklaraci proměnné. Popište podobnost a rozdíly při přiřazování pomocí přiřazovacího příkazu ( = ) primitivních a referenčních typů. Popište rozdíl mezi operátorem == a metodou equals() při porovnávání referenčních typů. Napište jednoduchá pravidla pro výběr příkazu cyklu, tj. kdy použít for a kdy while. Co je to nekonečný cyklus? Co je to vnořený cyklus? Napište příklad situace, kdy se vnořený cyklus typicky používá. Co označuje pojem nepojmenovaný balíček (noname package)? Popište aspoň dvě rozdílné situace, kdy se používá klíčové slovo super. Popište aspoň dvě odlišné situace, kdy se používá klíčové slovo this. Které modifikátory přístupu lze použít u datových atributů? Které modifikátory přístupu lze použít u statických atributů (statických proměnných)? Které lze použít u statických atributů, které jsou též final? Které modifikátory přístupu je možné použít u metod instancí? Lze všechny použít i u statických metod? Které z následujících výroků jsou pravdivé o balíčcích (packages) v Javě: • V jednom balíčku může být více tříd stejného jména. • Balíčky slouží pro vytváření jmenných prostorů v Javě, tj. v různých balíčcích mohou být třídy stejného jména. • Balíčky se používají k seskupování tříd pro posílání zpráv – je možné poslat zprávu všem třídám v jednom balíčku. • Balíčky se používají k seskupování instancí – je možné poslat zprávu všem instancím z jednoho balíčku.
Které z následujících prvků mohou být součástí hlavičky metody: • deklarace lokálních proměnných, • typ návratové hodnoty, • modifikátory přístupu, • modifikátor final, • příkazy. Vyberte pravdivé výroky o metodách (nemluvíme o konstruktorech), které nevracejí žádnou návratovou hodnotu: • taková metoda musí být veřejná, • taková metoda nesmí obsahovat příkaz return, • taková metoda musí obsahovat příkaz return, • návratový typ musí být specifikován slovem void, Vyberte pravdivé výroky o formálních parametrech metody: • v deklaraci formálního parametru musí být vždy uveden typ, • v deklaraci formálního parametru může být uvedena defaultní hodnota (např. int hodnota = 4), • u formálního parametru metody mohou být uvedeny modifikátory přístupu, • formální parametr metody může být označen modifikátorem final. Jaké modifikátory přístupu lze použít v deklaraci metod v rozhraní? Které lze použít u metod předepsaných rozhraním ve třídě, která implementuje rozhraní? Napište koncovky následujících souborů (pokud na koncovce nezávisí, tak uveďte hodnotu libovolná): - soubor se zdrojovým textem programu v Javě, - soubor vytvořený překladačem při úspěšném překladu zdrojového programu v Javě - soubor se zdrojovým textem deklarace rozhraní v Javě, - soubor se zdrojovým textem výčtového typu (enum) v Javě. Popište aspoň dvě situace, ve kterých se v Javě používají složené závorky. Popište aspoň tři situace, ve kterých se v Javě používají kulaté závorky. Popište dvě situace, ve kterých se v Javě používají hranaté závorky. Zkuste vysvětlit rozdíl mezi skutečným a formálním parametrem metody. Popište význam balíčku (package) v Javě? Vysvětlete rozdíl mezi deklarací a inicializací datového atributu. Může být statická proměnná deklarována uvnitř metody (tj. lze použít modifikátor static u lokálních proměnných)? Kolik může mít třída konstruktorů? Jak se od sebe odliší? Pokud zdrojovém kódu třídy neuvedu konstruktor, bude mít tato třída konstruktor? Pokud ano, uveďte co bude jeho obsahem? Mohou se konstruktoryv Javě překrývat (overriding)? Pokud ne, tak napište důvod. Pokud ano, tak napište příklad. Mohou se konstruktory v Javě přetěžovat (overloading)? Pokud ne, tak napište důvod. Pokud ano, tak napište příklad. Záleží na pořadí klauzulí import? Pokud ano, napište proč. K čemu se využívají literály u číselných primitivních datových typů? Proč existují v Javě obalové třídy k primitivním datovým typům? K čemu se používají statické atributy (proměnné třídy)? Je statický atribut třídy s modifikátorem private dostupný z instancí této třídy? Zdůvodněte.
Jaký význam má modifikátor final u parametru metody? Jaký význam má modifikátor final u lokální proměnné (proměnné deklarované uvnitř metody)? Popište jednotlivé části výrazu System.out.println("výsledky:"), tj. co je System, co je out, co je println, co je "výsledky:". Vyberte přípustné deklarace metody main jako vstupního bodu aplikace. U nesprávných popište chybu. public static void main (String [] args) public static void main (String [] parametry) public static void main () public static void main (String args) Co označuje pojem escape znak u řetězců? Lze použít escape znaky i u typu znak? Co označuje pojem regulární výraz? Jaké jsou výhody tříd StringBuffer a StringBuilder proti používání třídy String? Nechť třída Predek má tyto dva konstruktory: Predek(int cislo) Predek(String retezec) Může být v potomkovi implicitní konstruktor (konstruktor doplněný překladačem)? Pokud ne, zdůvodněte. Lze z jednoho konstruktoru volat konstruktor předka (přes super) i jiný konstruktor stejné třídy (přes this)? Pokud ano, uveďte příklad. Může mít některá Vaše třída v Javě konstruktor, ze kterého by se nevolal jiný konstruktor? Vysvětlete svůj názor. Popište rozdíl významu modifikátoru protected od ostatních možností přístupu k prvkům. Může nějaká třída implementovat rozhraní (tj. má ho v hlavičce) a současně nemít implementaci metod uvedených v rozhraní? Pokud ano, vysvětlete. Může abstraktní třída implementovat rozhraní? Pokud ne, vysvětlete proč. Napište příklad přetypování referenčních typů. Jaké jsou důvody pro používání dědičnosti? Vysvětlete tvrzení, že dědičnost porušuje zapouzdření. Prohlédněte si tento kód: final int cislo; cislo = 5; Která z následujících variant je správná: • bude chyba při překladu, • vznikne chyba (výjimka) při běhu programu, • nevznikne žádná chyba, v proměnné cislo bude hodnota 0 • nevznikne žádná chyba, v proměnné cislo bude hodnota 5 Následující příkazy if jsou chybně. Popište u každého z nich chyby: • if castka > 0 then System.out.println("částka je :" + castka); • if (1 + x > Math.pow(x , Math.sqrt(2)) y = y + 2; • if (x = 1) y++; else if (x = 2) y = y + 2; • if (1 <= x <= 10) System.out.println(x);
Popište rozdíl mezi s = 0; x =1; y = 1; if (x > 0) { s++; } if (y > 0) { s++; } a s = 0; x = 1; y = 1; if (x > 0) { s++; } else { if (y > 0) s++; } Co je chybně v následujícím kódu: Ucet ucet; .... if (ucet.equals(null)) { ucet = new Ucet(1, "Jarmila", 10); } Kolikrát se provede tělo jednotlivých následujících cyklů (předpokládejte, že uvnitř těla nejsou příkazy break, continue apod.): for (int i = 1; i <= 10; i++) ... for (int i = 0; i < 10; i++) ... for (int i = 10; i > 0; i--) ... for (int i = 10; i>= 10; i++) ... for (int i = 0; i <= 10; i = i + 2) ... Přepište následující cyklus do cyklu while int soucet = 0; for (int i = 1; i <= 10; i++) { soucet = soucet + i; } Nechť třída Trida implementuje dvě rozhraní Rozhr1 a Rozhr2. V kterých z následujících řádků vznikne výjimka a proč: Trida instance1 = new Trida(); Rozhr1 rozhr1 = instance1; Rozhr2 rozhr2 = (Rozhr2) rozhr1; Trida instance2 = (Trida) rozhr1; Nechť identifikátor emanuel obsahuje odkaz na instanci třídy Motyl, která implementuje rozhraní ObyvatelLouky. Které z následujících podmínek vrátí true? emanuel instanceof Motyl emanuel instanceof Serializable emanuel instanceof Cloneable emanuel instanceof ObyvatelLouky emanuel instanceof Object Nechť třída BigMac je potomkem třídy Hamburger. Které z přiřazení v následující sekvenci příkazů jsou legální (tj. přeloží se bez chyby): Hamburger x = new Hamburger(); BigMac y = new BigMac(); x = y; y = x; y = new Hamburger(); x = new BigMac();
Které z následujících výroků jsou pravdivé. U nepravdivých napište důvod. - Pokud se v Javě deklaruje proměnná, musí se vždy uvést typ. - V Javě jsou identifikátory number a Number identické. - Aritmetické operátory +, -, *, / a % mají stejnou prioritu. - Kulaté závorky v aritmetickém výrazu ovlivňují pořadí vyhodnocování jednotlivých částí výrazu. - Aritmetický výraz bez závorek se vyhodnocuje zleva doprava. Najděte a opravte chyby v následujících třech výrazech (příkazech): if ( cislo < 7 ) ; System.out.println("cislo je menší než 7"); if ( cislo => 7 ) System.out.println("cislo je větší nebo rovno 7"); if ( cislo % 7 ) System.out.println("cislo je dělitelné 7"); Co je špatného na následujícím cyklu while: suma=0; z=5; while ( z >= 0 ) { suma += z; } Které z následujících výroků jsou pravdivé? U nepravdivých napište důvod. - V příkazu switch musí být vždy uvedena větev default - Příkaz break je povinný v poslední větvi case příkazu switch. - Výraz ( x > y && a < b ) je pravdivý, pokud je buď x > y pravdivé nebo pokud je a < b pravdivé. Najděte a opravte chyby v následujících částech kódu: a) následující kód by měl vypsat čísla od 1 do 10: n = 1; while ( n < 10 ) { System.out.println( n++ ); } b) následující kód by měl vypsat lichá čísla od 19 do 1: for ( i = 19; i >= 1; i += 2 ) { System.out.println( i ); } Napište statickou metodu fahrenheit, která bude převádět stupně dle stupnice Celsiovy na stupně dle Fahrenheitovy stupnice. Parametrem bude počet stupňu dle Celsiovy stupnice. Vzorec na převod stupňů je následující: F = 9.0 / 5.0 * C + 32 Uveďte aspoň dvě jazykové konstrukce Javy, které nelze uvést uvnitř metody. Uveďte ukázku kódu, ve kterém se uplatní autoboxing. Jaký je rozdíl mezi rozhraním Comparable a Comparator? Jaké jsou nevýhody použití pojmenovaných konstant např. pro výjádření dnů v týdnu v porovnání s použitím typu enum? Chceme vyjádřit seznam přípustných hodnot (např. dnů v týdnu). Proč je použití typu enum pro tento účel typově bezpečné na rozdíl od použití pojmenovaných konstant? Popište význam metody toString() u třídy Object a u jejich potomků? Popište význam metody equals() u třídy Object a u jejich potomků? Jaký má význam metoda hashCode() u třídy Object a u jejich potomků? Kdy se používá metoda finalize() třídy Object či jejich potomků?
Někdy se uvádí, že rozhraní je v podstatě stejné jako abstraktní třída, která má pouze abstraktní metody. Vysvětlete, v čem se tyto dvě situace v Javě liší. Může nastat chyba překročení hranice pole u seznamů (instancí třídy List)? Co označuje pojem index u seznamů a u polí? V jaké situaci dojde k překročení hranice pole (tj. vznikne výjimka ArrayIndexOutOfBoundException). Napište část kódu, ve kterém se překročí hranice pole (tj. vznikne ArrayIndexOutOfBoundException). Které z následujících výroků jsou pravdivé: • Všechny prvky pole jsou stejného typu a jeho podtypů • Indexem v poli musí být celé číslo. • Pole nemůže obsahovat řetězce jako prvky pole. • Pole nemůže používat řetězce jako indexy. • Dvourozměrné pole musí mít stejný počet řádek, jako má sloupců. Které z následujících výroků o seznamech (implementace rozhraní List) jsou pravdivé: • Všechny prvky seznamu jsou stejného typu a jeho podtypů • Indexem pro přístup k prvku seznamu musí být celé číslo. • Seznam nemůže obsahovat řetězce jako prvky pole. • Seznam nemůže používat řetězce jako indexy. • Seznam může jako prvky obsahovat instance seznamů. Které z následujících výroků o polích jsou pravdivé: • Pole může být návratovým typem metody. • Pomocí metody lze změnit velikost pole. • Pokud pole obsahuje instance nějaké třídy, musí být v každém políčku umístěn odkaz na jinou instanci. U kterých datových struktur lze používat indexy? Které datové struktury je možné procházet pomocí klasického cyklu for s řídící proměnnou, podmínkou a krokem? V čem se liší mapy od kolekcí? Co je chybně v následujícím kódu: double[] data = new double[10]; for (int i = 1; i <= 10; i++) { data[i] = i * i; } Může mapa obsahovat dva různé klíče odkazující na stejnou hodnotu (stejnou instanci)? Může mapa obsahovat dvě různé hodnoty ke stejnému klíči? Popište rozdíly mezi kolekcemi a poli v Javě. Popište rozdíly mezi seznamy (implementacemi rozhraní List) a množinami (implementacemi rozhraní Set). Máte pole s pěti prvky. Jak můžete z pole vymazat prvek s indexem 2?
Obsah trojúhelníka se dá vypočítat pomocí vzorce
S=
ab sin(γ ) 2
Přepište tento vzorec do programového kódu. Nechť je proměnná x typu double. Jaký je rozdíl mezi výsledky následujících výrazů: (int) x; (int) (x + 0.5);
Popište, co je uloženo v proměnných y a t v následujícím kódu (kód lze přeložit, proměnné jsou odpovídajících typů). Jakého typu musí být proměnné y a t x = 2; y = x + 2; s = "2"; t = s + s; Setřiďte primitivní datové typy pro čísla dle maximální velikosti ukládané hodnoty (od nejmenší k největší): byte, double, float, int, long, short. Co vypíše následující kód: System.out.println("*\n**\n***\n****\n*****"); Napište příklad kódu, ve kterém dojde k přetečení celého čísla. Popište rozdíly mezi následujícími výrazy: 2 2.0 '2' "2" "2.0" Když zkopírujete odkaz na instanci třídy Ucet, budou oba identifikátory odkazovat na stejnou instanci. Přes oba identifikátory můžete měnit obsah (datové atributy) této jedné instance (pomocí volání metod). Platí toto i pro instance třídy String? V čem se liší přetypování instance (Ucet)x od přetypování celého čísla (int)cislo ? Vznikne v následujícím kódu výjimka ArithmeticException z důvodu dělení nulou? Zdůvodněte. int cislo; int vysledek = cislo / 0; Vznikne v následujícím kódu výjimka ArithmeticException z důvodu dělení nulou? Zdůvodněte. double cislo; double vysledek = cislo / 0; Vznikne v následujícím kódu výjimka ArithmeticException z důvodu dělení nulou? Zdůvodněte. int cislo; double vysledek = cislo / 0; Uveďte příklad kódu, ve kterém se musí použít přetypování u primitivních datových typů. Máte celé číslo (např. 23456). Napište kód, pomocí kterého získáte první číslici (tj. číslici 2), aniž byste převedli číslo na řetězec. Máte celé číslo (např. 23456). Napište kód, pomocí kterého získáte poslední číslici (tj. číslici 6), aniž byste převedli číslo na řetězec. Nechť jsou deklarovány následující proměnné: int m = 18; int n = 4; String s = "Hello"; String t = "World"; Jaký bude výsledek následujících výrazů: •s+t •s+n • s.substring(1, 3) • s.length() + t.length() Máme matematický vzorec y=ax3 + 7. Které z následujících výrazů v Javě odpovídají tomuto vzorci: y = a * x * x * x + 7; y = a * x * x * ( x + 7); y = ( a * x ) * x * ( x + 7 ); y=(a*x)*x*x+7; y = a * x * ( x * x + 7 ); y = a * ( x * x * x ) + 7;
Nakreslete diagram tříd pro následující třídy a rozhraní: public class Gamma extends Delta implements Epsilon { } public interface Epsilon { } public interface Beta { } public class Alpha extends Gamma implements Beta { } public class Delta { } Jaká je chyba v následujícím kódu? Jak by jste ji opravili? String text1 = "1. verze"; String text2 = "2. verze"; boolean vysledek = (text1 < text2); Jak bude vypadat výpis z následujícího programu: for (int i=0; i < 6; i++) { for (int j=0; j< i; j++) { System.out.print("*"); } System.out.println(); } Nechť máme nadeklarovanou metodu: private double vratCislo() { .... } Při kterých z následujících použití ve stejné třídě vznikne chyba a proč: a) int cislo = vratCislo(); b) double cislo = vratCislo(); c) vratCislo(); d) String cislo = vratCislo(); Proč se nemusí v hlavičce metody uvádět, že v metodě může vzniknout výjimka NullPointerException? Co může být uvedeno jako parametr příkazu throw ? Je instance výjimky vždycky stejného typu, jako typ uvedený v klauzuli catch, která výjimku odchytne? Jaký je rozdíl mezi kontrolovanou a nekontrolovanou výjimkou? Jaký je význam klauzule finally při odchytávání výjimek? Jak mohou vznikat výjimky? Může je vyvolat programátor? Co označuje pojem "předání výjimky výš"? V kterých situacích by se měla používat výjimka IllegalArgumentException, kdy IllegalStateException? Popište pravidla pro používání malých a velkých písmen v identifikátorech v Javě. Vysvětlete, proč by na jednom řádku měl být pouze jeden příkaz. Výhody ukažte na příkladu. Vysvětlete, proč by se měl odsazovat kód v bloku. Výhody ukažte na příkladech. Jaké jsou možnosti kontroly správnosti kódu? Uveďte příklad umístění ladících výpisů do kódu.
Jaké má výhody debugování kódu pro hledání chyb? Jaké má nevýhody? K čemu se používají při debugování kódu zarážky (breakpoints)? Jaké jsou výhody jednotkového testování (např. pomocí JUnit) v porovnání s umisťováním ladících výpisů do kódu a debugováním kódu? Co by mělo být uvedeno v dokumentačním komentáři ke třídě? Které značky pro javadoc se zde obvykle používají? Co by mělo být uvedeno v dokumentačním komentáři k metodě? Které značky pro javadoc se zde obvykle používají? Vysvětlete, proč by se z konstruktoru neměly volat překrytelné metody. Proč by se neměl používat prázdný blok příkazu catch? Pokud někdy dle Vás má smysl prázdný blok catch, zkuste uvést příklad takové situace. Jaké mohou nastat problémy, pokud se současně nepřekryjí metody equals a hashCode? Jak by se mohla zjednodušit následující metoda? private boolean jeKonecHry() { if (aktMistnost.getJmeno().equals("kancelar")) { return true; } else { return false; } } Při vytváření instancí typu Boolean se doporučuje používat Boolean.valueOf(podmínka) místo new Boolean(podmínka) Zkuste zdůvodnit toto doporučení. Proč by metody neměly být příliš dlouhé (např. více než 30 řádek)? Proč by neměly být příliš složité (příliš mnoho podmínek)? Co je špatné na porovnávání boolean proměnné s konstantami true či false - např. v následujícím kódu (proměnná prvniCislice je typu boolean): if (prvniCislice == true) Proč by v příkazu switch měla být uvedena klauzule (větev) default? Proč se nemají používat krátké názvy proměnných (3 a méně znaků) či krátké názvy metod? Zkuste uvést příklady, kdy má smysl použít krátký název proměnné či metody.