Charakterizujte procedurální programování

Charakterizujte objektově orientované programování

Charakterizujte funkcionální programování

Charakterizujte deklarativní programování

Charakterizujte aplikativní programování

Charakterizujte logické programování

Charakterizujte souběžné programování

Charakterizujte vizuální programování

Jaké jsou globální kritéria na programovací jazyk.

Hlediska ovlivňující spolehlivost prog. jazyka.

Hlediska ovlivňující efektivitu prog. jazyka.

Hlediska ovlivňující čitelnost a vyjadřovací schopnost prog. jazyka.

Definujte pojmy syntax, sémantika programovacího jazyka.

Definujte pojem úplnost jazyka v Turingově smyslu.

§      Zapište v BNF tvar příkazu.

§      Zapište syntaktickým diagramem tvar příkazu.

Objasněte pojmy statická a dynamická sémantika.

Jaké druhy chyb v programu rozlišujeme.

§      Jaké druhy chyb a ve které fázi je schopen nalézt překladač.

§      Formulujte Amdahlův zákon.

§      Zjistěte možné urychlení výpočtu při zadaných údajích o úsecích a jejich urychlení

§      Popište rozdíl mezi fyzickým paralelismem, logickým paralelismem a kvaziparalelismem

§      Jaké specifické problémy vznikají v paralelně prováděných výpočtech, popište je.

Popište principy možných způsobů komunikace procesů.

V jakých stavech se může nacházet proces a jaké jsou důvody přechodů mezi stavy.

Popište princip semaforu.

Popište princip monitoru.

Popište princip synchronizace pomocí předávání zpráv.

Zjistěte možné urychlení výpočtu při zadaných údajích o úsecích a jejich urychlení

Charakterizujte kritické sekce programu, uveďte příklad.

Definujte v Javě třídu, jejíž objekty mohou obsahovat paralelně prováděné metody.

Jmenujte základní metody a) třídy Thread, b) rozhraní Runnable.

Proč Java zavádí možnost odvozovat objekty s vlákny implementací rozhranní Runnable.

Popište jednotlivé akce, které je nutné provést v programu při vytváření a spuštění vlákna a)děděním z třídy Thread, b)implementací Runnable

Jakým způsobem lze v Javě ovlivnit prioritu provádění vlákna. Uveďte příklad.

V jakých stavech se může nacházet vlákno Javy.

Zapište příkaz, který zjistí zda vlákno v1 běží

Zapište příkaz, pozastavující vlákno v2 dokud neskončí činnost vlákno v1.

Jakým příkazem a jakým mechanismem dává vlákno najevo, že čeká na skončení vlákna vl

Vysvětlete způsob chování synchronized metod Javy.

Jaký je rozdíl v efektu příkazu Javy yield( ), sleep(200) a wait(200)

Popište účel a způsob použití příkazu notify() a notifyAll()

Popište efekt metody Javy interrupt()

Jaký je tvar a účinek synchronized příkazu Javy.

Popište metody suspend, resume a stop Javy. Proč nejsou doporučované?.

Jaký je rozdíl mezi uživatelskými a démon vlákny?.

Zapište konstrukci a)zjišťující, je-li vlákno démonem, b)určující, že má být démonem..

Zapište konstrukci, která začlení vlákno do skupiny vláken.

Jaké jsou důvody, pro využívání synchronizačních prostředků z balíku conccurent?.

§      Popište základní prostředky třídy ReentrantLock z z balíku conccurent.

§      Popište základní prostředky třídy CyclicBarrier z balíku conccurent

§      Popište základní prostředky třídy CounDouwnLatch z balíku conccurent

Charakterizujte SIMD a MIMD architekturu.

Uveďte charakteristické vlastnosti skriptovacích jazyků.

Jmenujte oblasti použití skriptovacích jazyků.

§      Jaké datové typy označuje Python jako sekvence, uveďte příklady zaváděných operací

§      Jednoduché příklady na příkazy Pythonu se seznamy.

§      Jednoduché příklady na příkazy Pythonu s množinami

Jednoduché příklady na příkazy Pythonu s n-ticemi

Jednoduché příklady na příkazy Pythonu se slovníky.

Popište hlavní odlišnosti OOP v Javě a Pythonu.

Jak řeší Python problém násobné dědičnosti

Charakterizujte perzistentní objekty a možnost jejich vytváření

K čemu slouží a jak funguje destruktor Pythonu.

Charakterizujte událostmi řízené programování

Jak lze s využitím Tkinter implementovat čekací smyčku.

Jmenujte alespoň 6 grafických prvků Tkinter

Jaké vlastnosti má well-formed XML dokument

Charakterizujte DTD..

Jaké vlastnosti definuje XSD..

Charakterizujte relační databázi

Co to je a k čemu slouží primární klíč.

Uveďte tvar příkazu SELECT

Uveďte tvar příkazu INSER

Uveďte tvar příkazu DELETE

Uveďte tvar příkazu UPDATE

Jakou konstrukcí umožní modul pyodbc provádět SQL příkazy.

Co je to databázový kurzor, k čemu slouží

Popište sémantiku metod fetchone, fetchmany, fetchall

Popište sémantiku metody commit

Vysvětlete využití INNER JOIN fráze v příkazu SELECT.

Definujte slovně termy jazyka Prolog.

Co jsou atomy Prologu.

Objasněte pojem anonymní proměnná Prologu a její vlastnosti

Popište princip rezoluce Prologu.

Popište princip unifikace Prologu.

Popište způsob plnění cílů v Prologu.

Jak probíhá návrat při nesplnění cíle v Prologu.

Vysvětlete mechanismus působení predikátu řezu.

Charakterizujte „čisté výrazy

Popište Church-Roserovu vlastnost výrazů.

Definujte S-Výrazy Lispu.

Popište základní cyklus vyhodnocování lipovského programu.

Jaké jsou elementární funkce Lispu a jejich sémantika.

Popište sémantiku lispovské funkce COND..

Popište tvar a účinek lispovské funkce DEFUN.

Definujte tvar a využití lambda výrazů.

Co to jsou funkcionály, popište některý.

Objasněte rozdíl mezi „klíčovými slovy „ a „předdefinovanými slovy“

Objasněte rozdíl mezi dobou existence a rozsahem platnosti proměnné.

Uveďte příčiny vzniku synonym (alias) v programech.

Popište princip statické a dynamické vazby jména proměnné s typem..

Popište princip výhody a nevýhody statické a dynamické vazby proměnné s adresou.

Popišre rozdíl mezi statickým a dynamickým rozsahem platnosti proměnné.

Definujte pojem silný typový systém programovacího jazyka.

Definujte pojmy strukturální a jmenná kompatibilita typů.

Definujte pojmy „literál“ a „manifestová konstanta“

Jaké rozlišujeme druhy konstant podle doby jejich určení. Popište je.

Jaké typy označujeme jako ordinální

Popište jaké typy označujeme jako uniony.

Uveďte, jakým způsobem vzniká dangling pointer

Uveďte, jakým způsobem vzniká ztracená proměnná z haldy.

Popište pojmy precedence, asociativita a arita operátorů ve výrazech.

Jaká jsou pozitiva a negativa příkazů skoku.

Které vlastnosti jsou důležité pro příkazy cyklů v programovacích jazycích.

Jmenujte kriteria, dle kterých lze hodnotit vlastnosti podprogramů programovacích jazyků.

K čemu slouží a co obsahují aktivační záznamy podprogramů a funkcí

Objasněte rozdíl mezi statickou a dynamickou vazbou metod s místem jejich volání

