z
z
z
ZPP - Programovací jazyky
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?
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
z
z
z
Noty v hudbČ Matematické formule Elektrotechnická schémata
PĜirozené jazyky – vynechávání, gramatické chyby, víceznaþnost
z
z
ZPP - Programovací jazyky
Znaþkovací jazyky (HTML) – data, ne program Specifikaþní jazyky (Ȝ-kalkul) – teoretický výzkum
Jsou obvykle proveditelné na poþítaþi
z
Vyznaþují se velkou pĜesností vyjádĜení
z
z
z
Zjednodušují pĜenos urþitého typu informace
Proþ používáme programovací jazyky?
z
z
Programovací jazyk
4
3
z
z
z
z
z
z
z
ZPP - Programovací jazyky
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)
Obsah
doc. RNDr. Petr Šaloun, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 219 http://www.cs.vsb.cz/saloun
[email protected]
Programovací jazyky
2
z
z
z
Borland Pascal, C++, JBuilder, C#Builder SharpDeveloper, JCreator, NetBeans
z
z
ZPP - Programovací jazyky
ZPP - Programovací jazyky
Eclipse (Java, C++, C#, …) MS Visual Studio (C++, C#, Jscript, VB, …)
Univerzální prostĜedí
z
z
ProstĜedí orientovaná na urþitý jazyk
Eclipse
Poskytují více uvedených funkcí souþasnČ
Integrovaná vývojová prostĜedí (IDE)
8
7
Provoz
z
z
z
z
z
z
z
z
z
ZPP - Programovací jazyky
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)
Nástroje pro tvorbu programĤ
Chyby za provozu
Testování
NeúspČšné testy
ZPP - Programovací jazyky
PĜeklad a sestavení
Chyby pĜi pĜekladu
Zdrojový text programu
LadČní
PĜeklad a zpracování programu
6
5
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
z
z
ZPP - Programovací jazyky
ZPP - Programovací jazyky
Strojový jazyk (nebo JSI) Jazyk virtuálního procesoru (JVM, CLR)
Syntéza cílového programu / Interpretace
z
z
z
Analýza zdrojového textu, vyhledání chyb
PĜeklad C++
z
z
PĜekladaþ
12
11
ZPP - Programovací jazyky
ZPP - Programovací jazyky
MS Visual Studio
JBuilder
10
9
Statická sémantika – v dobČ pĜekladu Dynamická sémantika – v dobČ bČhu
z
z
z
z
ZPP - Programovací jazyky
podmínka
then
pĜíkaz
else
ZPP - Programovací jazyky
Gramatika pĜíkaz o if podmínka then pĜíkaz zbytek zbytek o else pĜíkaz | İ
if
Syntaktický diagram pĜíkaz
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.
PĜíklad: Co znamená X + 1 ?
z
z
Sémantika – význam jazykových konstrukcí
Metody popisu syntaxe
z
z
Popis programovacího jazyka
16
15
z
z
z
ZPP - Programovací jazyky
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
z
z
z
end x := x + 5
a > 10 then begin x := x + 5;
ZPP - Programovací jazyky
if
ne ano
a > 10
Textové jazyky (C, Pascal, Java) Grafické jazyky (vývojové diagramy, UML)
Syntaxe - struktura jazykových konstrukcí
14
13
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
z
z
Inkrementální pĜeklad
Popis programovacího jazyka
z
z
PĜekladaþ
Posloupnost instrukcí v þíselném tvaru
Pojmenované instrukce Pojmenované adresy – promČnné, návČští skokĤ Makrodefinice
SložitČjší pĜíkazy PĜíklad: MAT (Minsk autokód – CTI, PIS, JDI NA, …)
ZPP - Programovací jazyky
Vyšší programovací jazyky
z
z
Autokódy
z
z
z
Jazyky symbolických instrukcí / adres
z
Strojové jazyky
ZPP - Programovací jazyky
1951 Grace Murray Hopper z prosazovala vytvoĜení vyšších jazykĤ z pracovala na návrhu prvního pĜekladaþe z zavedla pojem "poþítaþový virus"
1949 John Mauchly - Short Code z první poþítaþový jazyk skuteþnČ použitý na elektronickém zaĜízení z urþen pro zadávání rovnic z "ruþnČ kompilovaný" jazyk
kolem 1946 Konrad Zuse – Plankalkul z použit také pro šachy z rukopis publikován až v roce 1972, nebyl nikdy implementován
První programovací jazyky
z
z
z
z
Vývoj programovacích jazykĤ
20
19
NepĜesný
z
z
Význam konstrukce popíšeme pomocí jednodušších operací
z
ZPP - Programovací jazyky
Význam konstrukce popíšeme pomocí funkcí
Denotaþní sémantika
z
Operaþní sémantika
Formální popis
z
Slovní popis
z
z
Posloupnost pĜíkazĤ mČnících stav výpoþtu Možnost opakovaného pĜiĜazení do promČnné
z
z
z
z
z
ZPP - Programovací jazyky
Funkcionální jazyky – ML, Haskell, LISP Logické jazyky – PROLOG, CLP, Gödel, Mercury Dotazovací jazyky - SQL
Posloupnost podmínek Poþítaþ musí najít postup, jak je dodržet
Deklarativní jazyky
z
z
Imperativní jazyky
Typy programovacích jazykĤ
z
z
Metody popisu sémantiky
18
17
ZPP - Programovací jazyky
24
10
PROGRAM P1 IMPLICIT NONE INTEGER N, F, FACT READ(*,*) N F = FACT(N) WRITE(*,*) "Fact = ", F END
INTEGER FUNCTION FACT(N) IMPLICIT NONE INTEGER N, I, F F = 1 DO 10 I = 1,N F = F * I CONTINUE FACT = F END
Vypocet funkce faktorial
C C C
(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
ZPP - Programovací jazyky
V souþasnosti stále nejpoužívanČjší jazyk v oblasti vČdeckotechnických výpoþtĤ! (ISO: 1997)
FORTRAN
23
z
LISP
ZPP - Programovací jazyky
dosud se používá i jako skriptovací jazyk v aplikacích (AutoCAD, emacs, …)
22
21
FORmula TRANslator - John Backus, IBM z problémovČ orientovaný, strojovČ znaþnČ nezávislý, optimalizace (nutná v konkurenci s JSI) z realizace pĜekladaþe si vyžádala 18 þlovČkorokĤ jeden z nejvČtších projektĤ v té dobČ
LISt Processing - John McCarthy, M. I. T. z první funkcionální jazyk - implementace lambda-kalkulu z možnost imperativního stylu programování
z
FORTRAN (1954-57)
LISP (1958-59)
ZPP - Programovací jazyky
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.
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.
28
ZPP - Programovací jazyky
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
begin integer N; ReadInt(N);
IDENTIFICATION DIVISION. PROGRAM-ID. Iter. AUTHOR. Michael Coughlan.
ZPP - Programovací jazyky
základ mnoha dalších programovacích jazykĤ
ALGOL 60
27
z
COBOL
ZPP - Programovací jazyky
Dosud se používá zejména ve finanþních institucích (ISO:2002, XML 2006)
Algorithmic Language - J. Backus, P. Naur z bloková struktura, složené pĜíkazy, rekurze z syntax poprvé popsána formálnČ gramatikou (BNF) z koncem 60. let se stal nejpopulárnČjším jazykem v EvropČ – napĜ. i ve výuce
COmmon Business Oriented Language z pro vytváĜení rozsáhlých programĤ k vládním a obchodním úþelĤm z formalizovaný anglický text, þitelný pro manažery z zavedl propracované záznamové struktury z vytvoĜen konferencí CODASYL (Conference of Data Systems and Languages)
z
Algol 60 (1958-60)
COBOL (1960)
26
25
ZPP - Programovací jazyky
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
1980-83 Ada 1972 C 1972 Smalltalk 1982-85 C++ 1994-95 Java 2000-02 C#
C#
z
z
z
z
z
z
Další jazyky
32
31
ZPP - Programovací jazyky
1991 - VisualBasic, VBA, VBScript 2003 - VB.NET
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
z
ZPP - Programovací jazyky
Borland Turbo Pascal (Anders Hejlsberg) Borland Delphi -> Kylix z
z
z
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 z
Pascal (1968-71)
z
z
z
z
z
z
Beginners All-Purpose Symbolic Instruction Code
BASIC (1964)
30
29
ZPP - Programovací jazyky
Funkcionální a logické programování
z
z
z
z
z
z
Ú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í
z
Studijní program „Informaþní technologie“
35
z
z
z
ZPP - Programovací jazyky
// 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";
// dotaz $h = mysql_query("SELECT * FROM uzivatele WHERE jmeno='$jmeno'");
// pĜipojení k serveru a výbČr databáze mysql_connect("localhost","uzivatel","heslo"); mysql_select_db("databaze");
ZPP - Programovací jazyky
WWW prohlížeþ – JavaScript, VBScript
WWW server – Perl, PHP
Operaþní systém – sh, command.com
Slouží obvykle k rozšíĜení nČjaké aplikace
PHP
z
Skriptovací jazyky
34
33