przegląd języków programowania

67
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ć

Upload: hanga

Post on 11-Jan-2017

224 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Przegląd języków programowania

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Programowanie strukturalne

Paradygmaty programowania

Page 30: Przegląd języków programowania

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

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

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

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

Programowanie funkcyjne

Paradygmaty programowania

Page 35: Przegląd języków programowania

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

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

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

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

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

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

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

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

DevC++

Przegląd języków programowania

lcc

Przegląd języków programowania

Page 44: Przegląd języków programowania

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

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

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

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

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

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

NET Logo

Przegląd języków programowania

Star Logo

Przegląd języków programowania

Page 51: Przegląd języków programowania

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

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

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

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

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

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

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

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

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

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

Assembler-Z80-Console

„Hello World”

Assembler-Z80-Console

„Hello World”

Page 62: Przegląd języków programowania

Assembler-Z80-Console

„Hello World”

Assembler-Z80-Console

„Hello World”

Page 63: Przegląd języków programowania

Argh!

„Hello World”

BrainFxxx:

„Hello World”

Page 64: Przegląd języków programowania

G-Code:„Hello World”

Malbolge :

„Hello World”

Page 65: Przegląd języków programowania

MAMASH :

„Hello World”

CSS :

„Hello World”

Page 66: Przegląd języków programowania

LabVIEW :

„Hello World”

Logo-graphical :

„Hello World”

Page 67: Przegląd języków programowania

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