Uveďte jakou vazbu metod implicitně užívá Java, Obj.Pascal, C++, Python.

Charakterizujte procedurální programování

*          jako kucharka

*          popisuje vypocet pomoci poslounosti prikazu a urcuje presny postup, jak danou ulohu resit

*          sada promennych, která v zavislosti na vyhodnoceni podminek meni svuj stav

*          strukturovane

*          modularni

Charakterizujte objektově orientované programování

*          znovupouzitelnost

*          program je mnozina objektu

*          objekty maji stav, jmeno, chovani

*          predavaji si zpravy

*          zapouzdrenost, dedicnost, polymorfismus

Charakterizujte funkcionální programování

*                   vypocet rizen vyhodnocovanim matematickych funkci

*                   LISP, Erlang, Haskell

Výpočtem funkcionálního programu je posloupnost vzájemně ekvivalentních výrazů, které se postupně zjednodušují. Výsledkem výpočtu je výraz v normální formě, tedy dále nezjednodušitelný. Program je chápán jako jedna funkce obsahující vstupní parametry mající jediný výstup. Tato funkce pak může být dále rozložitelná na podfunkce.

Charakterizujte deklarativní programování

*          popis cile, algoritmus stanovi az interpret, programator se jim nezabyva

*          casto nemoznost siroke optimalizace programu takovym zpusobem, kterym potrebujeme

*          rekurze, vyssi naroky na programatora

*       funkcionalni(Lisp)

*       logicke(Prolog)

*       programovani ohranicenimi

Charakterizujte aplikativní programování

*          základem je funkce, ta se aplikuje na argumenty a spočte se jednoznačný výsledek

Charakterizujte logické programování

*          matematicka logika v programovani

*          programator jen definuje logicke formule

*          generator je zodpovedny za vyreseni problemu

*          AI, zpracovani prirozene reci, expertni systemy

*          prolog

Charakterizujte souběžné programování

*                   program je navrzen jako kolekce interagujicich procesu

*                   jeden procesor x vice procesoru, sdilena pamet x predavani zprav,

Charakterizujte vizuální programování

*                   specifikuje program interaktivne pomoci grafickych prvku (ikon, formularu).

Jaké jsou globální kritéria na programovací jazyk

*                   Spolehlivost

*                   Efektivita - prekladu, vypoctu

*                   Strojova nezavislost

*                   Citelnost a vyjadrovaci schopnosti

*                   Syntax a semantika

*                   Uplnost v turingove smyslu

Hlediska ovlivňující spolehlivost prog. jazyka

*                   typovovani - typovane (definuji mnozinu typu dat, na ktere je operace aplikovatelna). Netypovane (vsechny operace nad jakymikoliv daty - ASEMBLER)

*                   staticke/dynamicke typovani - staticke (vsechny vyrazy maji urceny typ pred spustenim programu). dynamicke (az pri behu programu)

*                   slabe x silne typovani. Slabe (lze s jednim typem pracovat jako s typem jinym. Retezec x cislo). Silne (zakazuje s jednim typem pracovat jako s typem jinym => chyba).

Hlediska ovlivňující efektivitu prog. jazyka

Ef. Překladu, Ef. výpočtu

Hlediska ovlivňující čitelnost a vyjadřovací schopnost prog. jazyka

*                   jednoduchost (c++, ++c; x+=1; ...)

*                   ortogonalita (mala mnozina primitivnich konstrukci, ktere se daji skladat do vetsich celku)

*                   strukturovane prikazy

*                   citelnost x citelnost zapisu

Definujte pojmy syntax, sémantika programovacího jazyka

*                   syntax - forma ci struktura vyrazu, prikazu a programovych jednotek

*                   semantika - vyznam vyrazu, prikazu,..

Definujte pojem úplnost jazyka v Turingově smyslu

*                   obsahuje takovou mnozinu opreaci, ze jim lze popsat libovolny algoritmus.


Co je potřebné pro Turingovu úplnost?

*                   číselná aritmetika

*                   číselné proměnné spolu se sekvenčně prováděnými příkazy

*                   cykly while

*                   přiřazení

*       Zapište v BNF tvar příkazu

*       <program> → <seznam deklaraci> ; <prikazy>

*       <seznam deklaraci> → <deklarace> | <deklarace>;<seznam deklaraci>       //svislítko znamená nebo

*       <deklarace> → <spec. typu> <sez. promennych>

*       Zapište syntaktickým diagramem tvar příkazu

*       DP.jpg

Objasněte pojmy statická a dynamická sémantika

*                   semantika studuje a popisuje vyznam vyrazu/programu.

*                   staticka semantika - v dobe prekladu

*                   dynamicka - v dobe behu

*                   x += y; x := x+y; let x = x+y (jina syntax, stejna semantika)

Jaké druhy chyb v programu rozlišujeme

*                   lexikalni (napr. nedovoleny znak)

*                   syntakticke (chyba ve strukture)

*                   staticke semantiky - chyba v typech, nedefinovana promenna

*                   dynamicke semantiky - deleni nulou, neodhalitelne pri prekladu

*                   logicke

*       Jaké druhy chyb a ve které fázi je schopen nalézt překladač

*       Při překladu: lexikální a syntaktické chyby

*       Před výpočtem: chyby statické sémantiky

*       Překladač nemůže při překladu nalézt chyby v dynamické sémantice. Ty se projeví až při výpočtu

*       Žádný překladač nemůže hlásit logické chyby

*       Formulujte Amdahlův zákon

*       Amdahluv zakon urcuje urychleni vypoctu pri uziti vice procesoru

*      
%5CLARGE%5C%21%5Cfrac%7B1%7D%7B%5Csum_%7Bk%3D1..n%7D%7B%5Cfrac%7BPk%7D%7BSk%7D%7D%7D.gif

*        

*       Pk .. % instrukci, ktery lze urychlit

*       Sk .. % multiplikator urychleni

*       n .. pocet ruznych useku programu

*       k .. index useku

*       Zjistěte možné urychlení výpočtu při zadaných údajích o úsecích a jejich urychlení

*       Př. úseky:

*       Procent instrukcí, které lze urychlit:

*       P1 = 11 %, P2 = 48%, P3 = 23%, P4 = 18%

*       Multiplikátory urychlení:

*       S1 =1; S2 = 1,6; S3 = 20; S4 = 5

*       Urychlení je: 1 / (0,11/1 + 0,48/1,6 + 0,23/20 + 0,18/5) ≈ 2,19

*       Popište rozdíl mezi fyzickým paralelismem, logickým paralelismem a kvaziparalelismem

*       Fyzický paralelismus (má více procesorů pro více procesů)

*       Logický paralelismus (time-sharing jednoho procesoru, v programu je více procesů)

*       Kvaziparalelismus( kvazi=zdánlivě, př. korutiny v některých jazycích)

*       Korutiny – speciální druh podprogramů, kdy volající a volaný jsou si rovni (symetrie), mají více vstupních bodů a zachovávají svůj stav mezi aktivacemi.

*       Jaké specifické problémy vznikají v paralelně prováděných výpočtech, popište je

*       rychlostní závislost

*       uvíznutí (vzájemné neuvolnění prostředků pro jiného)

*       vyhladovění (obdržení příliš krátkého času k zajištění progresu)

