1. Úvod. Obsah předmětu =komparativní studie program. jazyků

Podobné dokumenty
1. Úvod. Podmínky absolvování

1. Úvod. Obsah předmětu =komparativní studie programovacích jazyků

IB111 Programování a algoritmizace. Programovací jazyky

1 Základních pojmy z oblasti programování, vyšší programovací jazyky, programovací paradigmata

IB111 Úvod do programování skrze Python Přednáška 13

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Úvod. Programovací paradigmata

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Program a životní cyklus programu

Programovací jazyky. Obsah. Proč používáme programovací jazyky? Programovací jazyk

DTP Základy programování Úvod do předmětu

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Masarykova střední škola zemědělská a Vyšší odborná škola, Opava, příspěvková organizace

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Algoritmizace. Cíle předmětu

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

Matematika v programovacích

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

IB111 Úvod do programování skrze Python Přednáška 13

Softwarové komponenty a Internet

Předměty. Algoritmizace a programování Seminář z programování. Verze pro akademický rok 2012/2013. Verze pro akademický rok 2012/2013

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

KTE / ZPE Informační technologie

Struktura programu v době běhu

PB161 Programování v jazyce C++ Přednáška 7

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Programovací jazyky. Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 /

PB161 Programování v jazyce C++ Přednáška 7

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE STRUKTURA PŘEKLADAČE

Programovací jazyk univerzální notace pro zápis algoritmů, implementována.

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/ Vzdělávání v informačních a komunikačních technologií

Algoritmizace a programování

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Profilová část maturitní zkoušky 2017/2018

Programovací jazyky Přehled a vývoj

1. Programování proti rozhraní

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Funkcionální programování. Kristýna Kaslová

3 Co je algoritmus? Trocha historie Definice algoritmu Vlastnosti algoritmu... 3

11. Přehled prog. jazyků

Poslední nenulová číslice faktoriálu

Objektově orientované programování

Programování a algoritmizace

Úvod z historie. Kompilátory. Kompilace / Kompilátor Compile / Compiler. Pojem kompilátoru. Úvod z historie

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Úvod do programování - Java. Cvičení č.4

Algoritmizace. Algoritmizace (Y36ALG), Šumperk - 1. přednáška 1

Úvod do programovacích jazyků (Java)

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Úvod do programovacích jazyků (Java)

VISUAL BASIC. Přehled témat

Sémantika Tabulka symbolů Intermediální kód Typová kontrola, přetypování Statická a dynamická sémantika. Sémantická analýza.

Základní způsoby: -Statické (přidělění paměti v čase překladu) -Dynamické (přiděleno v run time) v zásobníku na haldě

Paradigmata programování 1

Úvod. doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Ukazka knihy z internetoveho knihkupectvi

Programovací jazyk Pascal

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Skriptovací jazyky. Obsah

Úvod. Co je to programovací jazyk? Proč studovat programovací jazyky? Klasifikace jazyků

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Jaký programovací jazyk učit jako první a jak ho učit?

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Maturitní témata Školní rok: 2015/2016

Základy programování Programovací jazyky. doc. RNDr. Petr Šaloun, Ph.D. VŠB-TUO, FEI (přednáška připravena z podkladů Ing. Michala Radeckého)

Lexikální analýza Teorie programovacích jazyků

Maturitní témata. IKT, školní rok 2017/18. 1 Struktura osobního počítače. 2 Operační systém. 3 Uživatelský software.

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

PROGRAMOVÉ STRUKTURY: ÚVOD DO PŘEDMĚTU

1. Úvod, historie programovacích jazyků, paradigmata programování. 2. Paradigmata programování, syntaxe, sémantika

Profilová část maturitní zkoušky 2013/2014

TÉMATICKÝ OKRUH Softwarové inženýrství

Virtuální počítač. Uživatelský program Překladač programovacího jazyka Operační systém Interpret makroinstrukcí Procesor. PGS K.

8 Třídy, objekty, metody, předávání argumentů metod

Kapitola 1: Úvod. Systém pro správu databáze (Database Management Systém DBMS) Účel databázových systémů

