Download - Przegląd języków programowania
![Page 1: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/1.jpg)
Translacja i translatory
Translacja
Program w języku niskiego poziomu – ciąg instrukcji wykonywany bezpośrednio przez procesor lub maszynęcyfrową
Program w języku wysokiego poziomu – wymaga przetłumaczenia na ciąg instrukcji zrozumiałych dla maszyny cyfrowej która ten program ma wykonać
![Page 2: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/2.jpg)
Translacja
Proces tłumaczenia nosi nazwę translacji.
Translacja to przekład tekstów zredagowanych w jednym języku zwanym źródłowym na równoważny semantycznie tekst w innym języku zwanym wynikowym.
Translacja
W przypadku gdy dany język wysokiego poziomu ma stosunkowo łatwą gramatykę, translacja może byćwykonana samoczynnie przez maszynę cyfrową przy pomocy specjalnego programu translacji zwanego translatorem.
![Page 3: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/3.jpg)
Translacja
Translatory dzielimy zazwyczaj na dwie kategorie:
kompilatory
interpretatory.
Translacja
Kompilator jest translatorem, operującym na całym tekście programu źródłowego generując tekst przekładu jako całość
Interpreter operuje na poszczególnych jednostkach syntaktycznych programu źródłowego i generuje ich przekłady.
![Page 4: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/4.jpg)
Translacja
Jeśli wykonywamy program początkowo zapisany w języku zewnętrznym to używając kompilatora:
możemy przystąpić do wykonania programu w postaci docelowej dopiero po zakończeniu translacji.
Oznacza to, że uzyskany tekst będący przekładem tekstu źródłowego w całości wprowadzany jest do maszyny cyfrowej;
Translacja
Jeśli wykonywamy program początkowo zapisany w języku zewnętrznym to używając interpretatora:
możemy wykonywać przekłady poszczególnych jednostek syntaktycznych, nie czekając na cały proces translacji.
Oznacza to, że cały czas operujemy na tekście źródłowym tłumacząc tylko te jednostki syntaktyczne, które są potrzebne aby poszczególny fragment programu mógł zadziałać.
![Page 5: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/5.jpg)
Translacja
Translacja
W praktyce rzadko dokonuje się bezpośredniej translacji programów z języka zewnętrznego na język maszynowy.
Najczęściej stosuje się proces pośredni
najpierw dokonuje się translacji z języka zewnętrznego na język asemblerowy
potem z języka asemblerowego na język maszynowy.
Zastosowanie dwuetapowej translacji niesie za sobąwiele zalet, m.in. możliwość łączenia poszczególnych części programów zapisanych w różnych językach zewnętrznych.
![Page 6: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/6.jpg)
Schematyczny przebieg powstawania programu
pomysłalgorytm
programowanie
programowanie w języku wysokiego poziomu
kompilacja
program w języku symbolicznym
kod maszynowy
programista (człowiek)
algorytm oprogramowany
kompilator (program)
komputer
Stos i ONP
Bardzo ważnymi pojęciami bez których trudne byłoby zrozumienie zasad jakiejkolwiek translacji są :
stos
odwrotna notacja polska (ONP).
![Page 7: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/7.jpg)
StosStos – jest to organizacja sekwencyjna pamięci operacyjnej maszyny cyfrowej.
Stos działa jak pojemnik określonych jednostek, przy czym pobieranie elementów w nim zgromadzonych odbywa się w kolejności odwrotnej do magazynowania.
Jest to struktura LIFO
Dla stosu określa się dwie podstawowe operacje:
dopisz a na stosie - w wyniku wykonania tej operacji jednostka a zostaje umieszczona na szczycie stosu (staje się pierwszym elementem stosu)
odczytaj a ze stosu - w wyniku wykonania tej operacji jednostka a zostaje wydana na zewnątrz stosu.
Odwrotna Notacja Polska (ONP)
jeden z wariantów beznawiasowego zapisu wyrażeńformalnych, wynalezionego przez polskiego logika Jana Łukasiewicza (1878-1956).
w tym beznawiasowym zapisie symbole operandów poprzedzają bezpośrednio symbol operatora (notacja przyrostkowa) na przykład wyrażenie:
a+b zapisujemy w ONP jako a b +
![Page 8: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/8.jpg)
Odwrotna Notacja Polska (ONP)
Wyróżniamy trzy rodzaje notacji:
Infiksową : a + b
Prefiksową: + a b
Postfiksową: a b +
Odwrotna Notacja Polska (ONP)
ze względu na łatwość obliczania wyrażeń zapisanych w ONP przy użyciu stosu znalazła ona szerokie zastosowanie w arytmetyce komputerów
![Page 9: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/9.jpg)
Wyrażenia arytmetyczne w ONP
Przykłady prostych wyrażeń arytmetycznych i odpowiadający im zapis w ONP:
1. ( a + b ) * d ≡ a b + d *
2. ( a + ( b * c ) ) ≡ a b c * +
3. ( ( a + b ) * ( z + x ) ) ≡ a b + z x + *
4. ( ( a + t ) * ( ( b + ( a + c ) ) ^ ( c + d ) ) ) ≡
a t + b a c + + c d + ^ *
Gramatyka generująca wyrażenie arytmetyczne
Gramatyka G = < V, T, P, S > generująca proste wyrażenia arytmetyczne, np. (a + b ) * d
V = {a, b, d, +, *, (, )}
T = {W, K, C}
Semantyka powyższych symboli jest następująca:
W – wyrażenie; K - składnik, C – czynnik;
Symbol startowy S: S = W
P = { r1, …, r10}
![Page 10: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/10.jpg)
Lista produkcji i BNFLista produkcji:
r1: W → K r2: W → W + K r3: W → K + W
r4: K → C r5: S → C * K r6: S → K * C
r7: C → a r8: C → b r9: C → d
r10: C → ( W )
Zapis w notacji BNF:
<W> ::= <K> | <W> + <K> | <K> + <W>
<K> ::= <C> | <C> * <K> | <K> * <C>
<C> ::= ( <W> ) | a | b | d
Wyrażenie arytmetyczne w ONP
Zapis w notacji BNF:
<W> ::= <K> | <W> + <K> | <K> + <W>
<K> ::= <C> | <C> * <K> | <K> * <C>
<C> ::= ( <W> ) | a | b | d
Gramatyka prostych wyrażeń arytmetycznych w ONP:
<W> ::= <W> <W> <O> | <X>
<X> ::= a | b | d
<O> ::= + | *
![Page 11: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/11.jpg)
Obliczanie wartości w ONP
Pobieramy po kolei symbole wyrażenia od lewej strony do prawej;
Jeżeli symbol jest liczbą (zmienną), to odkładamy go na stos;
Jeżeli symbol jest opisem operacji - pobieramy dwa elementy ze stosu, wykonujemy te operacje, a wynik przesyłamy z powrotem na stos.
Czynności te wykonujemy aż do wyczerpania się danych wejściowych.
Obliczana wartość wyrażenia znajduje się na stosie.
Obliczanie wartości w ONP
start
pobierz symbol z lewej ku prawej
argument stos
operatorpobierz argumenty ze stosu, wykonaj działanie, wynik na stos
φbłąd KONIEC
NN
N T
T
T
![Page 12: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/12.jpg)
ONP - przykład obliczania wartościObliczyć wartość wyrażenia: 2 3 4 5 + * +
Posługujemy się tabelką.
Przedstawimy symbole pojawiające się kolejno na wejściu oraz zawartość stosu po każdym obiegu pętli głównej algorytmu obliczającego wyrażenie.
Obliczanie wartości wyrażenia - przykład
Obliczyć wartość wyrażenia: 2 7 + 3 / 14 3 - 4 * + 2 /
![Page 13: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/13.jpg)
Translacja wyrażeń arytmetycznych
Współczesne podejście translacji wyrażeń arytmetycznych polega na wydzieleniu dwu etapów translacji:
translacja do ONP
translacja ONP na język symboliczny
W celu zobrazowania translacji do ONP przyjmujemy, że:
źródłowy zapis wyrażeń arytmetycznych pojawia sięna wejściu specjalnego automatu.
na wyjściu uzyskamy zapis ONP tych wyrażeń, sam zaś automat wyposażony jest w pamięć stosową:
Model automatu ze stosem do translacji wyrażeńarytmetycznych
Wyrażenie arytmetyczne
Automat ze stosem
ONP wyrażenia arytmetycznego
Translacja wyrażeń arytmetycznych
![Page 14: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/14.jpg)
Podczas translacji wyrażeńarytmetycznych szczególnej analizie poddawane sąsymbole operacji (+,-,*,itp.) zwane ogranicznikami
Wprowadza się dodatkowo listę priorytetów ograniczników
Translacja wyrażeń arytmetycznych
3Dodawanie, odejmowanie (+, -)
2
Mnożenie, dzielenie, negacja( *, / ,⎯ )
1Potęgowanie ( ↑ )
0Funkcja (lg, sin, exp, ...)
PriorytetOperator
Wzrost priorytetu
Pobieramy kolejne znaki wyrażenia, które ma zostaćprzekształcone znak po znaku, począwszy od lewej strony.
Dalsze postępowanie zależy od symbolu. Jeśli pobrany znak jest:
argumentem, to należy przesłać go na wyjście,
nawiasem otwierającym „(” , to należy położyć go na stos,
nawiasem zamykającym „)”, to zawartość stosu, aż do napotkanego znaku „(” należy przesłać na wyjście i usunąć nawias „(”,
Algorytm działania automatu do translacji
![Page 15: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/15.jpg)
operatorem, to przeglądamy zawartość stosu w poszukiwaniu operatora o wyższym priorytecie :
jeśli taki znajdziemy, to przesyłamy zawartość stosu na wyjście, zaś nowy operator wkładamy na stos, jeśli nie, operator odkładamy na stos. stos przeszukujemy do napotkania nawiasu „(” lub do końca stosu, jeżeli nawias nie występuje.jeżeli nawias „(” wystąpił i znaleźliśmy przed nim operator o wyższym priorytecie, to na wyjście trafia wszystko ze stosu do „(”, ale sam nawias zostaje na stosie,
Algorytm działania automatu do translacji
znacznikiem końca wprowadzanego napisu, to kopiujemy zawartość stosu na wyjście, w przeciwnym wypadku sygnalizujemy błąd.
Przetwarzanie kończymy w momencie napotkania znacznika końca napisu wejściowego.
Nawiasów „(” i „)” nie kopiujemy na wyjście.
Algorytm działania automatu do translacji
![Page 16: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/16.jpg)
start
pobierz symbol z lewej ku prawej
argument wyjście
Zawartość stosu do ( lub do dna na wyjście, po czym operator na stos
φbłądKONIEC
N
N
N T
T
T
( stos
N
T
)Zawartość stosu aż do (
na wyjście
N
T
stos
operator
N
T
Stos na wyjście
Czy wyższy w stosie do ( lub
dna
Dokonać konwersji wyrażenia (((a))+b+d)*(d+e)na ONP
Przykład konwersji (1)
Otrzymaliśmy na wyjściu ciąg: abd++de+*
![Page 17: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/17.jpg)
Dokonać konwersji wyrażenia
b * c + ( d - e*k )na ONP
Przykład konwersji (2)
Otrzymaliśmy na wyjściu ciąg: b c d e k * - + *
Dokonać konwersji wyrażenia
( ( a + b ) – ( 3 * x + 7 * y ) ) na ONP
Przykład konwersji (3)
Otrzymaliśmy na wyjściu ciąg: a b + 3 x * 7 y * + -
![Page 18: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/18.jpg)
Dokonać konwersji wyrażenia
( ( a + t ) * ( ( b + ( a + c ) ) ^ ( c + d ) ) )na ONP
Przykład konwersji (4)
Otrzymaliśmy na wyjściu ciąg:
a t + b a c + + c d + ^ *
Języki programowania
![Page 19: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/19.jpg)
Język programowania jest to usystematyzowany sposób przekazywania komputerowi poleceń do wykonania
Język programowania pozwala na dokładny zapis algorytmów oraz innych zadań jakie komputer ma wykonać
Język programowania
Składnia języka określa:
sposób opisywania struktur sterujących
sposób opisywania struktur danych
sposób tworzenia poprawnych symboli do nazywania zmiennych i struktur danych
sposób stosowania interpunkcji, tj. znaków typu spacje, średniki, kropki, nawiasy
sposób budowy poprawnych wyrażeń
Semantyka języka określa znaczenie poprawnych składniowo wyrażeń
Język programowania
![Page 20: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/20.jpg)
Języki programowania można podzielić na pięć wyraźnie różniących się generacji (niektórzy mówią o czterech).
Generacje języków opisują zaawansowanie (rozbudowanie) struktury języka, co jest równocześnie związane z łatwością posługiwania się nimi
Generacje języków
Programowanie pierwszych komputerów akceptujących zmianę oprogramowania odbywało się bezpośrednio w kodzie binarnym, który można przedstawić jako ciągi zer i jedynek. Każdy typ komputera operuje własnym kodem, który dlatego został określony nazwą język maszynowy lub wewnętrzny.Jest to główna wada tych języków, gdyż programista każdorazowo musi dostosowywać się do języka konkretnej maszyny.
Przykład:001010100101101101000101011011010110100010111 000100001001111000010101111100001010101000001
I generacja
![Page 21: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/21.jpg)
Ponieważ operowanie ciągami zero-jedynkowymi nie jest wygodne dla programisty, przypisano im łatwiejsze do zrozumienia znaki mnemotechniczne. Tak narodziły się języki symboliczne, zwane teżasemblerami. Choć stanowią one proste tłumaczenie języka maszynowego na symbole i są ściśle związane z danym modelem komputera, to ułatwiają pisanie instrukcji i czynią je bardziej czytelnymi.
Przykład:mov dx, offset infomov ah, 9int 21hmov ah, 0int 16h
II generacja
Języki wysokiego poziomu - symbole asemblera reprezentujące konkretne instrukcje zostały zastąpione kodem nie związanym z maszyną, bardziej zbliżonym do języka naturalnego lub matematycznego.
Są to języki ogólnego przeznaczenia o dużym stopniu uniwersalności; ich rozwój ewoluował w kierunku języków problemowo zorientowanych
Przykład:for i:=1 to MaxN dobeginVx[i]:=Vx[i]+dx[i];end;
III generacja
![Page 22: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/22.jpg)
Na czwartą generację języków programowania składa sięszereg narzędzi, które umożliwiają budowę prostych aplikacji przez zestawianie „prefabrykowanych” modułów.
Obecnie wielu specjalistów uważa, że nie są to języki programowania w ścisłym znaczeniu, gdyż częstokroćstanowią jedynie rozszerzenie języków już istniejących.
Niektórzy autorzy proponują stosować nazwę „czwarta generacja” wyłącznie w odniesieniu do programowania obiektowego (OOP).
IV generacja
Nazwę „język piątej generacji” stosuje się czasem w odniesieniu do języków używanych do tworzenia programów wykorzystujących tzw. sztucznąinteligencję (AI) lub inaczej systemów ekspertowych.
V generacja
![Page 23: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/23.jpg)
Generacje języków
Paradygmat programowania to ogół oczekiwańprogramisty wobec języka programowania i komputera, na którym będzie działał program.
Paradygmaty programowania
![Page 24: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/24.jpg)
Paradygmaty programowania
Programowanie imperatywne
opisujemy kolejne czynności, które wykonawca (komputer) ma wykonać, by osiągnąć cel
w tym rodzaju programowaniu programista opisuje, jak komputer ma działać
Programowanie deklaratywne
opisujemy cel, który wykonawca (komputer) ma osiągnąć
w tym rodzaju programowaniu programista opisuje, co komputer ma osiągnąć
Paradygmaty programowania
![Page 25: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/25.jpg)
Najbardziej pierwotny sposób programowania, w którym program postrzegany jest jako ciąg poleceń dla komputera
Obliczenia rozumiemy tu jako sekwencję poleceńzmieniających krok po kroku stan maszyny, aż do uzyskania oczekiwanego wyniku
Stan maszyny należy z kolei rozumieć jako zawartośćcałej pamięci oraz rejestrów i znaczników procesora
Programowanie imperatywne
Ten sposób patrzenia na programy związany jest ściśle z budową sprzętu komputerowego o architekturze von Neumanna, w którym poszczególne instrukcje (w kodzie maszynowym) to właśnie polecenia zmieniające ów globalny stan
Programowanie imperatywne
![Page 26: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/26.jpg)
Języki wyższego (w stosunku do asemblera i kodu maszynowego) poziomu — takie jak Fortran, Algol, Pascal, Ada lub C — posługują się pewnymi abstrakcjami, ale wciąż odpowiadają paradygmatowi programowania imperatywnego
Instrukcje podstawienia działają na danych pobranych z pamięci i umieszczają wynik w tejże pamięci, zaśabstrakcją komórek pamięci są zmienne
Programowanie imperatywne
Paradygmaty programowania
![Page 27: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/27.jpg)
Podział zadania programistycznego na podzadania i ich niezależna (od siebie nawzajem) implementacja w postaci podprogramów (procedur)
Niezalecanie korzystania z efektów ubocznych (rozumianych w sensie tradycyjnym, jako zmiana wartości zmiennych globalnych), lecz przekazywanie danych i wyników w parametrach procedur
Metodologia programowania bottom-up
Programowanie proceduralne
Programowanie proceduralne
![Page 28: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/28.jpg)
Paradygmaty programowania
Używanie prostych, dobrze zdefiniowanych struktur (konstrukcji programistycznych):
sekwencja
selekcja (instrukcja warunkowa)
iteracja (pętla)
wywołanie podprogramu
Unikanie skoków (wręcz ich zakaz!)
Metodologia programowania top-down
Programowanie strukturalne
![Page 29: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/29.jpg)
Programowanie strukturalne
Paradygmaty programowania
![Page 30: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/30.jpg)
Program to zbiór porozumiewających się ze sobąobiektów, czyli jednostek zawierających pewne dane i umiejących wykonywać na nich pewne operacje
Programowanie obiektowe jest do pewnego stopnia rozszerzeniem paradygmatu programowania proceduralnego i strukturalnego
Programowanie obiektowe
Ważną cechą jest tu powiązanie danych (czyli stanu) z operacjami na nich (czyli poleceniami) w całość, stanowiącą odrębną jednostkę — obiekt
Bardzo ważną cechą jest też mechanizm dziedziczenia,czyli możliwość definiowania nowych, bardziej złożonych obiektów, na bazie obiektów już istniejących
Programowanie obiektowe
![Page 31: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/31.jpg)
Ważną cechą jest tu powiązanie danych (czyli stanu) z operacjami na nich (czyli poleceniami) w całość, stanowiącą odrębną jednostkę — obiekt
Bardzo ważną cechą jest też mechanizm dziedziczenia,czyli możliwość definiowania nowych, bardziej złożonych obiektów, na bazie obiektów już istniejących
Inne ważne cechy programowania obiektowego to:
wysoki stopień abstrakcji danych
enkapsulacja danych
polimorfizm
Programowanie obiektowe
Programowanie obiektowe
![Page 32: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/32.jpg)
Paradygmaty programowania
Program to po prostu złożona funkcja (w sensie matematycznym), która otrzymawszy dane wejściowe wylicza pewien wynik
Zasadniczą różnicą w stosunku do poprzednich paradygmatów jest brak dostępu do stanu maszyny
Nie ma zmiennych
A co za tym idzie, nie ma żadnych efektów ubocznych (rozumianych w sensie tradycyjnym, jako zmiana wartości zmiennych)
Programowanie funkcyjne
![Page 33: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/33.jpg)
Nie ma tradycyjnie rozumianych pętli (imperatywnych z natury)
Tradycyjne pętle wymagają bowiem zwykle (poza przypadkami zdegenerowanymi, jak pętle nieskończone) zmiennych (lub innego dostępu do stanu maszyny) do sterowania ich przebiegiem
Programowanie funkcyjne
Konstruowanie programów to składanie funkcji
Zazwyczaj z istotnym wykorzystaniem rekurencji (rekursji) (tam, gdzie w programowaniu imperatywnym wykorzystujemy pętle)
Charakterystyczne jest również definiowanie funkcji wyższego rzędu, czyli takich, dla których argumentami i których wynikami mogą być funkcje (a nie tylko „proste”dane jak liczby lub napisy)
Programowanie funkcyjne
![Page 34: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/34.jpg)
Programowanie funkcyjne
Paradygmaty programowania
![Page 35: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/35.jpg)
Na program składa się zbiór zależności (przesłanek) oraz pewne stwierdzenie/pytanie (cel)
Wykonanie programu to próba udowodnienia celu w oparciu o podane przesłanki
Obliczenia wykonywane są niejako „przy okazji”dowodzenia celu
Podobnie jak w programowaniu funkcyjnym, nie wydajemy rozkazów, a jedynie opisujemy, co wiemy i co chcemy uzyskać
Programowanie logiczne
Programowanie logiczne
![Page 36: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/36.jpg)
Programowanie logiczne
Programowanie na poziomie wartości
Programowanie na poziomie funkcji
Programowanie skalarne
Programowanie wektorowe/macierzowe
Programowanie zdarzeniowe
Programowanie z własnym wątkiem sterowania
Programowanie aspektowe
Programowanie uogólnione
Programowanie równoległe/współbieżne/rozproszone
Inne paradygmaty
![Page 37: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/37.jpg)
asemblery, „stary” BASICp. imperatywne (proceduralne?)
„stary” Pascal, C, Fortran p. imperatywne, proceduralne, strukturalne
C++, Object Pascal, Adap. imperatywne, proceduralne, strukturalne, obiektowe
Smalltalk, C#, Javap. obiektowe
Języki a paradygmaty
Lisp, Scheme, Logo, ML, Haskellp. funkcyjne
Planner, Prologp. logiczne
Pythonp. proceduralne, strukturalne, obiektowe, funkcyjne
SQLp. deklaratywne (ani ściśle funkcyjne, ani ściśle logiczne)
Języki a paradygmaty
![Page 38: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/38.jpg)
http://www.levenez.com/lang/history.html
Przegląd języków programowania
Ada - język programowania wysokiego poziomu, opracowany w latach 1975-1981 na zamówienie Departamentu Obrony USA,spokrewniony z językiem Pascal. Przeznaczony do bezpośredniego sterowania procesami lub maszynami, np. samolotami wojskowymi. Służy głównie do oprogramowywania systemów czasu rzeczywistego, pozwala na kontrolowanie procesów zachodzących jednocześnie. Nazwa języka pochodzi od imienia Ady Augusty Lovelace (1815-1852), córki G.G.N. Byrona, matematyczki współdziałającej z Ch. Babbage’em przy pracach nad pierwszą programowalną maszynąliczącą.
Przegląd języków programowania
![Page 39: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/39.jpg)
Asembler - język programowania niskiego poziomu, wykorzystujący instrukcje procesora.
Program napisany w asemblerze jest tłumaczony na (binarny) kod maszynowy.
Program w asemblerze jest bardzo efektywny w porównaniu do programów napisanych w innych językach, jednakże jego tworzenie jest stosunkowo trudne.
Przegląd języków programowania
Visual Asembler
Przegląd języków programowania
![Page 40: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/40.jpg)
Basic (Beginners All-purpose Symbolic InstructionCode) - przełomowy w chwili powstania w 1964, potem mocno krytykowany za brak strukturalności,
prosty, interpretowany język programowania, spopularyzowany w komputerach ośmiobitowych i kalkulatorach programowanych.
Basic z założenia nadawał się do pracy interakcyjnej i miał ujmować prostotą (m. in. brak typów, numerowane instrukcje ułatwiały redagowanie programu).
Przegląd języków programowania
Odrodzony i zmetamorfozowany zarówno pod względem struktur sterowania i danych, jak i interfejsu systemowego Basic znajduje szerokie zastosowanie pod postacią platformy programowania RAD o nazwie VisualBasic. W tym nowoczesnym produkcie z Basica pozostała głównie nazwa.
iBasic
Przegląd języków programowania
![Page 41: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/41.jpg)
C - proceduralny język programowania wysokiego poziomu, zaprojektowany w 1972 przez D. M. Ritchiegoi zrealizowany pod systemem operacyjnym UNIX dla komputera PDP-11.
Początkowo C był językiem oprogramowania systemowego (powstał jako język do przeprogramowania systemu UNIX). Szybko zyskałpopularność jako uniwersalny język programowania.
Przegląd języków programowania
Cechami języka C są zwięzłość i elastyczność, przy jednoczesnym przerzucaniu dużej odpowiedzialności na programistę (nie ma np. wbudowanej kontroli indeksowania tablic).
W latach 1983-1988 język C uległ standaryzacji.
Znormalizowany język C nosi nazwę ANSI C.
Przegląd języków programowania
![Page 42: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/42.jpg)
C++ - obiektowy język programowania zaprojektowany przez B. Stroustrupa i in.,
w warstwie proceduralnej osadzony w notacji języka C, wpływ języków Algol 68 i Simula 67 oraz Ada, ML i Clu.
Charakterystyczne cechy: dociążanie funkcji i operatorów, dziedziczenie z wielu klas, obsługa wyjątków, klasy parametryczne.
Przegląd języków programowania
Wersja pierwotna (1979) nosiła nazwę C z klasami (C with classes), a jej kompilatory generowały kod w języku C.
Standaryzowany od 1994, standard ostateczny ISO/ANSI C++ (ANSI 14882) z 1 września 1998.
Liczne kompilatory, m. in. Borland C++, Microsoft C++, Watcom C++, implementacje systemów operacyjnych, baz danych. Java, Smalltalk.
Przegląd języków programowania
![Page 43: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/43.jpg)
DevC++
Przegląd języków programowania
lcc
Przegląd języków programowania
![Page 44: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/44.jpg)
Clips (C Language Integrated Production System) -rozwijany od 1984 r. język przeznaczony do badania i rozwijania systemów ekspertowych,
służący do programowania typu optymalizacji algorytmowej (rule-based), proceduralnego i obiektowego (COOL - Clips Object OrientedLanguage).
CLIPS ma składnię przypominającą Lisp-a. Obecnie (2002) dostępna jest wersja 6.20 beta.
Przegląd języków programowania
Css (Cascading Style Sheets) - technologia (język) umożliwiająca przydzielanie „stylu”, tj. charakterystyk takich jak położenie, barwa, rozmiary, itp., elementom HTML.
Arkusze styli są wzorcami (templates) przypominającymi wzorce znane np. z edytora tekstu Word (mogą być również dołączane z zewnątrz).
CSS są w znacznym stopniu niezależne od platformy (stopień ich „rozumienia” przez nowe przeglądarki IE 5.5, Netscape 6 i Opera 5 jest oceniany odpowiednio na 92%, 98% i 99%).
Przegląd języków programowania
![Page 45: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/45.jpg)
DHTML (Dynamic HTML) - rozszerzenie języka HTML o wzorce stylu (style sheets), rozmieszczanie elementów na stronie WWW według upodobańużytkownika (content positioning) oraz możliwośćstosowania indywidualnych krojów pisma, sprowadzanych z komputera macierzystego danej strony WWW (downloadable fonts).
Przegląd języków programowania
Fortran (FORmula TRANslator) - jeden z pierwszych szeroko używanych, algorytmicznych języków programowania, opracowany przez J. Backusa w 1957.
Po wielu unowocześnieniach i zmianach (Fortran 77, Fortran 90) stosowany do dzisiaj.
Język Fortran powstał jako wynik wczesnych doświadczeń w programowaniu komputerów za pomocą autokodów z lat 1951-56.
Pierwszą implementację Fortranu wykonano dla maszyny IBM-704. W 1958 powstała wersja Fortran II wprowadzająca możliwość kompilacji niezależnej (IBM-704), a w 1959 jej odpowiednik dla komputera IBM-709.
Przegląd języków programowania
![Page 46: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/46.jpg)
HTML (HyperText Markup Language) - specjalny język służący do opisu strony oraz odniesień z poszczególnych jej elementów do innych dokumentów. Język ten powstał na potrzeby internetowej usługi WWW.HTML Umożliwia umieszczenie na stronie tekstu zdefiniowanych dyrektyw co do sposobu jego prezentacji, wyróżnienia pewnych jego elementów edytorskich jak akapity, nagłówki itp. Pozwala także umieszczać bezpośrednio na opisywanych stronach grafikę, a w najnowszych wersjach również inne typy dokumentów.
Przegląd języków programowania
Java - popularny język programowania obiektowego autorstwa J. Goslinga, zaprojektowany w firmie Sun Microsystems, Używany szeroko do oprogramowywania specjalizowanych mikroprocesorów, wzbogacania prezentacji danych zawartych w dokumentach HTML, pamiętanych w komputerach sieci Internet oraz do opracowywania samodzielnych aplikacji wielowątkowych i rozproszonych.Kompilatory języka Java produkują bajtokod, który nadaje się do interpretacji w środowisku JVM. Znaczenie języka Java systematycznie rośnie.
Przegląd języków programowania
![Page 47: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/47.jpg)
Przykład skryptu w Javie
Przegląd języków programowania
JavaScript, opracowany przez firmę Sun Microsystemsjęzyk programowania obiektowego, przypominający C++, jednak przeznaczony do zastosowań sieciowych.
Java nie przenosi wirusów i nie może uszkodzićkomputera-klienta (o ile wiadomo).
Java jest także środowiskiem przetwarzania online, działającym w tzw. maszynie wirtualnej Javy - JVM (Java Virtual Machine) .
Ta ostatnia jest rodzajem pośrednika pomiędzy programem Javy i komputerem. Kompilator Javy tworzy bowiem nie kod przeznaczony dla konkretnej platformy, lecz kod niezależny od sprzętu (przynajmniej na ogół), interpretowany przez JVM.
Przegląd języków programowania
![Page 48: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/48.jpg)
Lisp - język programowania oparty na przetwarzaniu list.
Główny wkład w jego powstanie w latach 50. wniósł J. McCarthy, profesor wielu amerykańskich uczelni, m.in. Instytutu Technologicznego Massachusetts i Uniwersytetu Stanforda.
Wywodzi się z badań teoretycznych nad tzw. rachunkiem lambda i stał się podstawowym językiem sztucznej inteligencji.
Przegląd języków programowania
Eclips Lisp
Przegląd języków programowania
![Page 49: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/49.jpg)
Logo - edukacyjny język programowania biorący początek z badań nad psychologią uczenia się i jego wpływem na kształtowanie osobowości (J. Piaget), opracowany przez Seymoura Paperta i spopularyzowany przez niego w książce, rewolucyjnej z punktu widzenia metodologii nauczania, pt. Burze mózgów – dzieci i komputery (Wydawnictwo Naukowe PWN, 1996). Logo jest stosowane w początkowym nauczaniu matematyki oraz jako język komunikacji dziecka z komputerem; odznacza się interakcyjnością, znakomicie przemyślanym, prostym zestawem operacji graficznych i ogólnością składni wzorowanej na języku Lisp.
Przegląd języków programowania
MSW Logo
Przegląd języków programowania
![Page 50: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/50.jpg)
NET Logo
Przegląd języków programowania
Star Logo
Przegląd języków programowania
![Page 51: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/51.jpg)
Visual Logo
Przegląd języków programowania
Pascal - strukturalny język programowania stworzony przez N. Wirtha na początku lat 70.
Jego zastosowanie w praktyce jest obecnie bardzo ograniczone. Najważniejszym zastosowaniem języka Pascal jest nauka programowania.
Pozostaje on przez to jednym z najszerzej znanych i popularnych języków, zwłaszcza wśród początkujących programistów.
Przegląd języków programowania
![Page 52: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/52.jpg)
Perl (Practical Report and Extraction Language) –interpretowany język programowania, zewnętrznie bardzo podobny do C/C++, dostosowany przez twórcę(Larry Wall, koniec lat 80-tych) przede wszystkim do przetwarzania plików tekstowych. Perl służy do administracji i oprogramowania WWW, w tym do pisania tzw. skryptów cgi. Trudno uznać Perl za język szczególnie przyjazny; jest jednak tak uniwersalny i przy tym rozpowszechniony, że warto go poznać, pomimo tego, że w ostatnich latach pojawiły się języki pod wieloma względami wydajniejsze (m.in. ASP i PHP). Perl powstał w środowisku unixowym, jednak niemal od razu został zaimplementowany jako ActivePerl równieżdo Win32.
Przegląd języków programowania
Przykład skryptu w Perlu
Przegląd języków programowania
![Page 53: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/53.jpg)
PHP - język skryptowy stosowany „po stronie serwera”podobnie jak np. Perl, z którym jest zresztąspokrewniony. Za pośrednictwem skryptów php typowy serwer (np. PWS, IIS, Apache) może przesyłać na strony sieciowe dane z relacyjnych baz danych (np. MySQL, mSQL, PostgreSQL a także MS Access). Mówiąc w uproszczeniu, kod php wbudowany jest w plik HTML pomiędzy znaczniki <?php i ?>, chociażmożna skonfigurować php tak, aby używać innych znaczników, np. <% i %>, jak w przypadku ASP.Kod php jest interpretowany przez serwer, przekształcany w tekst a następnie przesyłany do przeglądarki.
Przegląd języków programowania
Przykład skryptu w PHP
Przegląd języków programowania
![Page 54: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/54.jpg)
Prolog (PROgraming in LOGic) - deklaratywny język programowania w logice. Program w takim języku nie jest sekwencją działań, jak np. w języku proceduralnym, lecz zbiorem faktów i regułpozwalających w oparciu o fakty formułować wnioski.
Visual Prolog
Przegląd języków programowania
Python - interpretowany współczesny język obiektowy.
Istnieją implementacje dla różnych systemów operacyjnych.
Posiada przejrzystą i łatwą do nauki strukturę.
Python jest językiem darmowym - tworzone w nim aplikacje można również sprzedawać.
Przegląd języków programowania
![Page 55: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/55.jpg)
Python
Przegląd języków programowania
Ruby - interpretowany, w pełni obiektowy język programowania
Ruby bazuje na wielu językach, takich jak Perl, Smalltalk, Python, CLU czy LISP.
Składnia jest zorientowana liniowo i oparta na składni CLU (w mniejszym stopniu Perla).
Program pisane w Ruby charakteryzują się wysokąwymiennością pomiędzy platformami (istniejąimplementację na wiele maszyn UNIXowych, DOS, Windows, Mac, BeOS itd.).
Język popularny w Japonii, oparty na języku japońskim.
Przegląd języków programowania
![Page 56: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/56.jpg)
Ruby
Przegląd języków programowania
SQL (Structured Query Language) - standardowy język zapytań do obsługi relacyjnej bazy danych. Język programowania baz danych i ich sieciowych serwerów. Pierwowzorem SQL był opracowany przez IBM we wczesnych latach siedemdziesiątych XX w. język SEQUEL (E. F. Codd).Niezależnie od specyficznych właściwości standardów język SQL pozwala formułować działania na tabelach w formie zbliżonej do zdań w języku angielskim.
Przegląd języków programowania
![Page 57: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/57.jpg)
VRML (Virtual Reality Modeling Language) -opracowany w 1993r. język udostępniający operacje na obiektach trójwymiarowych w Internecie.
Dostępny dla większości przeglądarek po zainstalowaniu dodatkowej wtyczki.
Od 1995 r. dostępna jest wersja VRML 2.0.
Przegląd języków programowania
Przykład modelu w VRML
Przegląd języków programowania
![Page 58: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/58.jpg)
XML (eXtensible Markup Language) - standard Internetowy (metajęzyk), oparty na SGML, a będący poszerzeniem techniki używania markerów (tagów) nie tylko do określania sposobu prezentacji, lecz także rodzaju przesyłanej informacji. Znaczniki nie są opisane w XML lecz definiowane przez użytkownika.
Przegląd języków programowania
Do opisu danych XML używa DTD - Document TypeDefinition. Jeśli więc HTML zajmuje się wyświetlaniem danych i ich wyglądem, to XML skupia się na opisie, przechowywaniu i przesyłaniu danych (lecz nie ich prezentacji) niezależnie od sprzętu, oprogramowania systemowego i aplikacji.
Ma uzupełniać a nie zastępować HTML, nie jest językiem, jest uproszczoną wersją metajęzyka SGML.
Przegląd języków programowania
![Page 59: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/59.jpg)
Kolekcję ponad 300 programów Hello world w różnychjęzykach programowania i w ponad 50 językach naturalnych :
http://www.roesler-ac.de/wolfram/hello.htm
Pierwszy „Hello World” powstał w 1972 roku i byłnapisany w B (taki poprzednik C ;-).
Na wyróżnienie zasługują: Assembler-Z80-Console i HQ9+ (za długość), Argh!, BrainFxxx, G-Code, Malbolge i MAMASH (za zakręcenie), CSS (za spryt), LabVIEW i Logo-graphical (za efekty specjalne).
„Hello World”
Standardowe:
„Hello World”
![Page 60: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/60.jpg)
Na wyróżnienie zasługują: Assembler-Z80-Console i HQ9+ (za długość),Argh!, BrainFxxx, G-Code, Malbolge i
MAMASH (za zakręcenie), CSS (za spryt), LabVIEW i Logo-graphical (za efekty specjalne).
„Hello World”
Assembler-Z80-Console
„Hello World”
![Page 61: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/61.jpg)
Assembler-Z80-Console
„Hello World”
Assembler-Z80-Console
„Hello World”
![Page 62: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/62.jpg)
Assembler-Z80-Console
„Hello World”
Assembler-Z80-Console
„Hello World”
![Page 63: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/63.jpg)
Argh!
„Hello World”
BrainFxxx:
„Hello World”
![Page 64: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/64.jpg)
G-Code:„Hello World”
Malbolge :
„Hello World”
![Page 65: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/65.jpg)
MAMASH :
„Hello World”
CSS :
„Hello World”
![Page 66: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/66.jpg)
LabVIEW :
„Hello World”
Logo-graphical :
„Hello World”
![Page 67: Przegląd języków programowania](https://reader034.vdocuments.mx/reader034/viewer/2022051522/58760d9c1a28ab9f588be074/html5/thumbnails/67.jpg)
N. Wirth: „Algorytmy + struktury danych = programy”.WNT, Warszawa, 2004.
Harel D., Rzecz o istocie informatyki - algorytmika, WNT, Warszawa 2008
http://uranos.cto.us.edu.pl/~boryczka/http://we.pb.edu.pl/~jforenc/dydaktyka.htmlhttp://pl.wikipedia.org
Literatura