IPP Půlsemestrálka - pojmy Flashcards

(53 cards)

1
Q

programovací jazyk

A
  • 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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

počítačový program

A
  • 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)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Abstrakce dat - dělení

A
  • jazyky strojové/assemblery
  • jazyky vyšší úrovně
  • univerzální jazyky
  • blokově strukturované jazyky
  • modulární blokově strukturované jazyky
  • objektově orientované jazyky
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Jazyky strojové/assembelry - manipulace s daty

A
  • data jsou skupina bitů
  • aritmetické a bitové operace
  • závislost na architektuře
  • jednoduché datové typy
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Univerzální jazyky - manupulace s daty

A
  • velké množství typů
  • nelze definovat nové typy
  • neexistují klíčová slova
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Blokově strukturované jazyky

A
  • možnost definovat složitější datové struktury pomocí jednoduchých konstrukcí (lze je spojovat, vnořovat
  • lze použít návrhové metologie
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Modulární blokově strukturované jazyky - manipulace s daty

A
  • odděluje definici typu od operací, vnitřní struktura je skryta
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Objektově orientované jazyky - manipulace s daty

A
  • spojuje data s operacemi, které je manipulují
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Abstrakce řízení

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Procedurální jazyky

A
  • 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í
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Podpogramy

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Bloky

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Koprogramy

A
  • 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)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Paralelní programy a procesy

A
  • velké logické celky
  • vztahy nemusejí být symetrické
  • může docházet s synchronizaci
  • nejvyšší úroveň abstrakce - processy, v rámci procesů vlákna
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Odložené zpracování

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Deklarativní jazyky

A
  • vysoká abstrakce a vyjadřovací síly -> příkazy pro větvení toku řízení a opakování s možnost vnoření
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Deklarativní jazyky - volání podprogramů hodnotou

A
  • parametry se vyhodnocují před voláním podprogramu

- pokud se eliminuje opakováné vyhodnocení podvýrazu - striktní vyhodnocení

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

Deklarativní jazyky - volání podprogramů jménem

A
  • 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í
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

Deklarativní jazyky - volání podprogramů v případě potřeby

A
  • 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í)
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Specifikace jazyků

A
  • formální báze
  • syntaxe
  • sémantika
  • deklarace
  • definice
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Formální báze

A
  • takový formální prostředek (kalkul, algebra…), který umožňuje exaktně popsat všechny konstrukce daného jazyka
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Syntaxe

A
  • 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…)
23
Q

Sémantika

A
  • 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)
24
Q

Deklarace

A
  • úplně vymezuje atributy dané entity

- explicitní / implicitní

25
Definice
- úplně vymezuje atributy dané entity, u proměnných způsob alokace paměti, u funkcí/procedur jejich tělo
26
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
27
Zpracování kódu (3 typy programů)
- analyzátor - interpret/vyhodnocovací program - překladač
28
Analyzátor
- analyzuje vstupní text v programovacím jazyce a provádí kontrolu na základě textu
29
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í
30
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
31
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
32
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)
33
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
34
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
35
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)
36
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
37
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í)
38
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
39
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
40
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ů)
41
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)
42
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í
43
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
44
Konstruktor třídy
- slouží pro inicializování datových složek objektu
45
Instance třídy
- objekt, který obsahuje naplněné instanční proměnné a odkaz na třídu, ze které vznikl
46
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
47
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
48
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)
49
Č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#...)
50
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
51
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
52
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
53
UML - základní pohledy
- strukturální - datový - pohled na chování - pohled na rozhraní