Języki programowania

Transkrypt

Języki programowania
Języki programowania
historia
•
•
•
Programowanie w języku maszynowym komputera
(1-sza generacja)
Wprowadzenie nazw mnemonicznych – kody
operacji, identyfikatory – argumenty; ręczne
tłumaczenie
Asembler – program tłumaczący
język asemblerowy (2-ga generacja)
Język asemblerowy - wady
–
–
•
zależny od architektury konkretnego komputera
Programowanie „małymi kroczkami”
Języki programowania 3trzeciej generacji
–
Wysokopoziomowe konstrukcje pierwotne, dające
się zaimplementować w postaci ciągu rozkazów
maszynowych
Wczesne języki programowania
trzeciej generacji
• FORTRAN (FORmula TRANslator)zastosowania naukowe i inżynieryjne
• COBOL (Commom Busines-Oriented
Language) – zastosowania biznesowe
(siły morskie USA)
TRANSLATOR
Program umożliwiający wykonanie
programu napisanego w języku różnym od
języka maszynowego
• Kompilator
program źródłowy → program wynikowy
• Interpreter
program wykonujący program;
rozpoznanie każdej instrukcji +
wykonanie
Asembler - kompilator
• Języki trzeciej generacji –
uniezależnienie od
konkretnego komputera
Jeden program – różne
kompilatory – różne platformy
• W praktyce – brak ścisłych
ustaleń dot. definicji języka
→ problemy z przenoszeniem
oprogramowania → wprowadzenie
standardów
• Środowiska programistyczne
Paradygmaty
programowania
Różne ścieżki rozwoju języków
programowania
•funkcyjny
– Lisp, ML, Scheme
•obiektowy
– SIMULA, Smaltalk,C++, Ada95, Visual Basic,
Java
•imperatywny
– Fortran, Cobol, Algol, basic, APL, C,
Pascal,Ada
•deklaratywny
– GPSS, Prolog
Paradygmat imperatywny
(proceduralny)
• Znalezienie algorytmu
rozwiązującego problem
• Dane, ciąg poleceń, wyniki
• Zgodny z cyklem maszynowym JC
(pobierz, dekoduj, wykonaj)
Paradygmat deklaratywny
• Pytanie: „Na czym polega problem”
• Zadanie programisty: precyzyjny
opis problemu
• Zaimplementowanie ogólnego
algorytmu rozwiązywania problemów
• Początkowo języki specjalnego
przeznaczenia; wąska klasa
zastosowań
– Symulowanie systemów ekonomicznych,
politycznych, fizycznych
Paradygmat funkcyjny
•
Konstruowanie czarnych skrzynek:
we; wy
•
Program w Lisp’ie:
(podziel (sumuj liczby) (zlicz liczby))
(pierwszy(sortuj lista))
•
Modularne konstruowanie programów
Paradygmat obiektowy
•
•
OOP Object Oriented Programming
Dane – obiekty implementowane
oddzielnie, zawierające zestaw
funkcji do ich obsługi
•
Komunikacja między modułami –
przesyłanie komunikatów
CORBA – Common Object Request Broker
Architecture
Paradygmaty
programowania
Wpływ paradygmatu
programowania na proces
rozwiązywania problemów
Paradygmaty tworzenia
oprogramowania
Paradygmaty programowania
• Programowanie liniowe - wszystko w
jednym worku, go to !
• Programowanie strukturalne - moduły
operujące na lokalnych danych i
zmiennych, komunikacja przez
przekazywanie parametrów, każdy moduł
testowany osobno
Wada: zmiana struktur danych wymaga
zmiany wielu modułów
• Programowanie zorientowane obiektowo
• Programowanie funkcyjne
Style programowania
• Top-down
• Bottom-up
Cykl życia (life cycle) programu:
– projekt programu (program design)
– napisanie programu
– uruchamianie (edycja - poprawianie, translacja,
wykonanie)
– testowanie, rozwijanie, naprawianie i pielęgnacja
(maintanence) programu.
Narzędzia do tworzenia oprogramowania:
–
–
–
–
edytory
kompilatory i interpretery
debugery
programy wspomagające tworzące środowisko pracy
Klasyfikacja języków programowania
•
•
•
•
•
•
•
•
•
•
•
•
•
•
Języki bliskie kodu maszynowego
Języki imperatywne
Języki deklaratywne
Języki proceduralne
Języki funkcyjne
Języki definicyjne - kolejne podstawienia interpretowane są
jako definicje
Języki logiczne - oparte na logice matematycznej, programy
traktowane są jako formuły logiczne
Języki ograniczeń (constraint) - problemy są w nich
specyfikowane nie w sposób jawny lecz przez podanie zbioru
ograniczeń
Języki obiektowo zorientowane
Języki programowania współbieżnego - dla komputerów o wielu
procesorach
Języki „przepływu danych” (dataflow) - dla komputerów o
eksperymentalnej architekturze, sterowanych nie tyle
kolejnymi instrukcjami co przepływem danych
Języki czwartej generacji (4GL) - języki bardzo wysokiego
poziomu, używają graficznych systemów dialogu z użytkownikiem
lub opisu w języku naturalnym
Języki zapytań baz danych - do zapisywania i wydobywania
informacji z baz danych
Metajęzyki - służące do opisu innych języków programowania
1952
asemblery
1957
Fortran
John Backus,IBM, Fortran II, Fortran IV (1966), Fortran 77
(1977), Fortran 90 (1991)
1960
LISP
J.McCarthy
1960
Algol
Algol 60, Algol 68
1960
COBOL
…COBOL 85
1962
APL
K. Iverson, Harvard
1962
Simula
1964
Basic
1964
PL1
1971
Prolog
1972
C
Dennis Ritchie, Bell Labs, C*, Visual C
1975
Pascal
N. Wirth
1979
Modula-2
N. Wirth
1980
d-BASE
III, III+, IV, V
1983
Smaltalk
1983
Ada
..Ada 95
1986
C++
Bjarne Stroustrup, AT&T,
1988
Mathematica
Oparta na SMP
1995
Java
SunLabs,
Fortran
•
•
•
•
1957r
Obliczenia naukowe, techniczne
Biblioteki matematyczne
Analiza numeryczna, statystyka
C. Dijkstra, tak pisał o Fortranie w 1972
roku:
... wady ujawniły się dopiero po 10
latach intensywnego używania, ludzie go
projektujący godni są podziwu... jednak
im prędzej zapomnimy, że FORTRAN
kiedykolwiek istniał, tym lepiej, bo
jako nośnik myśli nie jest on już
wystarczający: marnuje nasze władze
umysłowe, jest zbyt ryzykowny i dlatego
zbyt drogi by go używać. ...
Pascal
• 196x ; 1971, Niklaus Wirth
• Następca Algolu
• Narzędzie do nauki
programowania
• Rozbudowane struktury danych
C
• Dennis Ritchie 1972
• Pierwotnie – język do tworzenia
systemów operacyjnych (unix,
PDP11)
• Cechy języka wysokiego oraz
niskiego poziomu
• Nie związany z żadnym systemem ani
sprzętem
"Pisanie programów w C jest jak szybki taniec z
brzytwami na śliskiej podłodze".
Ada
• 1980 Departament obrony USA
• Augusta Ada Lovelace z d. Byron
(1815-1852)
• Projektowanie systemów czasu
rzeczywistego
• Równoległe wykonywanie pewnych
czynności
• Obsługa sytuacji wyjątkowych
• Wbudowane systemy komputerowe
• Ada 95 – paradygmat obiektowy
C++
• Rozszerzenie C
• Paradygmat obiektowy
Java
• 199xr
• C,C++
• Przenoszenie w sieci
programów wykonywalnych aplety
• Sztuczna inteligencja
– LISP, Prolog, powłoki systemów ekspertowych
• DBMS
– SQL (Structured Query Language)
– języki baz danych: Oracle, Ingres, Informix, Paradox, dBase,
FoxPro, MS Access ...
• 4GL
–
–
–
–
•
•
•
•
•
CA-Visual Objects
Delphi
Clarion
Magic
Programowanie wizualne (VPL)
Języki symulacyjne
Programowanie współbieżne
Modelowanie matematyczne (Matlab, Mathcad, Mathematica)
Programowanie www
–
–
–
–
–
–
–
Java script
CGI
CSS
PHP
Perl
Tcl/Tk
DHTML
• CASE Computer Aided Software Engineering,
Podstawowe elementy
języków programowaia
(imperatywnych i obiektowych)
• Instrukcje
– Deklaratywne ( deklaracje)
– Imperatywne
– Komentarze
• Zmienne, stałe, literały
const stala=1999;
Typy danych
Definiują sposób interpretacji
danych oraz możliwe operacje
• Liczby całkowite integer
– (notacja uzupełnieniowa do 2)
• Liczby rzeczywiste real
– (postać zmiennopozycyjna)
• Znaki character
– (kod ASCII, unicode)
• Wartości logiczne boolean
– true, false
Deklaracje zmiennych
Fortran:
REAL promien,obwod,pole
INTEGER i,j
Pascal:
var
promien,obwod,pole: real;
i,j: integer
C, C++, Java;
float promien,obwod,pole;
int i,j;
Struktury danych
tablica jednorodna
Fortran:
INTEGER wynik(5,2)
Pascal:
var
wynik: array[1..5,1..2]of
integer;
C:
int wynik[5][2];
Java;
int wynik[][]=new int [5][2];
1,1 1,2
2,1 2,2
3,1 3,2
4,1 4,2
5,1 5,2
Struktury danych
tablica niejednorodna
Pascal:
var
osoba: record
nazwisko: packed array [1..8] of char;
wiek: integer;
end
C:
struct
{char nazwisko [8];
int wiek;
osoba;
}
osoba.wiek
Instrukcje przypisania
C, C++, Java
i=i+1;
Ada, Pascal
i:=i+1;
fortran
razem=poczatek//koniec
// - konkatenacja
+ - dodawanie lub konkatenacja- zależnie
od typu argumentów (np. Java)
przeciążenie
Instrukcje sterujące
Imperatywne – zmiana kolejności
wykonywania instrukcji
goto
fortran
if (w) I1;
else I2;
if (w)
{I1; I2;…;In}
if w then I1
else I2
pascal
if w then
begin I1;I2;…;In;end
else
else
{J1;J2;…;Jn}
begin J1;J2;…;Jn;end
C, C++, Java
Instrukcje sterujące
Imperatywne – zmiana kolejności
wykonywania instrukcji
do {I1;I2} while (w)
while (w) {I1;I2}
repeat I1 until w
while w do
begin I1; I2 end;
for(w1;w2;w3)I1;
for z:=w1 to w2 do I1;
switch(w1)
{ case s1: I1;
}
case w1 of
case s2: I2;
s1: I1;
default: I3;
s2: I2;
end
komentarze
//komentarz
/*komentarz*/
C komentarz
{ komentarz }
Procedury i funkcje
Parametry:
formalne
moduł
wywołujący
aktualne
procedura
Przekazywanie:
przez wartość
CALL procedura
procedura;
przez referencję
Instrukcje we/wy
readln (wartosc);
writeln(wartosc);
scanf(”%d”,&wartosc);
printf(”%d”,wartosc;)
cin>> wartosc;
Cout << wartosc;
translacja
Program źródłowy -> program wynikowy
FAZY TRANSLACJI:
•Analiza leksykalna
– tworzy ciąg tokenów (leksemów)
•Analiza składniowa
- rozpoznaje gramatyczną strukturę programu
•Generowanie kodu
- Tworzenie programu w języku maszynowym
Język
•
•
•
•
Podstawa - słownik – symbole
Ciągi słów – zdania
Składnia – zbiór reguł
Semantyka – znaczenie
L=L(T, N, P, S)
L
T
N
P
S
–język;
– słownik symboli końcowych
– zbiór symboli pomocniczych
– zbiór produkcji (reguł syntaktycznych)
– symbol początkowy; S Є N
Notacja BNF
Backus-Naur-Form
metasymbole
::=
|
{ }
Przykład:
A::=x|(B)
B::=AC
C::={+A}
+,x,(,) – symbole końcowe
zdania:
x
(x)
(x+x)
((x))
Diagramy składniowe
A::=x|(B)
B::=AC
C::={+A}
A
(
B
x
B
A
C
A
+
C
)
A
(
A
)
A +
x
program p1;
var i,j: integer;
begin
j:=i+1;
end.
Analiza leksykalna:
program p1 ; var i j integer begin := +1 end .
Analiza składniowa:
drzewo rozbioru składniowego, tabela symboli:
nazwa
id1
:=
id2
MOV id1, R1
ADD R1, #1.0
MOV R1, id2
+
id1
id2
1
leksem
i
j
typ
integer
integer
wyrażenie
+
składnik
wyrażenie
-
x
x+y
składnik
składnik
*
wyrażenie
/
x*y
x*y-z
x+y*z
x
y
z
x/y+(x+y)
x*y-z
w
s
s
x
*
-
w
s
y
drzewo składniowe
w
s
z
if W1 then if W2 then I1 else I2
if-then-else
if
if (w1)
if(w2)
I1;
else
I2;
else
Instr
Instr
instrukcja
instrukcja
if
if (w1)
{
if(w2)
I1;
}
else
I2;
then
Wyr
Wyr
then
if
instrukcja
w1
if
Wyr
then
instrukcja
else
w1
Wyr
w2
then
instrukcja
I1
else
instrukcja
I2
instrukcja
I2
if
Wyr
w2
then
instrukcja
I1
Konsolidacja i ładowanie
Linker – program łączący –
połączenie programów wynikowych w
moduł wynikowy
Program ładujący – umieszcza moduł
w pamięci
Programowanie
obiektowe
obiekt + metody(funkcje składowe)
klasa
- „typ” obiektu
wzorzec do tworzenia obiektów
komunikat – reprezentuje operację wykonaną
na obiekcie
metoda – określa sposób wykonania
komunikatu
dziedziczenie – własność umożliwiająca
klasie pochodzącej uzyskiwanie pól i metod
klasy rodzicielskiej
polimorfizm każda klasa może mieć własne
wersje metod
kapsułkowanie – pewne elementy obiektu - prywatne
Programowanie czynności
współbieżnych
Przetwarzanie równoległe, współbieżne
Procesy, zadania, wątki
• tworzenie nowych procesów
• komunikacja; synchronizacja
Programowanie
deklaratywne
•bazuje na logice formalnej
•dedukcja logiczna ; rezolucje
P OR Q
Przesłanka: ⌐P
Rezolucja->wniosek: Q
ZASADA REZOLUCJI
P OR Q
zdania postaci
R OR ⌐ Q
P OR R -rezolwenta
klauzulowej (OR)
P → Q
Q OR ⌐ P
Prolog
PROgramowanie w LOGice
– cykliczne stosowanie zasady rezolucji
– zbiór zdań początkowych (predykaty) – dedukcja
FAKTY:
szybszy(żółw, ślimak).
szybszy(kot, żółw).
REGUŁY:
stałe
zmienne
szybszy(X,Y) AND szybszy(X,Z) → szybszy(X,Z) –logika
szybszy(X,Z) :- szybszy(X,Y),szybszy(Y,Z) - Prolog
ZAPYTANIA:
szybszy(kot, żółw).
szybszy(kot, ślimak).
szybszy(W, żółw).
szybszy(V,ślimak).
szybszy(W, V).
Programowanie
zdarzeniowe
• sterowane zdarzeniami
• program jest cały czas
bombardowany zdarzeniami (events),
na które musi odpowiedzieć
• przepływ sterowania w programie
jest niemożliwy do przewidzenia z
góry
• dominujący typ programowania GUI zdarzenia - naciśnięcia myszy,
klawiszy, żądania odświeżenia,
różne zdarzenia sieciowe
Programowanie komponentowe
• rosnąca złożoność systemów informatycznych
• konieczność skrócenia czasu ich budowy
• potrzeba klarownej strukturalizacji procesu
wytwarzania oprogramowania oraz podniesienia jego
jakości
• wynik ewolucji obiektowego podejścia do projektowania
i implementacji aplikacji - wyposażenie obiektów
aplikacji w predefiniowane usługi zapewniające
realizacje szeregu standardowych funkcjonalności jak
np.: możliwość zdalnej komunikacji, transakcyjność,
bezpieczeństwo, trwałość danych, mechanizmy łączenia,
samotestowanie, samoinstalacja, etc
• dążenie do odseparowania usług, które można uznać za
systemowe od funkcjonalności danej aplikacji
• znacząca redukcja złożoności budowy aplikacji
• wymaga opracowania interfejsów łączenia
funkcjonalność aplikacji z częścią systemową
stanowiącą środowisko wykonania komponentów
• programowanie imperatywne oraz deklaratywne
budowa serwera aplikacji
• Systemy komponentowe strony serwerowej powstały w
wyniku uogólnienia systemów opartych na koncepcji
standardu CORBA [ORF1996] oraz usług systemowych
opracowanych w ramach architektury OMA zwanych
Common CORBA Service
• Po stronie klienta zasadniczy wpływ na ukształtowanie się
komponentów warstwy prezentacji posiadały technologie
związane z tworzeniem stron WWW oraz budową web
serwerów.
• technologie środowisk komponentowych
– CCM (CORBA Component Model) OMG
– EJB (Enterprice Java Beans) SUN
– COM+ (Common Component Model) .NET Microsoft

Podobne dokumenty