3. „Používat nějaký nástroj na počítači vyžaduje zřídkakdy více
než umět klikat myší; vytvořit takový nástroj vyžaduje
rozumět tajemnému umění programovat počítač“
— John Maeda, Creative Code
Úvod do programování Přednáška 2
10. Algoritmus je konečný seznam uspokojivě
definovaných instrukcí pro splnění určitého
úkolu. Z počátečního stavu algoritmus skončí
v definovaném konečném stavu.
— Wikipedia
Úvod do programování Přednáška 2
11. 1. Nalít olej do pánve
2. Zapálit plyn
3. Vzít vejce
4. Rozklepnout vejce o okraj pánve
Úvod do programování Přednáška 2
12. ? Vzít pánev
1. Nalít olej do pánve
2. Zapálit plyn
3. Vzít vejce
4. Rozklepnout vejce o okraj pánve
Úvod do programování Přednáška 2
13. ? Najít pánev
? Najít olej
1. Nalít olej do pánve
2. Zapálit plyn
3. Vzít vejce
4. Rozklepnout vejce o okraj pánve
Úvod do programování Přednáška 2
14. ? Najít pánev
? Najít olej
1. Nalít olej do pánve
2. Zapálit plyn
? Čím zapálit plyn
3. Vzít vejce
4. Rozklepnout vejce o okraj pánve
Úvod do programování Přednáška 2
15. ? Najít pánev
? Najít olej
1. Nalít olej do pánve
2. Zapálit plyn
? Čím zapálit plyn
3. Vzít vejce
4. Rozklepnout vejce o okraj pánve
Úvod do programování Přednáška 2
16. ? Najít pánev
Fatal Error
? Najít olej
Do!lyNalít olej do pánve
1. vejce
2. Zapálit plyn
? Čím zapálit plyn
Cancel OK
3. Vzít vejce
4. Rozklepnout vejce o okraj pánve
Úvod do programování Přednáška 2
17. JEDNODUCHÝ ALGORITMUS
Nalezení největšího čísla
z neuspořádaného seznamu čísel
1. Předpokládejme, že první číslo v seznamu je největší.
2. Podívejme se na postupně na každé zbývající číslo v seznamu. Pokud je
větší než dosud největší číslo, zapišme si je.
3. Jakmile jsme prošli všechna čísla, je poslední zapsané číslo největším
číslem v seznamu.
Úvod do programování Přednáška 2
18. Java
ZÁPIS V PROGRAMOVACÍM JAZYCE
1 class MaxApp {
2 public static void main (String args[]) {
3 int[] input = {1, 5, 3, 95, 43, 56, 32, 90, 2, 4, 19};
4 int largest = input[0];
5 for (int i = 0; i < input.length; i++) {
6 if (input[i] > largest)
7 largest = input[i];
8 }
9 System.out.println(quot;Nejvyšší číslo je: quot; + largest + quot;nquot;);
10 }
11 }
Úvod do programování Přednáška 2
19. Ruby
ZÁPIS V PROGRAMOVACÍM JAZYCE
1 input = [1, 5, 3, 95, 43, 56, 32, 90, 2, 4, 19]
2 largest = input.first
3 input.each do |i|
4 largest = i if i > largest
5 end
6 print quot;Nejvyšší číslo je: #{largest} nquot;
Úvod do programování Přednáška 2
25. Co je to programovací jazyk?
Úvod do programování Přednáška 2
26. Algoritmus je konečný seznam uspokojivě
definovaných instrukcí pro splnění určitého
úkolu. Z počátečního stavu algoritmus skončí
v definovaném konečném stavu.
— Wikipedia
Úvod do programování Přednáška 2
27. Programovací jazyk je umělý jazyk, který
slouží k formální zápisu algoritmu.
Úvod do programování Přednáška 2
28. Počítač nedělá to, co chceme, aby dělal.
Počítač dělá přesně to, co mu řekneme, aby dělal.
Úvod do programování Přednáška 2
40. Difference Engine (1822—1849)
→ Mechanický stroj
→ Zpracování složitých výpočtů
→ Nahrazení lidské práce (logaritmické tabulky)
→ Babaggovi pokračovatelé jej skutečně sestrojili
Úvod do programování Přednáška 2
41. Analytical Engine (1837—1871)
→ Parní stroj (externí zdroj energie)
→ Vstup pomocí děrných štítků
→ Výstup: text, obraz a zvuk (!)
→ Výstup: děrné štítky (!) „meta-programming“
→ Nerealizován
Úvod do programování Přednáška 2
42. …the Engine might compose elaborate and scientific
pieces of music of any degree of complexity or extent.
— Ada Lovelace (1843)
Úvod do programování Přednáška 2
45. von Neumannova architektura
→ Oddělení řídící jednotky a paměti
→ Společná paměť pro programy (instrukce) a pro data
→ (modifikovatelnost instrukcí programem)
→ Základní důsledek: počítač je univarzální a lze jej
přeprogramovat
Úvod do programování Přednáška 2
47. ENIAC — „Program“ je nastavení kabelů a přepínačů do programování
Úvod Přednáška 2
48.
49. Konrad Zuse, 1943
Plankalkül (Gottlob Frege: Begriffsschrift — eine der arithmetischen
nachgebildete Formelsprache des reinen Denkens, 1879)
John von Neumann, 1945
DVA ZÁKLADNÍ PRINCIPY:
„Shared-program technique“ — hardware mý být jednoduchý,
nikoliv mít napevno zadané instrukce. Má být řízen komplexními
instrukcemi, aby bylo možné hardware snadno přeprogramovat.
„Conditional control transfer“ — pojem sub-routine, malého bloku
kódu, který lze opakovaně volat a znovu použít. Základní idea, která
odlišuje počítačový program od kuchynského receptu (sekvenční,
ˇ
chronologický). Kód je zapisován binárně, tzn. pomocí „nul a jedniček“.
Grace Hopper, 1952
První kompilátor, překladač, který překládá z kódu v lidském jazyce do
jazyka počítače pro programovací jazyk A-0.
Úvod do programování Přednáška 2
50. FORTRAN, 1954
IF, DO (smyčky), GOTO, true/false a základní datové typy (řetězce, čísla)
Lisp, 1958
Dynamické typování, objektově-orientovaný, matematická syntax, rekurze
COBOL, 1959
Grace Hopper: Programovací jazyk by se měl podobat více přirozenému jazyku
než jazyku strojů.
Common Business Oriented Language: SUBTRACT DISCOUNT FROM COST GIVING FINAL-COST.
Smalltalk, 1972
Xerox PARC, objekty a třídy, „čistě objektový“, reflektivní, modifikovatelný za
běhu
C, 1972
Optimalizovaný, rychlý. Často slouží jako interpreter vyšších programovacích
jazyků.
Úvod do programování Přednáška 2
51. Perl, 1987
Skriptovací jazyk, práce s textem, knihovny (CPAN), duct-tape of the internet
Java, 1995
Objektový, nezávislý na platformě (Write once, run anywhere). Java <applet>
běží v internetových prohlížečích.
PHP, 1995
Dynamické webové stránky — snadná integrace, zprovoznění. Masivní rozšíření
— tzv. LAMP.
Úvod do programování Přednáška 2
52. ˚
„GENERACE“ PROGRAMOVACÍCH JAZYKU
První generace
Strojový kód: 0 a 1. První počítače: přepínače, nikoliv text. Absolutní výkon.
Závislý na hardware.
Příklad: 10110000 01100001
Druhá generace
Assembler (assembly language). Závislý na hardware.
Příklad: mov al, 61h
Třetí generace
Čitelný a snadno zapsatelný lidmi. Většina moderních jazyků.
Příklad: let b = c + 2 * d
Čtvrtá generace
Reportovací nástroje, SQL (structured query language), domain-specific languages.
Navržené pro konkrétní účel.
Příklad: SELECT * FROM employees ORDER BY surname
Pátá generace
Synonymum pro vizuální programování nebo označení vývoje pomocí definic
omezení, stroj sám má zkonstruovat algoritmus. Akademické použití.
Úvod do programování Přednáška 2
53. PŘÍSTUPY K PROGRAMOVÁNÍ (PARADIGMATA)
Procedurální programování
Bud´synonymum pro imperativní programování — prostá posloupnost kroků
(„recept“). Nebo označení pro programování stylem volání procedur (rutina,
sub-rutina, funkce). Modularita.
Zejména: PHP, Perl
Objektově orientované programování
Objekty, jejich vlastnosti a vztahy (Malý pes štěká na chlapce). Dědičnost,
modularita, polymorfismus, zapouzdření.
Zejména: Java, Ruby
Funkční programování
Nepopisuje kroky algoritmu, ale matematické vztahy.
Zejména: Lisp, Erlang
Vizuální programování
Vytváření instrukcí a posloupností vizuálně, pomocí grafických reprezentací,
nikoliv textem.
Zejména: Max/MSP, Apple Automator
Úvod do programování Přednáška 2
56. The days when it made sense to do your own memory management in a new
program are long over, outside of a few specialty areas like kernel hacking,
scientific computing and 3-D graphics—places where you absolutely must get
maximum speed and tight control of memory usage, because you need to push
the hardware as hard as possible.
For most other situations, accepting the debugging overhead of buffer overruns,
pointer-aliasing problems, malloc/free memory leaks and all the other associated
ills is just crazy on today's machines. Far better to trade a few cycles and a few
kilobytes of memory for the overhead of a scripting language's memory manager
and economize on far more valuable human time.
— Eric Raymond, Why Python?
Úvod do programování Přednáška 2