*       livelock (obdoba uvíznutí, ale nejsou blokovány čekáním, zaměstnávají se navzájem (afteryou - afteryou efekt)

 

Popište principy možných způsobů komunikace procesů

Přes sdílenou paměť (Java, C#) - musí se zamykat přístup k paměti

Předáváním zpráv (Occam, Ada) - vyžaduje potvrzení o přijetí zprávy

V jakých stavech se může nacházet proces a jaké jsou důvody přechodů mezi stavy

1. Stav probihajici (running) - procesu je pridelen procesor a prave se provadi prislusne programy.

2. Stav cekajici (waiting) - proces ceka na urcitou udalost, napr. dokonceni I/O operace.

3. Stav pripraven (ready) - proces je pripraven k vykonani a ceka pouze na prideleni procesoru.

Tyto 3 hlavni procesy nestaci pro uplny popis pohybu ulohy v OS. Pro uplnost uvedme min. jeste dalsi 3:

4. Stav predana (submit) - uzivatel predal svou ulohu systemu a ten na ni musi reagovat. Stav mirne archaicky, spocivajici napr. ve vlozeni sady dernych stitku do ctecky.

5. Stav prijata (hold) - uloha je na disku pocitace ve vnitrni reprezentaci. Ocekava prideleni prostredku.

6. Stav ukoncena (complete) - vypocet ulohy skoncil a vsechny pridelene prostredky jsou uvolneny k dalsimu pouziti.

 

Popište princip semaforu

obdobná funkce jako klíč od WC nebo návěštidlo železnice (jen jeden může do sdíleného místa).


Semafor = datová struktura obsahující čítač a frontu pro ukládání deskriptorů/úkolů/procesů/vláken. Má dvě atomické operace zaber a uvolni (P a V). Je použitelný jak pro soutěžící, tak pro spolupracující úkoly.

 

P(semafor)

if semafor == 1 then semafor = 0

else pozastav volajici proces a dej ho do fronty na semafor

V(semafor)

if fronta na semafor je prazdna then semafor = 1

else vyber prveho z fronty a aktivuj ho

Popište princip monitoru

Monitor je modul (v OOP objekt), nad jehož daty mohou být prováděny pouze v něm definované operace.

Provádí-li jeden z procesů některou monitorovou operaci, musí se ostatní procesy postavit do fronty, pokud rovněž chtějí provést některou monitorovou operaci.

Ve frontě čekají, dokud se monitor neuvolní a přijde na ně řada.


Monitor -programový modul zapouzdřující data spolu s procedurami, které s daty pracují. Procedury mají vlastnost, že vždy jen jeden úkol/vlákno může provádět monitorovou proceduru, ostatní čekají ve frontě. (pro Javu to probereme důkladněji)

Popište princip synchronizace pomocí předávání zpráv

proces předá zprávu druhému a druhý ji ale musí očekávat, Randes-vous v ADě, příklad hospoda číšník-host, číšník čeká na objednávku,…(Message Driven Bean)

Zjistěte možné urychlení výpočtu při zadaných údajích o úsecích a jejich urychlení

Př. úseky:

Procent instrukcí, které lze urychlit:

P1 = 11 %, P2 = 48%, P3 = 23%, P4 = 18%

Multiplikátory urychlení:

S1 =1; S2 = 1,6; S3 = 20; S4 = 5

Urychlení je: 1 / (0,11/1 + 0,48/1,6 + 0,23/20 + 0,18/5) ≈ 2,19

 

Charakterizujte kritické sekce programu, uveďte příklad

Kritická sekce programu se vyskytuje tam, kde dvě a více vláken pracuje nad stejnými daty.

Příklad: Máme dvě metody set() a get() a dvě vlákna. Jedno vlákno nastavuje nějaké hodnoty v metodě set(), vlákno druhé získává hodnoty z metody get(). Pokud by druhé vlákno získávalo hodnoty právě ve chvíli, kdy vlákno první hodnoty zapisuje, získáme data, kde budou nějaké hodnoty nové (již přepsané) a nějaké staré (ještě nepřepsané). A to je špatně.

Řešení: Pomocí monitoru (v Javě to znamená použití synchronized metod nebo bloků).

Definujte v Javě třídu, jejíž objekty mohou obsahovat paralelně prováděné metody

public class Vlakno extends Thread {

    public void run() {

       //příkazy

    }

}

Jmenujte základní metody a) třídy Thread, b) rozhraní Runnable

Třída Thread má řadu metod např.:

run() - je vždy přepsána v potomku Thread, udává činnost vlákna

start() - spustí vlákno (tj. metodu run) a volající start pak pokračuje ve výpočtu. Metoda run není přímo spustitelná

yield() - odevzdání zbytku přiděleného času a zařazení do fronty na procesor

sleep(milisec) - zablokování vlákna na daný časový interval

isAlive() - běží-li, vrací true, jinak false

join()

getPriority()

setPriority()

a další cca 20

Rozhraní Runnable má jen metodu run( )

Když uživatelova vlákna nepřepisují ostatní metody (musí přepsat jen run), upřednostňuje se runnable.

Proč Java zavádí možnost odvozovat objekty s vlákny implementací rozhranní Runnable

Hodně tříd potřebuje dědit (rozšiřovat) jinou třídu.

Příklad:

 public class Clock extends Applet implements Runnable {

   ...

 }

Java neumožňuje vícenásobnou dědičnost => použít rozhraní Runnable

Třída Thread definuje několik metod, které mohou být předefinovány odvozenou třídou. Jediná metoda, která musí být předefinována je metoda run() a to je právě ta, kterou vyžaduje rozhraní Runnable. Je dobré třídy rozšiřovat (tedy používat dědičnost) jen za účelem jejich modifikace. Proto, když nemáme v úmyslu rozšiřovat nic jiného než metodu run() je vhodnější použít rozhraní. V zásadě je to ale jedno:)

Popište jednotlivé akce, které je nutné provést v programu při vytváření a spuštění vlákna a)děděním z třídy Thread, b)implementací Runnable

A) Thread. Vytvoříme třídu MyThread která podědí od Thread. Překrejeme metodu run() vytvoříme instanci a spustíme metodou start()

B) Runnable Vytvoříme třídu MyThred která implementuje runnable Implementujeme metodu run() Vytvoříme instanci MyThread - MyThread my = new MyThread() Vytvoříme z ní vlákno Thread vlakno = new Thread(my) Spustíme metodou start().

 

Jakým způsobem lze v Javě ovlivnit prioritu provádění vlákna. Uveďte příklad

Priorita vláken = pravděpodobnost častosti získání času procesoru

Vysoká priorita = hodně času procesoru

Nízká priorita = méně času procesoru


Implicitně je přidělena priorita potomkovi jako má nadřízený process

Změnit lze prioritu metodou setPriority

final void setPriority(int cislo)

kde cislo musí být v intervalu Min_Priority ≤ cislo ≤ Max_Priority 1 . . 10 (konstanty Thread)

Norm_Priority = 5

Zjištění aktuální priority provedeme metodou final int getPriority( )

V jakých stavech se může nacházet vlákno Javy

stavy vláken:

nové (ještě nezačalo běžet)

připravené (nemá přidělený procesor)

běžící (má přidělený procesor)

blokované (čeká ve frontě na monitor)

čekající (provedlo volání např. Object.wait with no timeout,Thread.join with no timeout , či LockSupport.park)

časově_čekající (provedlo volání např. Thread.sleep, Object.wait with timeout, Thread.join with timeout, LockSupport.parkNanos, LockSupport.parkUntil)

mrtvé

Zapište příkaz, který zjistí zda vlákno v1 běží

if (v1.isAlive())  //vrací true, pokud vlákno není mrtvé, ale vlákno nemusí být právě prováděné