IB015 Neimperativní programování. Organizace a motivace kurzu, programovací jazyk Haskell. Jiří Barnat

Programovací jazyky. Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 /

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Úvod do programování

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Vstupní požadavky, doporučení a metodické pokyny

První kapitola úvod do problematiky

Obsah. Úvod 11 Základy programování 11 Objektový přístup 11 Procvičování 11 Zvláštní odstavce 12 Zpětná vazba od čtenářů 12 Errata 13

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 /

Překladač a jeho struktura

Programování II. Modularita 2017/18

Sada 1 - Základy programování

Úvod. Proč studovat programovací jazyky? Klasifikace jazyků. Co je to programovací jazyk?

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Transkript:

1. Úvod Obsah předmětu =komparativní studie program. jazyků Vývoj programovacích jazyků, styly a vlastnosti Logické programování - Prolog Funkcionální programování - Lisp Datové abstrakce a modulární programování Objektově orientované programování - Java, Obj.Pascal, Ada95, C++ Vizuální programování Eclipse-visual editor Zpracování výjimečných situací Paralelní programování Porovnání vlastností imperativních jazyků Úvod do překladačů PGS - 1.Úvod K.Ježek 2006 1

Podmínky absolvování Podmínky udělení zápočtu: Předvedení programu v Prologu Předvedení programu v Lispu Zpracování referátu z Delphi nebo Zpracování referátu s použitím vizuálních neklasických konstrukcí - archivace Min 20b. Max 40b Forma zkoušky písemný test s příklady - archivace Min 30b. Max 60b Termíny zkoušky: řádný 1.opravný 2.opravný (poslední) PGS - 1.Úvod K.Ježek 2006 2

Vývoj programovacích jazyků Konec 40. let odklon od strojových kódů Pseudokódy: Pseudooperace aritm. a matem. funkcí Podmíněné a nepodmíněné skoky Autoinkrement. registry pro přístup k polím PGS - 1.Úvod K.Ježek 2006 3

Vývoj programovacích jazyků 50. léta první definice vyššího programovacího jazyka (efektivita návrhu programu) FORTRAN (formula translation - Backus), vědeckotechnické výpočty, komplexní výpočty na jednoduchých datech, pole, cykly, podmínky COBOL (common business lang.), jednoduché výpočty, velká množství dat, záznamy, soubory, formátování výstupů ALGOL (algorithmic language - Backus, Naur), předek všech imperativních jazyků, bloková struktura, rekurze, volání param. hodnotou, deklarace typů nové idee - strukturování na podprogramy, přístup ke globálním datům (Fortan), bloková struktura, soubory, stále živé - Fortran90, Cobol ------------------------------------------------------------------------------------ PGS - 1.Úvod K.Ježek 2006 4

Vývoj programovacích jazyků první polovina 60. let začátek rozvoje neimperativních jazyků LISP (McCarthy) - založen na teorii rekurzivních funkcí, první funkcionální jazyk, použití v UI (symbolické manipulace) APL - manipulace s vektory a s maticemi SNOBOL (Griswold) - manipulace s řetězci a vyhledávání v textech, podporuje deklarativní programování vzniká potřeba dynamického ovládání zdrojů, potřeba symbolických výpočtů ------------------------------------------------------------------------------------- PGS - 1.Úvod K.Ježek 2006 5

Vývoj programovacích jazyků pozdní 60. léta IBM snaha integrovat úspěšné koncepty všech jazyků -vznik PL/1 (moduly, bloky, dynamické struktury) nové prvky PL/1 - zpracování výjimek, multitasking. Nedostatečná jednotnost konstrukcí, komplikovanost ALGOL68 - ortogonální konstrukce, první jazyk s formální specifikací (VDL), uživatelsky málo přívětivý, typ reference, dynamická pole SIMULA67 (Nygaard, Dahl) - zavádí pojem tříd, hierarchie ke strukturování dat a procedur, ovlivnila všechny moderní jazyky, corutiny BASIC (Kemeny) - žádné nové konstrukce, určen začátečníkům, obliba pro efektivnost a jednoduchost, interaktivní styl programování Pascal (Wirth) - k výuce strukturovaného programování, jednoduchost a použitelnost na PC zaručily úspěch ------------------------------------------------------------------------------------ PGS - 1.Úvod K.Ježek 2006 6

