Programovací jazyky () - Katedra informatiky FEI VŠB-TUO
Download
Report
Transcript Programovací jazyky () - Katedra informatiky FEI VŠB-TUO
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
[email protected]
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
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
Vyznačují se velkou přesností vyjádření
Noty v hudbě
Matematické formule
Elektrotechnická schémata
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
Překlad
a zpracování programu
Ladění
Zdrojový text
programu
Překlad a
sestavení
Neúspěšné testy
Testování
Chyby při překladu
Provoz
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
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
JBuilder
ZPP - Programovací jazyky
9
MS Visual
Studio
ZPP - Programovací jazyky
10
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
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)
a > 10
ano
x := x + 5
ne
if
a > 10 then begin
x := x + 5;
end
ZPP - Programovací jazyky
14
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
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
Vývoj programovacích jazyků
Strojové jazyky
Jazyky symbolických instrukcí / adres
Pojmenované instrukce
Pojmenované adresy – proměnné, návěští skoků
Makrodefinice
Autokódy
Posloupnost instrukcí v číselném tvaru
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
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
21
FORTRAN
C
C
C
10
Vypocet funkce faktorial
INTEGER FUNCTION FACT(N)
IMPLICIT NONE
INTEGER N, I, F
F = 1
DO 10 I = 1,N
F = F * I
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
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
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
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
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
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
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
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