Zapište příkaz, pozastavující vlákno v2 dokud neskončí činnost vlákno v1

v2.yield(); // vlákno v2 předá řízení vláknu se stejnou prioritou (takže v1)

v1.join(); // dokud vlákno v1 nedoběhne, jiná vlákna nemohou běžet

Jakým příkazem a jakým mechanismem dává vlákno najevo, že čeká na skončení vlákna vl

v1.interupt(); //oznamuje v1, ze na nej cekame, predcasne ho probudi

Vysvětlete způsob chování synchronized metod Javy

uzamkne objekt pro který je volána, jiná vlákna pokoušející se použít synchr. metodu uzamčeného objektu musí čekat ve frontě, tím se zamezí interferenci vláken způsobující nekonzistentnosti paměti. Když proces opustí synchr. metodu, objekt se odemkn


Pokud je metoda synchronized tak předání řízení mezi vlákny nemůže nikdy nastat uvnitř této metody. Je to ošetření tzv. kritických sekcí programu.

Kritická sekce programu se vyskytuje tam, kde dvě a více vláken pracuje nad stejnými daty.

Jaký je rozdíl v efektu příkazu Javy yield( ), sleep(200) a wait(200)

yield() - vlákno se vzdává své činnosti a dobrovolně přenechává procesor vláknu se stejnou prioritou

sleep(200) - vlákno se uspí (převede do neběhuschopného stavu) na 200 ms, poté bude vlákno opět ve stavu běžícím

wait(200) - vlákno čeká (převede se do neběhuschopného stavu) 200 ms, může být probuzeno (převedeno do běžícího nebo běhuschopného stavu) metodami notify() nebo notifyAll()

pokud vlákno spí nebo čeká a je na něj zavolána metoda interrupt(), pak bude vyhozena výjimka InterruptedException

Popište účel a způsob použití příkazu notify() a notifyAll()

final void notify( ) - oživí vlákno z čela fronty čekajících na přístup k objektu

final void notifyAll( ) - oživí všechna vlákna nárokující si přístup k objektu, ta pak o přístup normálně soutěží (na základě priority nebo plánovacího algoritmu JVM)

Mohou být volány jen z vláken, které vlastní zámek (synchronized metod a příkazů), jsou děděny z třídy Object.

Popište efekt metody Javy interrupt()

Metada interrupt() - metoda ze třídy Thread, přeruší běh vlákna.

Pokud je vlákno v neběhuschopném stavu (např. uspané) a je na něj zavolána metoda interrupt() je "násilně probuzeno" a bude vyhozena výjimka InterruptedException

Jaký je tvar a účinek synchronized příkazu Javy

Můžeme mít buď synchronized metody nebo synchronized bloky.

Tvar:

   synchronized public void setHodnota(Object o) - hlavička synchronized metody

   synchronized public void getHodnota() - hlavička synchronized metody

Účinek: ošetření tzv. kritických sekcí, pokud je metoda synchronized pak má monitor a vlákno nikdy nemůže předat řízení uvnitř této metody.

 

Synchronized bloky

Tvar:

   synchronized(object) {

       //příkazy

   }

Účinek: monitor je nad určitým objektem (zde object).

 

Popište metody suspend, resume a stop Javy. Proč nejsou doporučované?

final void suspend( ) - pozastavení vlákna, kterému zašleme suspend

final void resume ( ) - obnovení vlákna, kterému zašleme resume

final void stop( ) - ukončení vlákna, kterému zašleme stop

Důvod zavržení - nebezpečné konstrukce, které snadno způsobí deadlock, když se aplikují na objekt, který je právě v monitoru.

Lze je nahradit bezpečnějšími konstrukcemi s wait a notify.

Jaký je rozdíl mezi uživatelskými a démon vlákny?

Uživatelská vlákna - pokud program používá jen tato vlákna, nemůže skončit dříve, než jsou všechna vlákna ukončena

Démon vlákna - pokud je v programu démon vlákno, program skončí bez ohledu na to, jestli toto vlákno doběhlo nebo ne

Zapište konstrukci a)zjišťující, je-li vlákno démonem, b)určující, že má být démonem

if (vlakno.isDaemon()) //zjištění, jestli je vlákno démon

vlakno.setDaemon(true);  // vlákno vlakno je nyní démon

Zapište konstrukci, která začlení vlákno do skupiny vláken

V rámci skupin lze např. určovat vláknům maximální prioritu nebo vlákna hromadně přerušovat. Do skupiny lze vlákno přidat jen v okamžiku jeho vytváření (skupina se předá jako parametr konstruktoru), později již změna není možná.

ThreadGroup tg = new ThreadGroup("network server threads"); // vytvoření skupiny

Runnable r = new Runnable() {

    public void run() {

       ...

    }

};

Thread t1 = new Thread(tg, r);  // přídání vlákna t1 do skupiny tg

Thread t2 = new Thread(tg, r);  // přídání vlákna t2 do skupiny tg

Jaké jsou důvody, pro využívání synchronizačních prostředků z balíku conccurent?

Vestavěná primitiva Javy nestačí k pohodlné synchronizaci protože:

*                   Neumožňují couvnout po pokusu o získání zámku, který je zabrán, po vypršení času, po který je vlákno ochotno čekat na uvolnění zámku. Tj. nedovolují provést alternativní činnost

*                   Nelze změnit sémantiku uzamčení s ohledem např. na reentrantnost, čtení versus psaní ochranu,