Vývoj programovacích jazyků 70. léta důraz na bezpečnost a spolehlivost abstraktní datové typy, moduly, typování, dokazování správnosti, práce s výjimkami CLU (datové abstrakce), Mesa (rozšíření Pascalu o moduly), Concurrent Pascal, Euclid (rošíření Pascalu o abstraktní datové typy) C (Ritchie) - efektivní pro systémové programování, efektivní implementace na různých počítačích, slabé typování Scheme - rozšířený dialekt LISPu PROLOG (Colmeraurer) - první logicky orientovaný jazyk, používaný v UI a znalostních systémech, neprocedurální, inteligentní DBS odvozující pravdivost dotazu ---------------------------------------------------------------------------------- PGS - 1.Úvod K.Ježek 2006 7

Vývoj programovacích jazyků 80. léta Modula2 (Wirth) - specifické konstrukce pro modulární programování další rozvoj funkcionálních jazyků - Scheme (Sussman, Steele, MIT), Miranda (Turner), ML (Milner) - typová kontrola ADA (US DOD) syntéza vlastností všech konvenčních jazyků, moduly, procesy, zpracování výjimek průlom objektově orientovaného programování - Smalltalk (Key, Ingalls, Xerox: Datová abstrakce, dědičnost, dynamická vazba typů), C++ (Stroustrup 85- C a Simula) další OO jazyky - Eiffel (Mayer), Modula3, Oberon (Wirth) OPS5, CLIPS - pro zpracování znalostí ---------------------------------------------------------------------------------- PGS - 1.Úvod K.Ježek 2006 8

Vývoj programovacích jazyků 90. léta jazyky 4.generace, QBE, SQL - databázové jazyky Java (SUN) - mobilita kódu na webu, nezávislost na platformě vizuální programování (programování ve windows) - Delphi, Visual Basic, Visual C++ jazyky pro psaní CGI skriptů: Perl (Larry Wall - Pathologically Eclectic Rubbish Lister) - nástroj pro webmastery a administrátory systémů, JavaScript - podporován v Netscape i v Explorer, VBScript, PHP freeware 2000 C Sharp PGS - 1.Úvod K.Ježek 2006 9

Vývoj programovacích jazyků (Fortran) Fortran 0 1954 neimplementován Fortran 1 1957 (hlavní kriterium=efektivita) Bez dynamické paměti Rychlý přístup k polím (posttest for cyklus) Jména max 6 znaková Formátovaný I/O Uživatelské podprogramy Třícestná selekce (aritmetický IF) 18 člověkoroků implementace PGS - 1.Úvod K.Ježek 2006 10

Vývoj programovacích jazyků (Fortran ) Fortran II 1958 Separátní překlad Fortran IV 1960-1962 Explicitní deklarace typů Logický IF příkaz Podprogramy s parametry ANSI standard 1966 PGS - 1.Úvod K.Ježek 2006 11

Vývoj programovacích jazyků (Fortran ) Fortran 77-1978 Manipulace s řetězci znaků IF THEN ELSE příkaz Log. hodnotou řízený cyklus Fortran 90-1990 Moduly, Kontrola typů parametů Dynamická pole, Ukazatele Casepříkaz Rekurze PGS - 1.Úvod K.Ježek 2006 12

Paradigmata programování Paradigma = souhrn způsobů formulace problémů, metodologických prostředků řešení, metodik zpracování a pod. Procedurální (imperativní) programování Objektově orientované programování Deklarativní programování Aplikativní programování Funkcionální programování Logické programování Programování ohraničeními (constraint progr.) Vizuální programování Souběžné programování - paralelní - distribuované PGS - 1.Úvod K.Ježek 2006 13

Procedural OOP Declarative Visual Concurrent (Imperative) Applicative Constraint Parallel Distributed Functional Logical Koexistence paradigmat PGS - 1.Úvod K.Ježek 2006 14

