Translacja i translatory

advertisement
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ć
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.
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.
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ć.
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.
Schematyczny przebieg powstawania
programu
pomysł
algorytm
programowanie
programowanie w języku
wysokiego poziomu
kompilacja
programista (człowiek)
algorytm
oprogramowany
kompilator (program)
program w języku symbolicznym
kod maszynowy
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).
Stos
„
Stos – 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 +
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
Wyrażenia arytmetyczne w ONP
Przykłady prostych wyrażeń arytmetycznych i odpowiadający
im zapis w ONP:
1.
(a+b)*d ≡ab+d*
2.
(a+(b*c))≡ abc*+
3.
((a+b)*(z+x))≡ab+zx+*
4.
((a+t)*((b+(a+c))^(c+d)))≡
at+bac++ cd+^*
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}
Lista produkcji i BNF
Lista produkcji:
r 1: W → K
r 2: W → W + K
r 3: W → K + W
r 4: K → C
r 5: S → C * K
r 6: S → K * C
r 7: C → a
r 8: C → b
r 9: 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> ::= + | *
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
T
stos
N
N
N
błąd
φ
operator
T
KONIEC
T
pobierz argumenty
ze stosu, wykonaj
działanie, wynik na
stos
ONP - przykład obliczania wartości
„
Obliczyć 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 /
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
Translacja wyrażeń arytmetycznych
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ą:
Wyrażenie
arytmetyczne
Automat ze
stosem
ONP wyrażenia
arytmetycznego
Model automatu ze stosem do translacji wyrażeń
arytmetycznych
Translacja wyrażeń arytmetycznych
„
„
Operator
Podczas translacji wyrażeń
arytmetycznych szczególnej Funkcja (lg, sin,
analizie poddawane są
exp, ...)
symbole operacji (+,-,*,itp.) Potęgowanie ( ↑ )
zwane ogranicznikami
Wprowadza się dodatkowo
listę priorytetów
ograniczników
Priorytet
Mnożenie,
dzielenie, negacja
( *, / ,⎯ )
Dodawanie,
odejmowanie (+, -)
0
1
2
3
Wzrost priorytetu
Algorytm działania automatu do
translacji
„
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
„
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.
start
pobierz symbol z
lewej ku prawej
T
argument
N
wyjście
T
(
stos
N
Zawartość stosu aż do (
na wyjście
T
)
N
N
T
Czy wyższy w
stosie do ( lub
dna
operator
N
błąd
N
T
φ
T
Stos na
wyjście
stos
Zawartość stosu do ( lub
do dna na wyjście, po
czym operator na stos
KONIEC
Przykład konwersji (1)
„
Dokonać konwersji
wyrażenia
(((a))+b+d)*(d+e)
na ONP
„
Otrzymaliśmy na
wyjściu ciąg:
abd++de+*
Przykład konwersji (2)
„
Dokonać konwersji wyrażenia
b * c + ( d - e*k )
na ONP
„
Otrzymaliśmy na wyjściu ciąg: b c d e k * - + *
Przykład konwersji (3)
„
Dokonać konwersji wyrażenia
((a+b)–(3*x +7*y))
na ONP
„
Otrzymaliśmy na wyjściu ciąg: a b + 3 x * 7 y * + -
Przykład konwersji (4)
„
Dokonać konwersji wyrażenia
((a+t)*((b+(a+c))^(c+d)))
na ONP
„
Otrzymaliśmy na wyjściu ciąg:
at+bac++cd+^*
Języki programowania
Język 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ń
Generacje języków
„
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
I generacja
„
„
„
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
II generacja
„
„
„
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 info
mov ah, 9
int 21h
mov ah, 0
int 16h
III 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 do
begin
Vx[i]:=Vx[i]+dx[i];
end;
IV generacja
„
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).
V 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.
Generacje języków
Paradygmaty programowania
„
Paradygmat programowania to ogół oczekiwań
programisty wobec języka programowania i
komputera, na którym będzie działał program.
Paradygmaty 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ąć
Programowanie imperatywne
„
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
„
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
Paradygmaty programowania
Programowanie proceduralne
„
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
Paradygmaty programowania
Programowanie strukturalne
„
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
Paradygmaty programowania
Programowanie obiektowe
„
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
„
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
Paradygmaty programowania
Programowanie funkcyjne
„
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
„
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
Paradygmaty programowania
Programowanie logiczne
„
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
Inne paradygmaty
„
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
Języki a paradygmaty
„
asemblery, „stary” BASIC
„
„
„stary” Pascal, C, Fortran
„
„
p. imperatywne, proceduralne, strukturalne
C++, Object Pascal, Ada
„
„
p. imperatywne (proceduralne?)
p. imperatywne, proceduralne, strukturalne, obiektowe
Smalltalk, C#, Java
„
p. obiektowe
Języki a paradygmaty
„
Lisp, Scheme, Logo, ML, Haskell
„
„
Planner, Prolog
„
„
p. logiczne
Python
„
„
p. funkcyjne
p. proceduralne, strukturalne, obiektowe, funkcyjne
SQL
„
p. deklaratywne (ani ściśle funkcyjne, ani ściśle logiczne)
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
„
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
„
Basic (Beginners All-purpose Symbolic Instruction
Code) - 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
„
C - proceduralny język programowania wysokiego
poziomu, zaprojektowany w 1972 przez D. M. Ritchiego
i 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
„
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
„
DevC++
Przegląd języków programowania
„
lcc
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 Oriented
Language).
„
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
„
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 (IBM704), a w 1959 jej odpowiednik dla komputera IBM-709.
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
„
Przykład skryptu w Javie
Przegląd języków programowania
„
JavaScript, opracowany przez firmę Sun Microsystems
ję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
„
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
„
„
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
„
NET Logo
Przegląd języków programowania
„
Star Logo
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
„
„
„
„
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
„
„
„
„
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
„
„
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
„
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
„
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
„
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
„
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 Type
Definition. 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.
„Hello World”
„
Kolekcję ponad 300 programów Hello world w różnych
ję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”
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”
„Assembler-Z80-Console
„Hello World”
„Assembler-Z80-Console
„Hello World”
„Assembler-Z80-Console
„Hello World”
„Assembler-Z80-Console
„Hello World”
„Argh!
„Hello World”
„BrainFxxx:
„Hello World”
„G-Code:
„Hello World”
„Malbolge
:
„Hello World”
„MAMASH
:
„Hello World”
„CSS
:
„Hello World”
„LabVIEW
:
„Hello World”
„
Logo-graphical :
Literatura
„
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.html
http://pl.wikipedia.org
„
„
Download