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 Programovací jazyky doc. RNDr. Petr Šaloun, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 219 http://www.cs.vsb.cz/saloun petr.saloun@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 (text p evzat od doc. Beneše) ZPP - Programovací jazyky 2
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 7 Eclipse ZPP - Programovací jazyky 8 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 5 Nástroje pro tvorbu program Editor P eklada / interpret x zp tný p eklada Spojovací program (linker) Správa verzí CVS, Subversion, Ladicí program (debugger) Nástroje pro lad ní výkonu (profiler) Testovací nástroje, generátory test Generátor instala ních balík Nástroje pro internacionalizaci (i18n) ZPP - Programovací jazyky 6
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 11 P eklad C++ ZPP - Programovací jazyky 12 JBuilder ZPP - Programovací jazyky 9 MS Visual Studio ZPP - Programovací jazyky 10
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 15 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 16 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 13 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 14
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 19 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 20 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í ZPP - Programovací jazyky 17 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 18
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 23 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 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 21 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 22
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 27 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 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 25 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 26
Další jazyky 1980-83 Ada 1972 C 1972 Smalltalk 1982-85 C++ 1994-95 Java 2000-02 C# ZPP - Programovací jazyky 31 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 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 29 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 30
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 35 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 33 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 34