IPP Půlsemestrálka - pojmy Flashcards
programovací jazyk
- prostředník mezi běžnou řečí a řečí počítače
- konečná množina příkazů, která má specifickou syntaktickou strukturu a přesně vymezenou sémantiku
počítačový program
- zápis v programovacím jazce, který obsahuje abstrakci reality
- implementuje abstranktní model, abstrahuje model počítače (zastiňuje konkrétní podobu výpočtu)
Abstrakce dat - dělení
- jazyky strojové/assemblery
- jazyky vyšší úrovně
- univerzální jazyky
- blokově strukturované jazyky
- modulární blokově strukturované jazyky
- objektově orientované jazyky
Jazyky strojové/assembelry - manipulace s daty
- data jsou skupina bitů
- aritmetické a bitové operace
- závislost na architektuře
- jednoduché datové typy
Univerzální jazyky - manupulace s daty
- velké množství typů
- nelze definovat nové typy
- neexistují klíčová slova
Blokově strukturované jazyky
- možnost definovat složitější datové struktury pomocí jednoduchých konstrukcí (lze je spojovat, vnořovat
- lze použít návrhové metologie
Modulární blokově strukturované jazyky - manipulace s daty
- odděluje definici typu od operací, vnitřní struktura je skryta
Objektově orientované jazyky - manipulace s daty
- spojuje data s operacemi, které je manipulují
Abstrakce řízení
- procedulární (imperativní) - programátor musí řešit, co za operace má být provedeno, a v jakém pořadí mají být provedeny
- deklarativní - programátor řeší jen, co za operace má být provedeno
Procedurální jazyky
- sestavují program jako posloupnost příkazů
- lze provádět skoky, u vyšších jazyků i cykly a větvení
- abstrakce jako podprogramy, bloky, koprogramy, paralelní programy, odložené zpracování
Podpogramy
- umožňují vnořené zpracování určitých logických funkcí či operací
- jsou volány skrze své rozhraní, které definuje předávané parametry a výsledek
- implementace je skryta v definici podpogramu, kde lze volat další či stejný podpogram -> jednoznačná identifikace podpogramu
Bloky
- nemají jméno -> nelze je volat
- jejich kód se uplatňuje jen v místě vložení bloku
- může mít své lokální definice
Koprogramy
- pojmenované bloky kódu
- mají k sobě symetrický vztah
- jejich kód je zpracováván současně či prokládaně
- rozhraní a identifikace jsou jako u podprogramů
- nemají synchronizační mechanismy (mohou být ale implementovány jako vlákna)
Paralelní programy a procesy
- velké logické celky
- vztahy nemusejí být symetrické
- může docházet s synchronizaci
- nejvyšší úroveň abstrakce - processy, v rámci procesů vlákna
Odložené zpracování
- pokud výsledek některé operace v daném místě nemusí být nutně dále použit, vyhodnocení operace je pozdrženo a provedeno později a jen v případě, že je výsledek potřeba
Deklarativní jazyky
- vysoká abstrakce a vyjadřovací síly -> příkazy pro větvení toku řízení a opakování s možnost vnoření
Deklarativní jazyky - volání podprogramů hodnotou
- parametry se vyhodnocují před voláním podprogramu
- pokud se eliminuje opakováné vyhodnocení podvýrazu - striktní vyhodnocení
Deklarativní jazyky - volání podprogramů jménem
- parametry se předávají nevyhodnoceny a jsou reprezentovány zástupným jménem
- k jejich vyhodnocení dojde, až to vyžaduje volaný podpogram - nestriktní vyhodnocení
Deklarativní jazyky - volání podprogramů v případě potřeby
- podobné jako volání jménem. hodnota se však uschovává pro další použití (nedochází k vícenásobnému vyhodnocování) - lazy vyhodnocení (taky nestriktní)
Specifikace jazyků
- formální báze
- syntaxe
- sémantika
- deklarace
- definice
Formální báze
- takový formální prostředek (kalkul, algebra…), který umožňuje exaktně popsat všechny konstrukce daného jazyka
Syntaxe
- definuje strukturu programu, tj. jakým způsobem je dovoleno řadit jednotlivé konstrukce za sebe
- lze ji popsat formálními gramatikami (regulární, bezkontextové gramatiky, BNF, syntaktickými grafy…)
Sémantika
- popis/definice významu jednotlivých syntaktických konstrukcí, způsobu jejich vyhodnocení, zpracování atd.
- popisuje se slovně nebo pomocí příkladů
- 2 typy - statická (vlastnosti, které mohou být ověřovány během analýzy/překladu programu) a dynamická (vlastnosti, které lze ověřit až za běhu programu)
Deklarace
- úplně vymezuje atributy dané entity
- explicitní / implicitní
Definice
- úplně vymezuje atributy dané entity, u proměnných způsob alokace paměti, u funkcí/procedur jejich tělo
Vlastnosti entity programu
- jméno
- adresa a umístění v paměti
- hodnoty, keterých může nabývat
- typ
- doba života
- rozsah platnosti
Zpracování kódu (3 typy programů)
- analyzátor
- interpret/vyhodnocovací program
- překladač
Analyzátor
- analyzuje vstupní text v programovacím jazyce a provádí kontrolu na základě textu
Interpret
- jakmile rozpozná příkaz ve vstupním programu, ihned jej provede
- převádí vstupní program na posloupnost okamžitě prováděných akcí
Překladač
- vstupní text příkazů v programovaícm jazyce převádí na posloupnost příkazů jiného jazyka či stroje
- cílem překladu bývá binární soubor, který je spustitelný na dané architektuře
Nestrukturované jazyky
- mapř. Fortran, Basic
- rozšířené využívání ve skriptovacích jazycích
- nemají formální bázi, neexistuje formální verifikace a validace
- syntaxe je podávána přirozeným jazykem s příklady a může být volná či pevná
- sémantika je podávána neformálně
- nevhodné pro rozsáhlé a týmové projekty
Nestrukturované jazyky - data
- typické jsou základní numerické typy, znakové řetězce a pole; for, if a skok
- nelze definovat nové typy, pro manipulaci s daty lze použít jen vestavěné operace
- nelze definovat podprogram, lze ale použít textová makra a otevřené podprogramy (pomocí skoku)
Nestrukturované jazyky - překladač
- syntaktická analýza - závorkové struktury
- sémantická analýza je obvykle v pozadí
- generování kódu - používají se přímočaré algoritmy
Nestrukturované jazyky - interpret
- lexikální analýza - u některých systém se s vložením programového řádku provede převod klíčových prvků jazyka do interní reprezentace
- syntaktická analýza - podpodně jako u využití překladače
- sémantická analýza - je prováděna v určité posloupnosti, případně lze odložit na samotné vyhodnocení
- běh - jsou využívány knihovny funkcí a operací; co nejvíce operací se provádí pomocí procesoru
Strukturované jazyky
- např. Pascal, Algol
- snaží se dosáhnout flexibility, efektivní tvorby programů. zpřehlednit program a dosáhnout čitelné struktury programy
- nemají primárně formální bázi, jsou navrženy bez užití formalismů
- syntaxe je podávána formálním či semiformálním způsobem
- sémantika je popsána neformální formou
- program je stále tvořen jedním souborem, chybí moduly, není možné skrývat manipulaci s daty
- odlišují se pojmy deklarace a definice
- je možné aplikovat návrh
- typované jazyky
- možnost vytvářet datové struktury
- možnost vytvářet bloky příkazů (funkce)
Strukturované jazyky - překladač
- lexikální, sémantickou a syntaktickou analýzu lze provádět najednou v rámci jednoho průchodu zdrojovým textem
- využití víceúrovňových tabulek symbolů u sémentické analýzy
Strukturované jazyky - interpret
- nejsou moc časté kvůli přílišné složitosti (de facto první dochází k překladu programu, až potom k vyhodnocení)
Modulární jazyky
- např. C, ADA
- při použití modulu uživatele dostává pouze binární kód a popis, jak využít funkčnost modulu (tzv. rozhraní modulu)
- primárně nemají formální bázi
- syntaxe formální či semiformální formou
- sémantika podávána neformálně
- využívané i dnes (vhodné pro týmovou spolupráci a složité problémy díky možnosti dokomponování)
- pokud není možné použít OOP, je modulární programování nejvýhodnějším přístupem
Modulární jazyky - překladač
- kvůli modularitě není možné provádět některé druhy globálních optimalizací, volání a návrat funkcí musí probíhat přes snadardní rámec
- objevuje se spojovací program (linker), který přebírá některé funkce překladače
- lexikální analýza - její součástí se stal textový preprocesor
- syntaktická analýza - probíhá standardním způsobem
- sémantická analýza stejná jako u strukturovaných jazyků
- linkter - spojuje všechny moduly a části knihovny do jednoho bloku, sestavuje cílový kód
Objektově orientované jazyky
- využití dekompozice do modulů, které tvoří samostatné celky
- OOP - způsob abstrakce, kdy algoritmus implementujeme pomocí množiny zapouzdřených vzájemně komunikujích entit (objektů)
Objektově orientované jazyky - výhody a nevýhody
- výhody:
- vyšší míra abstrakce
- analogie mezi SW modelem a reálným modelem (jednodušší na pochopení)
- praktické, přirozenější
- stabilní
- flexibilita SW modelů
- znovupoužitelnost SW modelů
- zvýšení produktivity
- nevýhody:
- pokud neexistuje analogie mezi SW m. a r. m., je pak obtížně určit a definovat SW m.
- delší učící křivka
- některé výhody nejsou v praxi vidět
- pomalejší kód (vyšší režie)
OOP - Objekt
- jednoznačně identifikovatelný reálný objekt nebo abstrakce, která obsahuje jejich data a operace nad těmito daty
- objekty mezi sebou komunikují pomocí zasílání zpráv
- metoda - zapouzřená funkce objektu
- rozhraní objektu - množina zpráv, kterým objekt rozumí
- protokol - postup objektu při hledání reakce na přijatou zprávu
- zapouzdření - uživatel nemůže měnit interní stav objektu libovolným způsobem, ale musí k tomu použít poskytnuté rozhraní
- dědičnost - způsob implementace sdíleného chování
Třída
- šablona, podle níž mohou být vytvářeny objekty (instance)
- stará se o správu protokolu objektu, směřování zpráv a obsahuje implementace některých metod
Konstruktor třídy
- slouží pro inicializování datových složek objektu
Instance třídy
- objekt, který obsahuje naplněné instanční proměnné a odkaz na třídu, ze které vznikl
Kopírování objektů
- hluboká kopie - kromě objektu jsou kopírovány i objekty, které dané instanční proměnné refrencují
- mělká kopie (= hloubková kopie do hloubky 0) - je vytvořen nový objekt, ale všechny instanční proměnné obsahuje odkazy na totožné objekty jako originál
Rušení objektů v paměti
- automaticky - pomocí garbage collectoru (ten jednou za čas vyhledá objekty, na které již neexistuje žádný odkaz a ty zruší)
- manuální - pomocí metody destruktor
Klasifikace dědičnosti
- jednoduchá dědičnost - každý potomek ma nejvýše jednoho přímého předka (Java)
- vícenásobná dědičnost - třída může dědit od více přímých potomků, možné problémy s konflikty a duplikací jmen -> zákaz výskytu konfliktních jmen (C++, Python)
- dědičnost implementace - kromě atributů jsou do dědičnost zahrnuty celé metody včetně jejich implementae
- dědičnost rozhraní - dědění pouza na úrovni rozšiřování protokolu objektu (tj. předpis nebo seznam metod, které je nutné v potomkovi implementovat)
Čisté/hybridně objektově orientované jazyky
- čísté - vše je objekt a existuje třída nebo objekt, od kterých jsou odstatní odvozeny
- hybridní - sada základních primitivních typů (bool, číslo, znak atd.), které lze skládat do struktur; třída je potom heterogenní struktura, které je předkem každé existující třídy (např. Java, C++, C#…)
Staticky/dynamicky typované jazyky - kontrola metod
- staticky typované - určena množina podporovaných operací už během překladu programu, v případě, že je po objektu požadována neimplementovaná operace, překlad neproběhne
- dynamicky typované - kontrola existence metod se prování za běhu programu. Pokud se metoda nenalezne, proběhne pokus o konverzi objektu na jiný typ, případně je vygenerována chyba
Prototypově orientované jazyky
- znají pouze jeden typ objektůů, nevyčleňují samostatně objekty reprezentující třídy
- objekty mají unifikovanou strukturu
- každý objekt může obsahovat členské proměnné i metody, nazývané sloty
- pokud je objektu zaslána zpráva, prozkoumá množinu svých slotů a pokusí se najít ten který zprávě odpovídá
- pro rušení objektů se používá garbage collector
- např. JavaScript, SELF
UML
- jednoduchý grafický jazyk pro jednotnou specifikaci, vizualizaci, konstrukci a dokumentaci při objektově orientované analýe a návrhu i pro modelování organizace
- nezávislý na implementačním jazyce
- vysoká míra abstraktnosti
- není výpočetně úplný - zaměřuje se na popis specifikace, návrhu a procesu vývoje
- napomáhá dekompozici problému
UML - základní pohledy
- strukturální
- datový
- pohled na chování
- pohled na rozhraní