#include <stdio.h> int nsd(int u, int v) { if (v == 0) return u; else return nsd (v, u % v); } main() { int x, y; printf("vstup dvou celych cisel:\n"); scanf("%d%d",&x,&y); printf("nsd z %d a %d je %d\n",x,y,nsd(x,y)); getchar(); getchar(); } PGS - 1.Úvod K.Ježek 2006 15

import java.io.*; class IntWithNsd { public IntWithNsd( int val ) { value = val; } public int getvalue() { return value; } public int nsd ( int v ) { int z = value; int y = v; while ( y!= 0 ) { int t = y; y = z % y; z = t; } return z; } private int value; } class NsdProg { public static void main (String args[]) { System.out.println(" vstup dvou celych cisel:"); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); try { IntWithNsd x = new IntWithNsd(Integer.parseInt(in.readLine())); int y = Integer.parseInt(in.readLine()); System.out.print(" nsd z " + x.getvalue() + " a " + y + " je "); System.out.println(x.nsd(y)); } catch ( Exception e) { System.out.println(e); System.exit(1); } } } PGS - 1.Úvod K.Ježek 2006 16

nsd(u, V, U) :- V = 0. nsd(u, V, X) :- not(v = 0), Y is U mod V, nsd(v, Y, X). PGS - 1.Úvod K.Ježek 2006 17

(defun nsd (u v) (if (= v 0) u (nsd v (mod u v)))) PGS - 1.Úvod K.Ježek 2006 18

with TEXT_IO; use TEXT_IO; procedure nsd_prog is function nsd (u, v: in integer) return integer is y, t, z: integer; begin z := u; y := v; loop exit when y = 0; t := y; y := z mod y; z := t; end loop; return z; end nsd; package INT_IO is new INTEGER_IO(Integer); use INT_IO; x: Integer; y: Integer; begin put_line("vstup dvou celych cisel:"); get(x); get(y); put("nsd z "); put(x); put(" and "); put(y); put(" je "); put(nsd(x,y)); new_line; end nsd_prog; PGS - 1.Úvod K.Ježek 2006 19

Globální kriteria na programovací jazyk 1. Spolehlivost 2. Efektivita 3. Strojová nezávislost 4. Čitelnost a vyjadřovací schopnosti 5. Řádně definovaná syntax a sémantika 6. Úplnost v Turingově smyslu PGS - 1.Úvod K.Ježek 2006 20

Globální kriteria na programovací jazyk Ad 1 Typová kontrola Zpracování výjimečných situací Ad 2 Ef. Překladu Ef. výpočtu PGS - 1.Úvod K.Ježek 2006 21

Globální kriteria na programovací jazyk Ad 4 jednoduchost (kontra př.: C=C+1; C+=1; C++; ++C) Ortogonalita (malá množina primitivních konstrukcí,z té lze kombinovat další konstrukce. Všechny kombinace jsou legální) kontra př. v C: struktury mohou být funkční hodnotou Pole nemohou Strukturované příkazy Strukturované datové typy Podpora abstrakčních prostředků PGS - 1.Úvod K.Ježek 2006 22

Globální kriteria na programovací jazyk Ad 4 Strojová čitelnost = existence algoritmu překladu s lineární časovou složitostí = bezkontextová syntax Humánní čitelnost silné odvisí od způsobu abstrakcí abstrakce dat abstrakce řízení čitelnost kontra zapisovatelnost PGS - 1.Úvod K.Ježek 2006 23

Globální kriteria na programovací jazyk Ad 5 Syntax = forma či struktura výrazů, příkazů a programových jednotek Sémantika = význam výrazů, příkazů a programových jednotek Definici jazyka potřebují návrháři jazyka implementátoři uživatelé PGS - 1.Úvod K.Ježek 2006 24

