350 likes | 501 Views
Programovac í jazyk y. 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ů
E N D
Programovací jazyky doc. RNDr. Petr Šaloun, Ph.D.katedra informatiky FEI VŠB-TUO A-1007 / 597 324 219 http://www.cs.vsb.cz/salounpetr.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
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
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
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
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
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
Eclipse ZPP - Programovací jazyky
JBuilder ZPP - Programovací jazyky
MS Visual Studio ZPP - Programovací jazyky
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
Překlad C++ ZPP - Programovací jazyky
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
Popis programovacího jazyka • Syntaxe - struktura jazykových konstrukcí • Textové jazyky (C, Pascal, Java) • Grafické jazyky (vývojové diagramy, UML) a > 10 ne if a > 10 then begin x := x + 5; end ano x := x + 5 ZPP - Programovací jazyky
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
Metody popisu syntaxe Syntaktický diagram Gramatika příkaz ifpodmínkathenpříkazzbytek zbytek elsepříkaz |ε if podmínka then příkaz else příkaz ZPP - Programovací jazyky
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
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
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
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
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ě • V současnosti stále nejpoužívanější jazyk v oblasti vědeckotechnických výpočtů! (ISO: 1997) ZPP - Programovací jazyky
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
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
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
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
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
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
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
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
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
Další jazyky • 1980-83 Ada • 1972 C • 1972 Smalltalk • 1982-85 C++ • 1994-95 Java • 2000-02 C# ZPP - Programovací jazyky
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
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
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
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