*                   Neřízený přístup k synchronizaci, každá metoda může použít blok synchronized na libovolný objekt synchronized ( referenceNaObjekt ) { // kritická sekce }

*                   Nelze získat zámek v jedné metodě a uvolnit ho v jiné.

*       Popište základní prostředky třídy ReentrantLock z z balíku conccurent.

*       Konstruktory :

*       ReentrantLock( ) ReentrantLock(boolean fair) instance s férovým chováním při true, nepředbíhá

 

*       Metody:

*       int getHoldCount() kolikrát aktuální vlákno žádalo o zámek

 

*       int getQueueLength() kolik vláken chce tento zámek

 

*       protected Thread getOwner() vrátí vlákno, které vlastní zámek, nebo null

 

*       boolean hasQueuedThread(Thread thread) ?čeká zadané vlákno na tento lock …

 

*       void lock() zabrání zámku, není-li volný musí čekat void unlock() uvolnění zámku

 

*       boolean tryLock() zabrání je-li volný, jinak může dělat něco jiného

 

*       boolean tryLock(long timeout, TimeUnit unit) zabrání s timeoutem

 

*       Použití:

*       1. RZRL používá lock a unlock k prostému uzamčení kritických sekcí manipulujících s kontem. Což funguje jako dřívější příklad.

 

*       2. RZL používá tryLock a umožňuje tím provádět náhradní činnost po dobu čekání na zámek.

*       Popište základní prostředky třídy CyclicBarrier z balíku conccurent

*       Dovoluje čekání množiny vláken na sebe navzájem před pokračováním výpočtu. Nazývá se cyklická, protože může být znovu použita po uvolnění čekajících vláken.
Obvykle je použita, když úloha je rozdělena na podúlohy takové, že každá z nich může být prováděna separátně.
Má dvě podoby:

*       CyclicBarrier(int účastníci) účastníci určují počet podúloh = vláken

 

*       CyclicBarrier(int účastníci, Runnable barierováAkce) akce se provede po spojení všech vláken, ale před jejich další exekucí

*       Má metody:

*       Metody:

*       await( ) čeká, až všechni účastníci vyvolají await na této bariéře

 

*       await(long timeout, TimeUnit unit) čeká, dokud buď všechny vyvolají await nebo nastane specifikovaný timeout

 

*       getNumberWaiting( ) vrací počet čekajících na bariéru

 

*       getParties( ) vrací počet účastníků procházejících touto bariérou isBroken( ) vrací

*       Popište základní prostředky třídy CounDouwnLatch z balíku conccurent

*       Použití třídy CountDownLatch
Synchronizační prostředek, který dovoluje vláknu/vláknům čekat až se dokončí operace v jiných vláknech. Inicializuje se s zadaným čítačem, který je součástí konstruktoru a funguje obdobně jako počet účastníků v CyclicBarrier konstruktoru.
Určuje, kolikrát musí být vyvolána metoda countDown. Po dosažení zadaného počtu jsou všechna vlákna čekající v důsledku vyvolání metody await uvolněna k exekuci.
Metody:

*       void await( ) způsobí čekání volajícího vlákna až do vynulování čítače

 

*       boolean await(long timeout, TimeUnit unit) čekání se ukončí i vyčerpáním času.

 

*       void countDown( ) dekrementuje čítač a při 0 uvolní všechna čekající vlákna.

 

*       long getCount( ) vrací hodnotu čítače

 

*       String toString( ) vrací řetězec identifikující závoru a její stav (čítač).

 

Charakterizujte SIMD a MIMD architekturu

SIMD - stejná instrukce běží současně na více procesorech na každém s jinými daty

MIMD - nezávislé pracující procesory, mohou být synchronizovány

Uveďte charakteristické vlastnosti skriptovacích jazyků

*                   Integrovaný překlad a výpočet

*                   Nízká režie a snadné použití (např. impl.deklarace)

*                   Zduřelá fukčnost ve specif. oblastech (např. řetězce a regul. výrazy)

*                   Není důležitá efektivita provedení (často se spustí je 1x)

*                   Nepřítomnost sekvence překlad-sestavení-zavedení

Jmenujte oblasti použití skriptovacích jazyků

*                   K vytváření aplikací z předpřipravených komponent

*                   K řízení aplikací, které mají programovatelný interface

*                   Ke psaní programů, je-li rychlost vývoje důležitější než efektivita výpočtu

*                   Jsou nástrojem i pro neprofesionální programátory

*                   Administrace systémů (sekvence shell příkazů ze souboru)

*                   Vzdálené řízení aplikací (dávkové jazyky)

*       Jaké datové typy označuje Python jako sekvence, uveďte příklady zaváděných operací

*       Sekvence jsou uspořádané množiny prvků

*       Zahrnují 8bitové řetězce, unikódové řetězce, seznamy a n-tice

*       Všechny sekvence S sdílí společnou množinu funkcí:

*          •len(S) počet prvků

*          •max(S) největší prvek

*          •min(S) nejmenší prvek

*          •x in S test přítomnosti x v S

*          •x not in S test nepřítomnosti

*          •S1 + S2 konkatenace dvou sekvencí

*          •tuple(s) konverze členů S na n-tici

*          •list(S) konverze S na seznam

*          •S*n nová sekvence tvořená n kopiemi S

*          •S[i] i-tý prvek S, počítá se od 0

*          •S[i:j] část sekvence S začínající i-tým prvkem až do j-tého bez něj

*       Příklad:

*            t = tuple('100') t = ('1', '0', '0')

*            l = list('100') l = ['1', '0', '0']

*       Jednoduché příklady na příkazy Pythonu se seznamy

*       append,připojuje svůj argument na konec seznamu

*       >>> seznam.append("neco")

*      
- extend(L) přidá na konec prvky seznamu L

*       - insert(i, x) vloží prvek i na pozici x (zkoušel jsem to na eryx.zcu.cz a argumenty to akceptuje obráceně - tedy insert (x, i) vloží prvek i na pozici x)

*       - remove(x) odstraní první výskyt prvku x v seznamu

*       - pop(i) odstraní prvek na pozici i a vrátí jeho hodnotu

*       - pop() odstraní poslední prvek a vrátí jeho hodnotu

*       - count(x) vrátí počet prvků s hodnotou x

*       - sort() seřadí prvky dle velikosti (modifikuje seznam), výsledek nevrací

*       - reverse() obrátí pořadí prvků

*        

*       Jednoduché příklady na příkazy Pythonu s množinami

*       Množiny nepatří mezi sekvence protože nejsou uspořádané. Jsou ale založeny na seznamech, prázdná množina je prázdný seznam

*       # Set je v modulu sets, od verze 2.5 je součástí jazyka jako set

*       >>> import sets

*       >>> M=sets.Set()                                  # Set provede převedení seznamu na množinu

*       >>> N=sets.Set(['a',2,3])

*       >>> O=sets.Set([1,2,3,4])

*       >>> U= N.union(O)

*       >>> U

*       Set(['a', 1, 2, 3, 4])

*       >>> U.intersection(N)

*       Set(['a', 2, 3])

*       >>> U.intersection(N) == N

*       True                                       

*       >>> sets.Set([2,3]).issubset(N)

*       True

*       >>> U.issuperset(N)

*       True

*       >>> 2 in O

*       True

*        

*        

*       >>> a = set('abracadabra')              # vytvoří množinu z řetězce

*       >>> 'z' in a                            # test na existenci prvku

*       False

*       >>> a                                   # samotná množina

*       set(['a', 'r', 'b', 'c', 'd'])

*       >>> .join(a)                          # převod zpět na řetězec

*       'arbcd'

*        

*       >>> b = set('alacazam')                 # vytvoří druhou množinu

*       >>> a - b                               # písmena, která jsou v a, ale ne v b

*       set(['r', 'd', 'b'])

*       >>> a | b                               # sloučení množin

*       set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])

*       >>> a & b                               # průnik množin

*       set(['a', 'c'])

*       >>> a ^ b                               # doplněk průniku množin

*       set(['r', 'd', 'b', 'm', 'z', 'l'])

*        

*       >>> a.add('z')                          # přidá nový prvek

*       >>> a.update('wxy')                     # přidá několik nových prvků

*       >>> a

*       set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'x', 'z'])      

*       >>> a.remove('x')                       # odebere jeden prvek

*       >>> a

*       set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'z'])

 

Jednoduché příklady na příkazy Pythonu s n-ticemi

N-tice Pythonu je posloupnost hodnot uzavřená do ( ), lze s ní nakládat jako s celkem.

Po vytvoření nelze n-tici měnit (oproti seznamům jsou „immutable―)

Na jejich prvky lze odkazovat indexem

>>> ntice = (1, 2, 3, 4, 5)

>>> print ntice[1]

2

>>> ntice1 = (1, 2, 3)

>>> ntice2 = ntice1 + (4,)   # čárka způsobí, že se zápis chápe jako n-tice a ne jako číslo

>>> print ntice2

(1, 2, 3, 4)

>>> 2 in (1,2,3)

True

>>> len((1,2,3))

3

>>> max((1,2,3,4,5,(2,2)))

(2, 2)

>>> min((1,2,3,4,5))

1

 

Jednoduché příklady na příkazy Pythonu se slovníky

>>> tel = {'jack': 4098, 'sape': 4139}

>>> tel['guido'] = 4127

>>> tel

{'sape': 4139, 'guido': 4127, 'jack': 4098}

>>> tel['jack']

4098

>>> del tel['sape']

>>> tel['irv'] = 4127

>>> tel

{'guido': 4127, 'irv': 4127, 'jack': 4098}

>>> tel.keys()

['guido', 'irv', 'jack']

>>> 'guido' in tel

