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