Klasifikace jazyků Flashcards

1
Q

Co je to programování?

A

Činnost, která jistý postup (algoritmus), převadí na posloupnost elementárních úkonů stroje, typicky počítače

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

Kdo je to programátor?

A

Realizuje proces tvorby programu

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

Typické vlastnosti procesu tvorby programu

A

Vysoká náročnost na čas a zdroje (lidi, stroje, peníze)

Znalost programoací jazyka není dostačující

Specifikace není bezchybná - často málo detailní a mění se v průběhu vývoje

Přeceňování/podceňování schopností/možností zdrojů - podceňování složitosti projektů, přeceňování schopnosti programátorů

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

Co je to programovací jazyk?

A

Prostředník mezi běžnou řečí a binárním kódem

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

Proč pro programování nepoužíváme přirozenou řeč?

A

Analýza přirozeného jazyka tak, aby byla jednoznačně převoditelná do binární formy, je příliš náročná. (Dosud neexistuje)

Nejednoznačnost a zdlouhavé popisy.

Záleží i na kontextu (To se pojí s nejednoznačnoststí)

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

Proč pro programování nepoužíváme binární jazyk (kód) ?

A

Příliš náročný na zapamatování (moc kombinací)

Nevhodný pro složité problémy. (Jednoduchá možnost chyby, rozsah kódu)

Nevhodný pro rychlé a efektivní programování. (Chybí koncept znovupoužitelnosti, rychlé orientace a znovupoužití kódu)

Binární kód je jiný pro každou architekturu

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

Co je to program?

A

Je to zápis v programovacím jazyce, který je abstrakcí reality

Implementuje abstraktní model - myšlenkový postup aplikovatelný v realitě je abstrahován a přizpůsobem možnostem počítače

Abstrahuje model počítače/procesoru - zastiňuje konkrétní podobu výpočtu a jeho realizaci na cílové platformě

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

Typy jazyků

A

Univerzální programovací jazyky (general purpose languages) - jazyky obecné použití [ C, Pascal, Java, Python ]

Specializované programovací jazyky - APL, jazyky řídících automatů

Jazyky pro popis integrovaných obvodů - VHDL, System C

Jazyky pro sazbu textu - TeX

Databázové jazyky - SQL

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

Jak dělíme jazyky podle abstrakce?

A

Abstrakce dat

Abstrakce řízení

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

Kategorie jazyků dle abstrakce dat

A

Jazyky strojové/assemblery - veškerá data jsou skipiny bitů či bajtů. Abstrakce veškerá žádná. Podporuje pár datových typů. (Celá čísla, desetinná čísla, bitová pole, atd..)

První jazyky vyšší úrovně - Stále nabízejí jen jednoduché datové typy. Na rozdíl od jazyků strojových zde dochází k abstrakci od cílového systému (skrytí implementace, jsou známy jen obecné vlastnosti, množina dostupných operací je typicky vyšší, než ta dostupná na cílové architektuře). Většinou vědecko technické jazyky, zaměřené na jedno odvětví. (COBOL, Fortran)

univerzální jazyky (PL/I neznamená general purpose languages) - velké množství datových typů.Ale není možné definovat vlastní datové typy. Neexistence klíčových slov

Blokově strukturované jazyky - Umožňuje definovat složitější datové sturktury. Umožňuje použít prvky softwarového inženýrství (Můžeme prvně definovat vhodné datové abstrakce a potom podle nich implementovat program, dosud to bylo naopak). Je to např. C (jen částnečně, je to i modulárni jazyk) a Pascal

Modulární blokově strukturované jazyky - Odděluje definici typu od operací, které ho manipulují. Tento princip umožňuje skrývat implementaci a lépe modifikovat programy. Třeba C

Objektově orientované jazyky
Spojuje konkrétní data i s operacemi, které je manipulují. Potom datový typ není manipulován v modulu, který tyto operace skrývá, ale neses si je s sebou.

Jazyky rozšiřující datové paradigma
Logické - Navíc mají predikáty a termy (Prolog)
Funkcionální - řadí mezi data funkce (lambda kalkul, Haskell)
Pro definici a manipulaci dat (DML) - datový typ je tabulka

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

Kategorie jazyků dle abstrakcí řízení

A

Imperativní jazyk

Deklarativní jazyk

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

Abstrakce řízení - imperativní jazyk (procedurální jazyk)

A

Programátor řeší tyto otázky řízení běhu programu:

CO za operace má být provedeno
V JAKÉM POŘADÍ to má být provedeno

Program je sestaven jako posloupnost příkazů. Nižší jazyky (Strojové) povolují skoky. U vyšších jazyků se tyto opakující se PATTERNY rozdělily do cyklů, podmínek,(zlepšuje se čitelnost).

Na vyšší úrovni programového kódu (bloky, moduly, jednotky) rozpoznáváme tyto typy konstrukcí pro řízení programu: podprogramy, bloky, paralelní programu, rozšířené zpracování

