Programovací jazyky Ing. Marek Běhálek Katedra informatiky FEI VŠB-TUO A-1018 / 597 324 251 http://www.cs.vsb.cz/behalek marek.behalek@vsb.cz
Obsah Co je to programovací jazyk Překlad a zpracování programu Nástroje pro tvorbu programů Metody popisu programovacích jazyků Typy programovacích jazyků Vývoj programovacích jazyků Studijní program Informační technologie ZPP - Programovací jazyky 2
Programovací jazyk Popis výpočtů, obvykle ve tvaru, jenž umožňuje provedení elektronickým počítačem (program) Standardizovaný nástroj pro komunikaci s počítačem S jakými daty má počítač pracovat? Jak se tato data budou ukládat a přenášet? Které akce a kdy se mají provést? ZPP - Programovací jazyky 3
Proč používáme programovací jazyky? Zjednodušují přenos určitého typu informace Noty v hudbě Matematické formule Elektrotechnická schémata Vyznačují se velkou přesností vyjádření Přirozené jazyky vynechávání, gramatické chyby, víceznačnost Jsou obvykle proveditelné na počítači Značkovací jazyky (HTML) data, ne program Specifikační jazyky (λ-kalkul) teoretický výzkum ZPP - Programovací jazyky 4
Životní cyklus softwarového produktu Rozhodnutí o vytvoření produktu Specifikace požadavků Analýza a návrh aplikace Implementace Testování a ladění Dokumentace Instalace Marketing, prodej a podpora Údržba Ukončení prodeje a podpory ZPP - Programovací jazyky 5
Překlad a zpracování programu Ladění Neúspěšné testy Zdrojový text programu Překlad a sestavení Testování Provoz Chyby při překladu Chyby za provozu ZPP - Programovací jazyky 6
Nástroje pro tvorbu programů Editor Překladač / interpret x zpětný překladač Spojovací program Správa verzí Nástroje pro sestavení projektu Testovací nástroje, generátory testů Ladicí programy Nástroje pro ladění výkonu Nástroje pro tvorbu dokumentace Tvorba instalačních balíků Další nástroje: Internacionalizace (i18n)... ZPP - Programovací jazyky 7
Integrovaná vývojová prostředí (IDE) Poskytují více uvedených funkcí současně Prostředí orientovaná na určitý jazyk Borland Pascal, C++, JBuilder, C#Builder SharpDeveloper, JCreator, NetBeans Univerzální prostředí Eclipse (Java, C++, C#, ) MS Visual Studio (C++, C#, Jscript, VB, ) ZPP - Programovací jazyky 8
Eclipse ZPP - Programovací jazyky 9
JBuilder ZPP - Programovací jazyky 10
MS Visual Studio ZPP - Programovací jazyky 11
Překladač Analýza zdrojového textu, vyhledání chyb Základní stavební prvky identifikátory, čísla, řetězce, operátory, oddělovače, Programové konstrukce deklarace, příkazy, výrazy Kontextové vazby definice/užití, datové typy Syntéza cílového programu / Interpretace Strojový jazyk (nebo JSI) Jazyk virtuálního procesoru (JVM, CLR) ZPP - Programovací jazyky 12
Typy překladače Kompilační překladač Interpretační překladač ZPP - Programovací jazyky 13
Překladač Inkrementální překlad Umožňuje po drobné opravě přeložit jen změněnou část Možnost provádění drobných změn během ladění programu Just-in-time překlad Generování instrukcí virtuálního procesoru (Java VM -.class,.net CLR jazyk IL) Překlad až v okamžiku volání podprogramu Optimalizace podle konkrétního procesoru ZPP - Programovací jazyky 14
Překlad C++ ZPP - Programovací jazyky 15
Popis programovacího jazyka Syntaxe - struktura jazykových konstrukcí Textové jazyky (C, Pascal, Java) Grafické jazyky (vývojové diagramy, UML) ano a > 10 x := x + 5 ne if a > 10 then begin x := x + 5; end ZPP - Programovací jazyky 16
Popis programovacího jazyka Sémantika význam jazykových konstrukcí Statická sémantika v době překladu Dynamická sémantika v době běhu Příklad: Co znamená X + 1? X je celé číslo: Přičti k hodnotě proměnné X jedničku. X je řetězec: Převeď konstantu 1 na řetězec a připoj na konec řetězce uloženého v proměnné X. X je objekt: Zavolej metodu "operator + s parametrem 1. X je reálné číslo: Převeď 1 na reálné číslo 1.0 a přičti k hodnotě proměnné X. ZPP - Programovací jazyky 17
Metody popisu syntaxe Syntaktický diagram if podmínka then příkaz else příkaz Gramatika příkaz if podmínka then příkaz zbytek zbytek else příkaz ε ZPP - Programovací jazyky 18
Metody popisu sémantiky Slovní popis Nepřesný Formální popis Operační sémantika Význam konstrukce popíšeme pomocí jednodušších operací Denotační sémantika Význam konstrukce popíšeme pomocí funkcí Axiomatická sémantika ZPP - Programovací jazyky 19
Typy programovacích jazyků Imperativní jazyky Posloupnost příkazů měnících stav výpočtu Možnost opakovaného přiřazení do proměnné Deklarativní jazyky Posloupnost podmínek Počítač musí najít postup, jak je dodržet Funkcionální jazyky ML, Haskell, LISP Logické jazyky PROLOG, CLP, Gödel, Mercury Dotazovací jazyky - SQL ZPP - Programovací jazyky 20
Vývoj programovacích jazyků Strojové jazyky Posloupnost instrukcí v číselném tvaru Jazyky symbolických instrukcí / adres Pojmenované instrukce Pojmenované adresy proměnné, návěští skoků Makrodefinice Autokódy Složitější příkazy Příklad: MAT (Minsk autokód CTI, PIS, JDI NA, ) Vyšší programovací jazyky ZPP - Programovací jazyky 21
Vývoj přístupů k tvorbě programů (1) Monolitické programy upřednostnění úspornosti kódu na úkor srozumitelnosti a přehlednosti Strukturované metody hierarchie, abstrakce dynamické knihovny (DLL) vzdálené volání procedur (RPC) modulární programování (Modula-2) ZPP - Programovací jazyky 22
Vývoj přístupů k tvorbě programů (2) Objektově orientované technologie zapouzdření černá skříňka dědění polymorfismus znovupoužitelnost Komponentní technologie rozhraní standardy ZPP - Programovací jazyky 23
První programovací jazyky kolem 1946 Konrad Zuse Plankalkul použit také pro šachy rukopis publikován až v roce 1972, nebyl nikdy implementován 1949 John Mauchly - Short Code první počítačový jazyk skutečně použitý na elektronickém zařízení určen pro zadávání rovnic "ručně kompilovaný" jazyk 1951 Grace Murray Hopper prosazovala vytvoření vyšších jazyků pracovala na návrhu prvního překladače zavedla pojem "počítačový virus" ZPP - Programovací jazyky 24
FORTRAN (1954-57) FORmula TRANslator - John Backus, IBM problémově orientovaný, strojově značně nezávislý, optimalizace (nutná v konkurenci s JSI) realizace překladače si vyžádala 18 člověkoroků - jeden z největších projektů v té době Vsoučasnosti stále nejpoužívanější jazyk v oblasti vědeckotechnických výpočtů! (ISO: 1997) ZPP - Programovací jazyky 25
FORTRAN C C Vypocet funkce faktorial C INTEGER FUNCTION FACT(N) IMPLICIT NONE INTEGER N, I, F F = 1 DO 10 I = 1,N F = F * I 10 CONTINUE FACT = F END PROGRAM P1 IMPLICIT NONE INTEGER N, F, FACT READ(*,*) N F = FACT(N) WRITE(*,*) "Fact = ", F END ZPP - Programovací jazyky 26
LISP (1958-59) LISt Processing - John McCarthy, M. I. T. první funkcionální jazyk - implementace lambda-kalkulu možnost imperativního stylu programování dosud se používá i jako skriptovací jazyk v aplikacích (AutoCAD, emacs, ) ZPP - Programovací jazyky 27
LISP (defun quicksort (vec l r) (let ((i l) (j r) (p (svref vec (round (+ l r) 2)))) (while (<= i j) (while (< (svref vec i) p) (incf i)) (while (> (svref vec j) p) (decf j)) (when (<= i j) (rotatef (svref vec i) (svref vec j)) (incf i) (decf j))) (if (> (- j l) 1) (quicksort vec l j)) (if (> (- r i) 1) (quicksort vec i r))) vec) ZPP - Programovací jazyky 28
Algol 60 (1958-60) Algorithmic Language - J. Backus, P. Naur bloková struktura, složené příkazy, rekurze syntax poprvé popsána formálně gramatikou (BNF) koncem 60. let se stal nejpopulárnějším jazykem v Evropě např. i ve výuce základ mnoha dalších programovacích jazyků ZPP - Programovací jazyky 29
ALGOL 60 begin integer N; ReadInt(N); begin real array Data[1:N]; real sum, avg; integer i; sum:=0; for i:=1 step 1 until N do begin real val; ReadReal(val); Data[i]:=if val<0 then -val else val end; for i:=1 step 1 until N do sum:=sum + Data[i]; avg:=sum/n; PrintReal(avg) end end ZPP - Programovací jazyky 30
COBOL (1960) COmmon Business Oriented Language pro vytváření rozsáhlých programů k vládním a obchodním účelům formalizovaný anglický text, čitelný pro manažery zavedl propracované záznamové struktury vytvořen konferencí CODASYL (Conference of Data Systems and Languages) Dosud se používá zejména ve finančních institucích (ISO:2002, XML 2006) ZPP - Programovací jazyky 31
COBOL IDENTIFICATION DIVISION. PROGRAM-ID. Iter. AUTHOR. Michael Coughlan. DATA DIVISION. WORKING-STORAGE SECTION. 01 Num1 PIC 9 VALUE ZEROS. 01 Num2 PIC 9 VALUE ZEROS. 01 Result PIC 99 VALUE ZEROS. 01 Operator PIC X VALUE SPACE. PROCEDURE DIVISION. Calculator. PERFORM 3 TIMES DISPLAY "Enter First Number : " ACCEPT Num1 DISPLAY "Enter Second Number : " ACCEPT Num2 DISPLAY "Enter operator (+ or *) : " ACCEPT Operator IF Operator = "+" THEN ADD Num1, Num2 GIVING Result END-IF IF Operator = "*" THEN MULTIPLY Num1 BY Num2 GIVING Result END-IF DISPLAY "Result is = ", Result END-PERFORM. STOP RUN. ZPP - Programovací jazyky 32
BASIC (1964) Beginners All-Purpose Symbolic Instruction Code John G. Kemeny, Thomas E. Kurz, Dartmouth University první implementace je kompilátor (1. 5. 1964 04:00) 1975 Tiny BASIC běží na mikropočítači s 2KB RAM 1977 Bill Gates, Paul Allen Altair BASIC 1991 - VisualBasic, VBA, VBScript 2003 - VB.NET ZPP - Programovací jazyky 33
Pascal (1968-71) Niklaus Wirth, ETH Zurich jednoduchý jazyk, určen pro výuku programování P-kód instrukce virtuálního procesoru, specializované procesory pro P-kód Borland Turbo Pascal (Anders Hejlsberg) Borland Delphi -> Kylix ZPP - Programovací jazyky 34
Další jazyky 1980-83 Ada 1972 C 1972 Smalltalk 1982-85 C++ 1994-95 Java 2000-02 C# ZPP - Programovací jazyky 35
C# using System; using System.Windows.Forms; using System.Drawing; public class Sample : Form { [STAThread] public static int Main(string[] args) { Application.Run(new Sample()); return 0; } public Sample() { Button btn = new Button(); btn.text = "OK"; Controls.Add(btn); } } ZPP - Programovací jazyky 36
Skriptovací jazyky Slouží obvykle k rozšíření nějaké aplikace Operační systém sh, command.com WWW server Perl, PHP WWW prohlížeč JavaScript, VBScript ZPP - Programovací jazyky 37
PHP // připojení k serveru a výběr databáze mysql_connect("localhost","uzivatel","heslo"); mysql_select_db("databaze"); // dotaz $h = mysql_query("select * FROM uzivatele WHERE jmeno='$jmeno'"); // vytvoření objektu z výsledného řádku $uz = mysql_fetch_object($h); if(!$uz ) die "Uživatel neexistuje"; if( $uz->heslo!= $heslo ) die "Špatné heslo"; ZPP - Programovací jazyky 38
Studijní program Informační technologie Úvod do programování (Java) Programování v C/C++ Programování v C# Programovací techniky Programovací jazyky a překladače Seminář z programování Funkcionální a logické programování ZPP - Programovací jazyky 39