True

 

Popište hlavní odlišnosti OOP v Javě a Pythonu

*                   python - všechny metody jsou public

*                   python - lze provést vícenásobné dědění

*                   python - není definováno rozhraní

*                   python - jsou definovány destruktory

 

Jak řeší Python problém násobné dědičnosti

Řešení problému násobné dědičnosti:

Není-li atribut v potomkovi, hledá python atribut v rodiči1, následně v rodiči rodiče 1. Až prohledá všechny rodiče rodiče 1, začne teprve hledat atribut v rodiči2. Tzn. hledá atributy do hloubky a pak následně z leva do prava.

 

Provedení v kódu:

class Potomek(Matka, Otec):

   def __init__(self):

     Otec.__init__(self)        # 1.

     Matka.__init__(self)       # 2.

   def popis(self):

     print self.oci, self.usi, self.ruce, self.nos, self.nohy

 

Charakterizujte perzistentní objekty a možnost jejich vytváření

Objekty, které mohou být uloženy a znovu použity jiným programem, "žijí" nezávisle na programu

Příklad:

class A:

         def __init__(self, x, y):

                 self.x = x

                 self.y = y

         def save(self, fn):

                 f = open(fn, "w")

                 f.write(str(self.x) + '\n') # preved na retezec

                 f.write(str(self.y) + '\n')

                 return f         # do stejneho souboru budou sve hodnoty

                          # pripisovat objekty odvozenych trid

         def restore(self, fn):

                 f = open(fn)

                 self.x = int(f.readline()) # preved zpet na puvodni typ

                 self.y = int(f.readline())

                 return f

 

a = A(12, 15)             # Vytvorime instance.

a.save('a.txt').close() # Ulozime instance.

newA = A(5, 6)          # Obnovime instance.

newA.restore('a.txt').close()

print "A: ", newA.x, newA.y

 

K čemu slouží a jak funguje destruktor Pythonu

*                   volá se před smazáním instance třídy z paměti

*                   slouží k provedení příkazů těsně před odstraněním objektu z paměti

class Point:

   def __init__(self, x=0, y=0):

      self.x = x

      self.y = y

   def __del__(self):

      class_name = self.__class__.__name__

      print class_name, "destroyed"

 

Charakterizujte událostmi řízené programování

• Program po spuštění čeká v nekonečné smyčce na výskyty událostí

• Při výskytu události provede odpovídající akci a nadále čeká ve smyčce

• Skončí až nastane konec indikující událost


Události může generovat OS (obvyklé u programů s GUI), nebo vnější čidla

 

Jak lze s využitím Tkinter implementovat čekací smyčku

top = Tk() #vytvoří widget (ovládací prvek) na nejvyšší úrovni

top.mainloop() #odstartuje provádění smyčky

 

Jmenujte alespoň 6 grafických prvků Tkinter

Frame, Label, Button, ScrollBar, Canvas, RadioButton, CheckButton

 

Jaké vlastnosti má well-formed XML dokument

• Jeden kořenový element

• Neprázdné elementy musí být ohraničeny startovací a ukončovací značkou (<ovoce>Jablko</ovoce>)

• Prázdné elementy mohou být označeny tagem„prázdný element“(<ovoce/> )