Zakladni operace: prirazeni, cykleni, vetveni

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

Imperativní jazyk - Podprogram

A

Umožňují vnořené zpracování určitých logických funkcí operací. Podprogram je volán skrze své rozhraní. Rozhraní definuje předávané parametry a výsledek. Implementace je skryta v definici podprogramu. V podprogramu můžeme volat i jiné podprogramy. Proto potřebuje identifikátor

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

Imperativní jazyk - Blok

A

Nemají jméno. Nelze je volat. Kód se uplatňuje pouze v místě, kde je vložen. Vytváří lokální scope. (C, Pascal)

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

Imperativní jazyk - Paralelní programy, procesy

A

Procesy -> vlákna. Kód jede víckrát ve stejný čas. Řeší se synchronizace a s ní její problémy (Deadlock..)

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

Imperativní jazyk - Odložené zpracování

A

Pokud výsledek některé operace v daném místě nemusí být nutně použit, vyhodnocení operace je pozdrženo

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

Abstrakce řízení - Deklarativní jazyk

A

Programátor řeší otázku: CO za operace má být provedeno

Řešíme CO se má udělat, nezajíma nás JAK se to má dělat. Tohle má v režii právě daný intepreter jazyka.

Neznají sekvenci příkazů, tedy ani cykly. Opakování příkazů je řešeno rekurzí.

Jazyky - SQL (Domain Specified) , Scheme (funkcionální jazyk), Prolog (logické porgramování)

18
Q

Deklarativní jazyky - Strategie volání podprogramů

A

Volání hodnotou (Call by value)
Volání jménem (Call by name)
Volání v případě potřeby (Call by need)

19
Q

Strategie volání podprogramů - Volání hodnout (Call by value)

A

Parametry se vyhodnocují před volání podprogramu.

Počet vyhodnocení nějakého výrazu je minimálně jeden, ale horní hranice neni omezená

V případě eliminace opakovaného vyhodnocení jednoho a téhož podvýrazu (užitého na více místech) hovoříme o striktním vyhodnocení. (Sdílí se hodnoty výrazů)

20
Q

Strategie volání podprogramů - Volání jménem (Call by name)

A

Parametry se do volaného podprogramu předávají nevyhodnocneny a jsou zde reprezentovány zástupným jménem.

K vyhodnocení dojde až to vyžaduje volaný podprogram.

Ve výsledku potom jeden a tentýž výraz nemusí být vyhodnocen vůbec, ale také víckrát.

Nestriktní

21
Q

Strategie volání podprogramů - Volání v případě potřeby (Call by need, Lazy evaluation)

A

Podprogram je nejprve zavolán, teprve když jeho vyhodnocení potřebuje hodnotu nějakého parametru, tak dojde k jeho vyhodnocení.

Hodnota vyhodnoceného výrazu se uschová pro další použití, takže nedochází k jeho opakovanému vyhodnocení. (Lazy evaluation)

Je nestriktní

22
Q

Syntaxe jazyka

A

Definuje strukturu programu. tj. to, jakým způsobem je dovoleno jednotlivé konstrukce řadit za sebe.

Pomocí syntaxe se vysvětluje i lexikální stavba jazyka

Formálně lze syntaxi popsat formálnimi gramatikami (Regulární, bezkontextové gramatiky)

Definice syntaxe pro účely popisu jazyka: Slovní popis (zřídka), syntaktické grafy, BNF, EBNF, nebo gramatiky

23
Q

Sémantika

A

popis/definice významu jednotlivých syntaktických konstrucí, způsobu jejich vyhodnocování a zpracování,..

24
Q

Popis sémantiky

A

Na uživatelksé úrovni se epoužívají se formalismy, ale obvykle je to pouze slovní vysvětlení, nebo ukázka na příkladech.

Jako formalismus lze použít:

Axiomatickou sémantiku
Operační sémantiku
Denotační sémantiku

Dělíme:
Statická sémantika
Dynamická sémenatika

25
Q

Popis sémantiky - axiomatická sémantika

A

Pro každou syntaktickou konstrukci definuje množinu axiiomů, které musí být splněný, aby byla konstrukce platná.

26
Q

Popis sémantiky - operační sémantika

A

Definuje sémantiku chování programu jako posloupnost přechodů mezi danými stavy

27
Q

Popis sémantiky - Denotační sémantika

A

Program je definován jako matematická funkce, která zobrazuje vstupy na výstup

28
Q

Statická sémantika

A

Popisuje vlastnosti, které mohou být studovány a ověřovány v době analýzy/překladu programu. Např typová kompatibilita, existence proměnných

29
Q

Dynamická sémantika

A

Popisuje vlastnosti, jejichž splnění lze ověřit až v době běhu programu (velikost indexu pole daného výrazem, velikost výsledku,apod.)

30
Q

Deklarace

A

Úplně vymezuje atrbiuty dané entity