Globální kriteria na programovací jazyk Ad 6 Turingův stroj = jednoduchý ale neefektivní počítač použitelný jako formální prostředek k popisu algoritmu Programovací jazyk je úplný v Turingově smyslu, jestliže je schopný popsat libovolný výpočet (algoritmus) Co je potřebné pro Turingovu úplnost? Téměř nic: Stačí celočíselná aritmetika a celočíselné proměnné spolu se sekvenčně prováděnými příkazy zahrnujícími přiřazení a cyklus (While) PGS - 1.Úvod K.Ježek 2006 25

Syntax Formálně je jazyk množinou vět Věta je řetězcem lexémů (terminálních symbolů) Syntax lze popsat: Rozpoznávacím mechanismem - automatem (užívá jej překladač) Generačním mechanismem gramatikou (to probereme) PGS - 1.Úvod K.Ježek 2006 26

Syntax Gramatika je čtveřice (N, T, P, S) Bezkontextová gramatika Backus Naurova forma (BNF) používá metajazyk <program> <seznam deklaraci> ; <prikazy> <seznam deklaraci> <deklarace> <deklarace>;<seznam deklaraci> <deklarace> <spec. typu> <sez. promennych> PGS - 1.Úvod K.Ježek 2006 27

Syntax Syntaktické diagramy program seznam deklaraci ; prikazy Seznam deklarací deklarace deklarace ; Seznam deklaraci PGS - 1.Úvod K.Ježek 2006 28

Derivace Syntax <program> => <seznam deklaraci> ; <prikazy> => <deklarace> > ; <prikazy> =>int x ; <prikazy> => int x;<prikaz> ; <prikazy> => int x ; read(x);<prikazy> => int x ; read(x) ; <prikazy> => Derivační strom PGS - 1.Úvod K.Ježek 2006 29

Sémantika A. Statická sémantika B. Dynamická sémantika ad B Operační sémantiky Axiomatické sémantiky Denotační sémantiky PGS - 1.Úvod K.Ježek 2006 30

Překlad jazyka Kompilátor: dvoukrokový proces překládá zdrojový kód do cílového kódu. Následně uživatel sestaví a spustí cílový kód Interpret: jednokrokový proces, zdrojový kód je rovnou prováděn Hybridní: např. Java Byte-code soubory *.class interpretován nebo přeložen JIT kompilátorem *.exe soubor PGS - 1.Úvod K.Ježek 2006 31

Klasifikace chyb Lexikální - např nedovolený znak Syntaktické -chyba ve struktuře Statické sémantiky např nedefinovaná proměnná, chyba v typech. Způsobené kontextovými vztahy. Nejsou syntaktické Dynamické sémantiky např dělení 0. Nastávají při výpočtu, neodhalitelné při překladu. Nejsou syntaktické Logické chyba v algoritmu Kompilátor schopen nalézt lexikální a syntaktické při překladu Statické sémantiky chyby může nalézt až před výpočtem Nemůže při překladu nalézt chyby v dynamické sémantice, projeví se až při výpočtu Žádný překladač nemůže hlásit logické chyby Interpret obvykle hlásí jen lexikální a syntaktické chyby když zavádí program PGS - 1.Úvod K.Ježek 2006 32

Klasifikace chyb př. Java public int nsd ( int v# ) { int a = value b = v; while ( b!= 0 ) { int p = b; b = a % b; a = p; } return b; } PGS - 1.Úvod K.Ježek 2006 33

Zdroje Catalog of Free Compilers and Interpreters. http://www.idiom.com/freecompilers/ Free electronic book http://www.mindview.net/books http://wwwcgi.cs.cmu.edu/afs/cs.cmu.edu/user/dst/www/lispbook/index.html http://www.lisp.org/alu/res-lisp-education.clp http://clisp.cons.org Raphael Finkel:Advanced Programming Language Design http://cseng.aw.com/book/0,3828,0805311912,00.html R.W.Sebesta: Concepts of Programming Languages M.L.Scott: Programming Languages Pragmatics Ježek, Racek, Matějovič: Paralelní architektury a programy Herout: Učebmice jazyka Java Návrat, Bieliková: Funkcionálne a logické programovanie Kolář: Jazyky pro umělou inteligenci http://www.hitmill.com/programming/dotnet/csharp.html#courses PGS - 1.Úvod K.Ježek 2006 34