• Všechny hodnoty atributů musí být uzavřeny v uvozovkách –jednoduchých (') nebo dvojitých ("), ale jednoduchá uvozovka musí být uzavřena jednoduchou a dvojitá dvojitou. Opačný pár uvozovek může být použit uvnitř hodnot

• Elementy mohou být vnořeny, ale nemohou se překrývat; to znamená, že každý (ne kořenový) element musí být celý obsažen v jiném elementu

 

Charakterizujte DTD

• Omezuje množinu přípustných dokumentů spadajících do daného typu nebo třídy

• DTD tak například vymezuje jazyky HTML a XHTML.

• Struktura třídy nebo typu dokumentu je v DTD popsána pomocí popisu jednotlivých elementů a atributů. Popisuje jak mohou být značky navzájem uspořádány a vnořeny. Vymezuje atributy pro každou značku a typ těchto atributů.

• Připojení ke XML: <!DOCTYPE kořen SYSTEM "soubor.dtd">

• DTD je poměrně starý a málo expresivní jazyk. Jeho další nevýhoda je, že DTD samotný není XML soubor.

 

Jaké vlastnosti definuje XSD

• XML SchemaDefinition

• Popisuje strukturu XML dokumentu

• Definuje:

- místa v dokumentu, na kterých se mohou vyskytovat různé elementy

- Atributy

- které elementy jsou potomky jiných elementů

- pořadí elementů

- počty elementů

- zda element může být prázdný, nebo zda musí obsahovat text

- datové typy elementů a jejich atributů

- standardní hodnoty elementů a atributů

 

Charakterizujte relační databázi

Relační databáze je založena na tabulkách, jejichž řádky obvykle chápeme jako záznamy a eventuelně některé sloupce v nich (tzv. cizí klíče) chápeme tak, že uchovávají informace o relacích mezi jednotlivými záznamy v matematickém slova smyslu.

 

Co to je a k čemu slouží primární klíč

Primární klíč je jednoznačný identifikátor záznamu, řádku tabulky. Primárním klíčem může být jediný sloupec či kombinace více sloupců tak, aby byla zaručena jeho jednoznačnost. Má dvě základní vlastnosti: jedinečnost v rámci tabulky a ne-NULL-ovou hodnotu.

 

Uveďte tvar příkazu SELECT

výběr hodnot specifikovaných atributů

tvar: SELECT atributy FROM tabulka WHERE podminka

 SELECT Jmeno, Prijmeni FROM Studenti WHERE Vek > 23

 

Uveďte tvar příkazu INSERT

Tvar: INSERT INTO tabulka (atributy) VALUES (hodnoty)

Příklad:

INSERT INTO Studenti (Jmeno, Prijmeni, Vek, Skola, Prumer) VALUES (‘Jan’, ‘Novy’, 25, ‘FAV ZCU’, 3,1)

 

Uveďte tvar příkazu DELETE

Tvar: DELETE FROM tabulka WHERE podminka

Příklad:

 DELETE FROM Studenti WHERE Vek>39 and Prumer>3

 

Uveďte tvar příkazu UPDATE

Tvar: UPDATE tabulka SET atribut = hodnota, atd WHERE podminka

Příklad:

 UPDATE Studenti SET Skola=‘VUT’, Vek= 12 WHERE Jmeno=‘Gustav’ and Prijmeni=‘Klaus’

 

Jakou konstrukcí umožní modul pyodbc provádět SQL příkazy

import pyodbc

c = pyodbc.connect("DSN=Lide") #vytvori spojeni c se zdrojem dat (byl pojmenovan Lide)

cursor = c.cursor() #vytvori kurzor cursor

 

Co je to databázový kurzor, k čemu slouží

objekt kurzor dovoluje provádět operace na databázi (selekty, inserty, updaty, delety). V objektu kurzor jsou interně uloženy výsledky dotazu.

 

Popište sémantiku metod fetchone, fetchmany, fetchall

K výběru řádků výsledku dotazu v podobě objektu lze použít metody:

fetchone() - vrací n-tici = další řádek výsledku uloženého v kurzoru

fetchmany(n) - vrací n řádků, které jsou na řadě ve výsledku uloženém v kurzoru

fetchall() - vrací všechny řádky výsledku

 

Popište sémantiku metody commit

zakončí transakci (zapíše změny do databáze)

 

Vysvětlete využití INNER JOIN fráze v příkazu SELECT

spojení záznamů z více tabulek k získání jediné výsl. relace

 

Definujte slovně termy jazyka Prolog

term - Jednotná datová struktura, se kterou pracuje prog. jazyk Prolog

   •struktura

   •jednoduchý term

     -proměnná

     -konstanta

       číslo

       atom

 

Co jsou atomy Prologu

• řetězce znaků začínající malým písmenem obsahující pouze písmena, číslice a podtržítko

• posloupnost znaků uzavřená v apostrofech (některé implementace používají uvozovky)

• atomy skládající se pouze ze speciálních znaků

 

Objasněte pojem anonymní proměnná Prologu a její vlastnosti

Speciální typ proměnné. Značí se jako podtržítko a používá se v pravidlech. Její hodnota není podstatná a Prolog ji ve výsledcích nezobrazuje.

Příklad: predikát, zda X je dítě

 je_dite(X) :- dite(X,_).

 

Popište princip rezoluce Prologu

a :- a1, a2, … , an. b :- b1, b2, … , bm. Nechť bi ≡ a pak rezolucí je b :- b1, b2, … bi-1, a1, a2, … , an , bi+1 , … , bm.

Tzn. když se při plnění cílů z těla pravidla b narazí na zpracování cíle bi alias a, začnou se zpracovávat cíle těla pravidla a.

 

Popište princip unifikace Prologu

• porovná-li se volná proměnná s konstantou, naváže se na tuto konstantu,
• porovnají-li se dvě volné (neinstalované) proměnné, stanou se synonymy,
• porovná-li se volná proměnná s termem, naváže se na tento term,
• porovnají-li se termy, které nejsou volnými proměnnými, musí být pro úspěšné porovnání stejné.

 

Popište způsob plnění cílů v Prologu

• Dotaz může být složen z několika cílů.
• Při konjunkci cílů jsou cíle plněny postupně zleva.
• Pro každý cíl je při jeho plnění prohledávána databáze od začátku.
• Při úspěšném porovnání klauzule s cílem je její místo v databázi označeno ukazatelem. Každý z cílů má vlastní ukazatel.
• Při úspěšném porovnání cíle s hlavou pravidla, pokračuje výpočet plněním cílů zadaných tělem pravidla.
• Cíl je splněn, je-li úspěšně porovnán s faktem databáze, nebo s hlavou pravidla databáze a jsou splněny podcíle těla pravidla.
• Není-li během exekuce některý cíl splněn ani po prohlédnutí celé databáze, je aktivován mechanismus návratu.
• Splněním jednotlivých cílů dotazu je splněn globální cíl a systém vypíše hodnoty proměnných zadaných v dotazu.
• Zjistí-li se při výpočtu, že globální cíl nelze splnit, je výsledkem no.

 

Jak probíhá návrat při nesplnění cíle v Prologu

• exekuce se vrací k předchozímu splněnému cíli, zruší se instalace proměnných a pokouší se opětovně splnit tento cíl prohledáváním databáze dále od ukazatele pro tento cíl,
• splní-li se opětovně tento cíl, pokračuje se plněním dalšího, (předtím nesplněného) vpravo stojícího cíle,
• nesplní-li se předchozí cíl, vrací se výpočet opětovně zpět.

 

Vysvětlete mechanismus působení predikátu řezu

• Použijeme, když chceme zabránit hledání jiné alternativy
• Odřízne další provádění cílů z hlavy pravidla
• Je bezprostředně splnitelným cílem, který nelze opětovně při návratu splnit
• Projeví se pouze, když má přes něj dojít k návratu
• Změní mechanismus návratu tím, že znepřístupní ukazatele vlevo od něj ležících cílů (přesune je na konec Db)

 

Charakterizujte „čisté výrazy“

nemění stavový prostor programu

• Hodnota výsledku nezávisí na pořadí vyhodnocování (tzv.Church-Roserova vlastnost)

• Výraz lze vyhodnocovat paralelně , např ve výrazu (x*2+3)/(fce(y)*x) lze pak současně vyhodnococat dělence i dělitele. Pokud ale fce(y) bude mít vedlejší efekt a změní hodnotu x, nebude to čistý výraz a závorky paralelně vyhodnocovat nelze.

 

Popište Church-Roserovu vlastnost výrazů

Hodnota výsledku nezávisí na pořadí vyhodnocování

 

Definujte S-Výrazy Lispu

Souhrný název pro data v Lispu (čísla, znaky, řetězce, symboly, seznamy)

 

Popište základní cyklus vyhodnocování lipovského programu

Cyklus:

1. Výpis promptu

2. Uživatel zadá lispovský výraz (zápis fce)

3. Provede se vyhodnocení argumentů

4. Aplikuje funkci na vyhodnocené argumenty

5. Vypíše se výsledek (fční hodnota)

 

Jaké jsou elementární funkce Lispu a jejich sémantika

CAR alias FIRST selektor - vyběr prvého prvku

CDR alias REST selektor - výběr zbytku seznamu (čti kúdr)

CONS konstruktor-vytvoří dvojici z agumentů

ATOM test zda argument je atomický

EQUAL test rovnosti argumentů

 

Popište sémantiku lispovské funkce COND

Větvení programu v LISPU

například výpočet absolutní hodnoty:

(cond((> x 0) x)

      ((= x 0) 0)

      (t(-x)))

pokud x > 0 je vráceno x

pokud x == 0 je vrácena 0

V ostatních případech je vráceno -x

 

Popište tvar a účinek lispovské funkce DEFUN

definování uživatelské funkce

 

 (defun double (x) (* x 2))

následně lze funkce zavolat např:

 (double 3)

 

Definujte tvar a využití lambda výrazů

• popisují bezejmenné fce

• jsou aplikovány na parametry

př.

 ((lambda (x) ( * x x)) 5)

 ((lambda (y) ((lambda (x) (+ (* x x) y )) 2 )) 3)

 

Co to jsou funkcionály, popište některý

Funkce, jejichž argumentem je funkce nebo vrací funkci jako svoji hodnotu.

 

Objasněte rozdíl mezi „klíčovými slovy „ a „předdefinovanými slovy“

Klíčová slova - identifikátory, které tvoří slovní zásobu programovacího jazyka. Pro jiné účely, jako například název proměnné, je použít nelze.

Předdefinovaná slova - identifikátory speciálního významu, které lze předdefinovat (např vše z balíku java.lang–String, Object, System…)

 

Objasněte rozdíl mezi dobou existence a rozsahem platnosti proměnné

doba existence (lifetime) - čas, po který je vázána na určité paměťové místo

rozsah platnosti (scope) - interval instrukcí, po který je možné získat hodnotu proměnné z paměti (proměnna je viditelná)

 

Uveďte příčiny vzniku synonym (alias) v programech

Aliasy - Synonyma jsou proměnné které spolu sdílí pamět, takže bych řekl že to budou třeba ukazatele v Javě... Bo nevim Jsou to :

*                   Pointery

*                   Referenční proměnné

*                   Variantní záznamy (Pascal)

*                   Uniony (C, C++)

*                   Fortran (EQUIVALENCE)

*                   Parametry podprogramů

 

Popište princip statické a dynamické vazby jména proměnné s typem

*                      Statická vazba(jména s typem / s adresou)

*                               navázání se provede před dobou výpočtu a po celou exekuci se nemění

*                               Vazba s typem určena buď explicitní deklarací nebo implicitní deklarací

*                      Dynamická vazba(jména s typem / s adresou)

*                               nastane během výpočtu nebo se může při exekuci měnit

*        

*                               –Dynamická vazba s typem

§                                             specifikována přiřazováním (např. Lisp)

§                                             výhoda –flexibilita (např. generické jednotky)

§                                             nevýhoda-vysoké náklady + obtížná detekce chyb při překladu

 

Popište princip výhody a nevýhody statické a dynamické vazby proměnné s adresou

Dynamická vazba promenna s adresou - (nastane alokací z volné paměti, končí dealokací) doba existenceproměnné (lifetime) je čas, po který je vázána na určité paměťové místo. Rekl bych ze to bude Garbage Colector

Staticka - je to urceno predem. Priklad netusim

 

Popišre rozdíl mezi statickým a dynamickým rozsahem platnosti proměnné

Statický (lexikální) rozsah platnosti

Určen programovým textem

K určení asociace jméno – proměnná je třeba nalézt deklaraci

Vyhledávání: nejprve lokální deklarace, pak globálnější rozsahová jednotka, pak ještě globálnější...

Uplatní se pokud jazyk dovolí vnořování prog.jednotek

Proměnné mohou být zakryty (slepé skvrny)

C++, ADA, Java dovolují i přístup k zakrytým proměnným (Třída.proměnná)

Prostředkem k vytváření rozsahových jednotek jsou bloky

Dynamický rozsah platnosti

Založen na posloupnosti volání programových jednotek (namísto hlediska statického tvaru programového textu,

řídí se průchodem výpočtu programem)

Proměnné jsou propojeny s deklaracemi řetězcem vyvolaných podprogramů

 

Definujte pojem silný typový systém programovacího jazyka

From FAV

Jump to: navigation, search

Programovací jazyk má silný typový systém, pokud typová kontrola odhalí veškeré typové chyby

 

Definujte pojmy strukturální a jmenná kompatibilita typů

Jmenné kompatibility – dvě proměnné jsou kompatibilních typů, pokud jsou uvedeny v téže deklaraci, nebo v deklaracích používajících stejného jména typu (ADA, Java)

Strukturální kompatibility – dvě proměnné jsou kompatibilní mají-li jejich typy identickou strukturu (Pascal a C)

 

Definujte pojmy „literál“ a „manifestová konstanta“

Literál - konstanta, která nemá jméno

String s="cat"; // cat je literal


Manifestová konstanta - jméno pro literál

 

Jaké rozlišujeme druhy konstant podle doby jejich určení. Popište je

Konstanty(mají fixní hodnotu po dobu trvání jejich existence v programu, nemají atribut adresa = na jejich umístění nelze v programu odkazovat):

 •Statické

   -Určené v době překladu –př.Javy: static final int zero = 0;

   -Určené v době zavádění programu

     static final Date now = new Date();

 •Dynamické konstanty:

   -v C# konstanty definované readonly

   -v Javě: každé non-static final přiřazení v konstruktoru.

   -v C: #include <stdio.h>

 

Jaké typy označujeme jako ordinální

Ordinální(zobrazitelné = přečíslitelné do integer)

-primitivní mimo float

-definované uživatelem (pro čitelnost a spolehlivost programu). Typy typu výčet (enum).

 

Popište jaké typy označujeme jako uniony

Uniony – typy, jejichž proměnné mohou obsahovat v různých okamžicích výpočtu hodnoty různých typů.

 

Uveďte, jakým způsobem vzniká dangling pointer

např. v jazyce C si vyžádáme paměť funkcí malloc. Zavoláme free(), ale pointer ukazuje na část paměti, která již byla uvolněna.

 #include <stdlib.h>

 {

   char *cp = malloc ( A_CONST );

   /* ... */

   free ( cp );      /* cp je nyní dangling pointer, ukazuje na část paměti, která již byla uvolněna */

   cp = NULL;        /* nyní je problém vyřešen */

   /* ... */

 }

 

Uveďte, jakým způsobem vzniká ztracená proměnná z haldy

Vzniká, když je ukazateli přiřazena nová adresa dříve, než je uvolněna paměť, na kterou ukazuje.

 

Popište pojmy precedence, asociativita a arita operátorů ve výrazech

precedence - pořadí vyhodnocování //nevím jistě

V aritmetice a algebře jsou používána různá pravidla, která určují pořadí, v jakém se vyhodnocují operace ve výrazu. Prorita, s jakou se vyhodnocuje daná operace se nazývá precedence. Precedence každé operace je otázkou vzájemné domluvy - konvence. Nelze ji nijak matematicky odvodit.


asociativita - směr vyhodnocování (zprava, zleva) // nevím jistě

Asociativita je v matematice, zejména v algebře, vlastnost binární operace, říkající, že nezáleží na tom, v jakém pořadí operace provádíme, pokud se jich vedle sebe vyskytne více (například násobíme nebo sčítáme tři (čtyři …) čísla).


arita - počet operandů pracující nad operátorem

Arita operace je rovna aritě kartézského součinu vstupu, tzn. obsahuje-li vstup n množin, pak říkáme, že operace je n-ární.

Pro n = 0 jde o operace nulární.

Pro n = 1 jde o operace unární.

Pro n = 2 se jedná o operace binární.

Pro n = 3 se jedná o ternární operaci.

 

Jaká jsou pozitiva a negativa příkazů skoku

Nevýhody

-znepřehledňuje program

-je nebezpečný

-znemožňuje formální verifikaci programu


Výhody

-snadno implementovatelný

-efektivně implementovatelný

 

Které vlastnosti jsou důležité pro příkazy cyklů v programovacích jazycích

•Jakého typu mohou být parametry a meze cyklu?

•Kolikrát se vyhodnocují meze a krok?

•Kdy je prováděna kontrola ukončení cyklu?

•Lze uvnitř cyklu přiřadit hodnotu parametru cyklu?

•Jaká je hodnota parametru po skončení cyklu?

•Je přípustné skočit do cyklu?

•Je přípustné vyskočit z cyklu?

 

Jmenujte kriteria, dle kterých lze hodnotit vlastnosti podprogramů programovacích jazyků

•Způsob předávání parametrů?

•Možnost typové kontroly parametrů ?

•Jsou lokální proměnné umisťovány staticky nebo dynamicky?

•Jaké je platné prostředí pro předávané parametry, které jsou typu podprogram ?

•Je povoleno vnořování podprogramů ?

•Mohou být podprogramy přetíženy (různé podprogramy mají stejné jméno) ?

•Mohou být podprogramy generické ?

•Je dovolena separátní kompilace podprogramů ?

 

K čemu slouží a co obsahují aktivační záznamy podprogramů a funkcí

Jsou v nich uloženy lokální data podprogramů.

•Místo pro lokální proměnné

•Místo pro předávané parametry

•(Místo pro funkční hodnotu u funkcí)

•Návratová adresa

•Informace o uspořádání aktivačních záznamů

•Místo pro dočasné proměnné při vyhodnocování výrazů

 

Objasněte rozdíl mezi statickou a dynamickou vazbou metod s místem jejich volání

Brzká vazba - statická


Volání metod objektů je zařízeno pevnou adresou vzniklou při překladu.

Pozdní vazba - dynamická


V místě volání metody se nesmí použít pevná adresa objektu, musí tam být pouze symbolický odkaz. Ten se naplní v okamžiku přiřazení konkrétního objektu, tedy až V DOBĚ BĚHU.

//teda aspoň si to myslím - Tifo

 

Uveďte jakou vazbu metod implicitně užívá Java, Obj.Pascal, C++, Python

statická - java, c++

dynamická - python, obj. pascal

// taky jen myslím - Tifo