Může být explicitní implicitní.

Dává překladači vědět, že nějaká taková proměnná (fce) o takovém typu tady je, ale nepřiděluje ji místo v paměti.

Implicitní - Python (nemáme typy)
Explicitní - C (zobrazujeme typ)

31
Q

Definice

A

Úplně vymezuje atributy dané entity

U proměnných vymezuje způsob alokace paměti

U funkci vymezuje navíc tělo funkce

32
Q

Vazby

A

Tím jak dochází k definicím, či deklaracím v rámci vytvářeného programu, dochází také k definici vazeb mezi entitou a jejími vlastnostmi/atributy.

Může vznikat v různých časech:
Během definice samotného jazyka - množina operací nad daným typem
Během implementace programu - přiřazení typu proměnné
Během překladu programu - inicializační hodnota proměnné
Během spojování přeložených modulů
během spouštění programů - navázání na standardní vstup
V době běhu programu - přiřazení adresy lokální proměnné

Vazby jsou buď:
Statické - po vytvoření jsou neměnné
Dynamické - jsou za běhu programu měnitelné

33
Q

Vlastnosti proměnné

A
Jméno
Adresa a umístění/lokace v paměti
hodnoty, kterých může nabývat
typ
doba života
rozsah platnosti (scope)
34
Q

Vlastnosti proměnné - jméno

A

Identifikuje proměnnou v programu.

Efektivní délka - udává počet znaků jména, které jsou skutečně zpracované (může se lišit od maximální délky)

Povolené znaky: často to jsou znaky anglické abecedy, čísla a některé povolené znaky.

Case Sensitive x Case insensitive (Case sensitive - C, Python, Case insensitive - SQL, VHDL)

Množina zakázaných identifikátorů (klíčová slova) - Jména rezervovaná pro in-built konstrukce programu.
Množina zakázaných identifikátorů (rezervovaná slova)
rezervované pro další verze programu

35
Q

Vlastnosti proměnné - umístění a adresa, hodnota

A

Mějme přiřazovací příkaz L = R

Proměnná na levé straně určuje umístění (typ paměti ve které leží) a adresu v rámci tohoto umístění, která se označuje jako L-hodnota.

Proměnná na pravé straně reprezentuje hodnotu, kterou obsahuje.

Jméno proměnné může být spojováno s více umístěními (V rámci funkcí můžeme mít v každé funkci proměnnou o stejném jméně a jiném typu)

Jedna adresa může být spojována s více různými jmény (ukazatel na proměnnou a proměnná)

Vazba mezi umístěním, adresou a jménem proměnné, případně její hodnotou může být statická či dynamická.

Statická (statické proměnné, či globální proměnné) nebo dynamická (proměnné umístěné na zásobníku nebo haldě, kde dealokace je implicitní (java) nebo epxlicitní (c), nebo automatické

36
Q

Vlastnosti proměnné - typ proměnné

A

Určuje množinu možných hodnot, kterých může proměnná nabývat a dále množinu operací, které na ni lze aplikovat.

Vazba mezi typem a proměnnou je často statická a vyžaduje explicitní deklaraci či definici. (C, C++)

Implicitní definice se statickou vazbou je typická např. pro fortran, Go

Dynamická vazba tohoto druhu je u skriptovacích jazyků a interpretů, kde dochází také k dynamické typové kontrole (Python, Perl)

37
Q

Rozdělení jazyků z hlediska typovosti

A

Beztypové (type-less)
Netypované (non-typed)
Typované (C, Java, C++) - přiřazení typů může být explicitní, nebo automaticky odvozené

38
Q

Vlastnosti proměnné - Rozsah platnosti proměnné (Scope)

A

Určuje část programu, kde je možné s proměnnou pracovat.

Termín je spojen s viditelností proměnné. Ikdyž je proměnná platná, může být skryta jinou porměnnou stejného jména. (Např. lokální proměnná zakryje globální)

Statická vazba - je dána strukturou programu (Lexical scoping)

Dynamická vazba - Proměnné jsou viditelné a přístupné do další definice (moc se nepoužívá, vůbec spíš)

39
Q

Vlastnosti proměnné - Doba života proměnné

A

Je časový interval, po který je pro danou proměnnou alokována paměť

Alokace může probíhat staticky (před během programu), nebo dynamicky. Dynamická alokace může být automatická (lokální proměnné) nebo na haldě

40
Q

Druhy proměnných v PHP

A

Local Variable - Přístup jen v rámci funkce, kde byla deklarovaná. Po skončení funkce se její hodnota ztrácí

Global variable - Přístup k ní je kdekoliv v programu. Pokud ji chci upravit ve funkce, musím použít slovo GLOBAL nebo k ní přístupovat přes pole $GLOBALS

Static variable - deklaruje se ve funkci pomocí klíčového slova STATIC. Po skončení funkce se její hodnota zachová pro další použití. Lokální rozsah platnosti