Post on 01-Mar-2019
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
• 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]; osoba.wiek
int wiek;
osoba;
}
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
if (w) I1;
else I2;
if (w)
{I1; I2;…;In}
else
{J1;J2;…;Jn}
goto
if w then I1
else I2
if w then
begin I1;I2;…;In;end
else
begin J1;J2;…;Jn;end
fortran
pascal
C, C++, Java
Instrukcje sterujące Imperatywne – zmiana kolejności
wykonywania instrukcji
while (w) {I1;I2}
do {I1;I2} while (w)
for(w1;w2;w3)I1;
switch(w1)
{ case s1: I1;
case s2: I2;
default: I3;
}
while w do
begin I1; I2 end;
repeat I1 until w
case w1 of
s1: I1;
s2: I2;
end
for z:=w1 to w2 do I1;
Procedury i funkcje
procedura
moduł
wywołujący
CALL procedura
procedura;
Parametry:
formalne
aktualne
Przekazywanie:
przez wartość
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 –język;
T – słownik symboli końcowych
N – zbiór symboli pomocniczych
P – zbiór produkcji (reguł syntaktycznych)
S – 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))
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 leksem typ
id1 i integer
id2 j integer
:=
id2 +
id1 1 MOV id1, R1
ADD R1, #1.0
MOV R1, id2
składnik wyrażenie
+
-
wyrażenie
składnik wyrażenie
*
/
x
y
z
składnik
x
x+y
x*y
x*y-z
x+y*z
x/y+(x+y)
if W1 then if W2 then I1 else I2
if Wyr then Instr else Instr
if (w1)
if(w2)
I1;
else
I2;
if (w1)
{
if(w2)
I1;
}
else
I2;
if-then-else
instrukcja
if
Wyr if
then
instrukcja
if Wyr instrukcja else instrukcja
w1
then
w2 I1 I2
instrukcja
then instrukcja else instrukcja
w2
if
if Wyr
w1 I2
if Wyr 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 klauzulowej (OR)
R OR ⌐ Q
P OR R -rezolwenta
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:
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).
stałe
zmienne
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
• 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