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
Rozszerzenie C C++ Paradygmat obiektowy
199xr C,C++ Java 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;
Fortran: Struktury danych tablica jednorodna 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 then I1 else I2 pascal if (w) {I1; I2; ;I n } else {J1;J2; ;Jn} C, C++, Java if w then begin I1;I2; ;I n ;end else begin J1;J2; ;J n ;end
Instrukcje sterujące Imperatywne zmiana kolejności wykonywania instrukcji do {I1;I2} while (w) repeat I1 until w while (w) {I1;I2} for(w1;w2;w3)i1; switch(w1) { case s1: I1; case s2: I2; default: I3; } while w do begin I1; I2 end; for z:=w1 to w2 do I1; case w1 of s1: I1; s2: I2; end
komentarze //komentarz /*komentarz*/ { komentarz } C komentarz
Procedury i funkcje moduł wywołujący Parametry: formalne aktualne procedura Przekazywanie: CALL procedura przez wartość przez referencję procedura;
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))
Diagramy składniowe A::=x (B) B::=AC C::={+A} A ( B ) x A ( A A + ) B A C x C A +
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: := id2 + nazwa leksem typ id1 i integer id2 j integer MOV id1, R1 ADD R1, #1.0 MOV R1, id2 id1 1
wyrażenie składnik + wyrażenie - x składnik składnik * / wyrażenie x+y x*y x*y-z x+y*z x x/y+(x+y) y z
x*y-z w drzewo składniowe s - w s * w s x s z y
if W1 then if W2 then I1 else I2 if-then-else if Wyr then Instr else Instr if (w1) if(w2) I1; else I2; if Wyr instrukcja then instrukcja if Wyr then instrukcja instrukcja else instrukcja if (w1) { if(w2) I1; } else I2; w1 w1 if Wyr then instrukcja else instrukcja w2 I1 I2 if Wyr w2 then I2 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 R OR Q P OR R -rezolwenta zdania postaci 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