Klasyfikacja języków programowania

advertisement
Klasyfikacja języków programowania.
Programowanie to proces projektowania, tworzenia, testowania i utrzymywania kodu
źródłowego programów komputerowych lub urządzeń mikroprocesorowych (mikrokontrolery).
Kod źródłowy jest napisany w języku programowania, z użyciem określonych reguł, może on być
modyfikacją istniejącego programu lub czymś zupełnie nowym. Programowanie wymaga dużej
wiedzy i doświadczenia w wielu różnych dziedzinach, jak projektowanie aplikacji, algorytmika 1,
struktury danych, znajomość języków programowania i narzędzi programistycznych, wiedza na
temat kompilatorów, czy sposób działania podzespołów komputera. W inżynierii oprogramowania,
programowanie (implementacja) jest tylko jednym z etapów powstawania programu.
Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu komputerowego w konkretnym języku programowania może
być zrealizowany przez komputer. Każdy język programowania posiada swój zbiór instrukcji, w
tym słowa kluczowe. Podobnie jak języki mowy, którymi posługują się ludzie na całym świecie,
języki programowania posiadają odpowiednie zasady składni oraz właściwe słownictwo. Każdy
język naturalny dysponuje własnymi słowami, służącymi określaniu czynności i na zywaniu rzeczy.
Podobnie jest też z językami programowania. W każdym działają na podobnych zasadach
instrukcje, które określają takie czynności, jak: wprowadzanie danych, wyprowadzanie wyników,
wykonywanie obliczeń, określanie warunków czy realizacja powtórzeń. Ich postać jest zazwyczaj
inna dla różnych języków. Inne są też konkretne zasady składni, ale ogólne zasady działania tych
instrukcji są podobne.
Język programowania = zasady składni + instrukcje
Niezależnie od stosowanego języka programowania należy pamiętać, że:
- Język programowania jest językiem formalnym, co oznacza, że podlega jednoznacznym
regułom. Cechy takiej nie mają języki naturalne, gdzie czasem sens zdania zależy od
kontekstu, w którym zostało ono użyte, lub od naszej interpretacji.
Postać instrukcji, w tym słów kluczowych, musi być bardzo precyzyjna - zgodna z zasadami składni. W programie nie może zabraknąć ani jednego koniecznego znaku.
Tłumaczenie programu na kod maszynowy połączone jest ze sprawdzaniem poprawności
składniowej zapisanych instrukcji. Instrukcje błędnie zapisane nie będą mogły zostać
przetłumaczone, a tym samym program nie zostanie wykonany.
Kolejność zapisywania instrukcji powinna odpowiadać kolejności operacji realizujących
dany algorytm (podobnie jak umieszczanie bloków w schemacie blokowym). Program jest
bowiem wykonywany zgodnie z zapisem.
RODZAJE JEZYKÓW
Program napisany w języku kompilowanym, zanim zostanie uruchomiony musi zostać
skompilowany do kodu maszynowego. Co więcej, kompilator zazwyczaj tworzy kod maszynowy,
który działa jedynie na określonej architekturze np. tylko na procesorach x86. Niektóre języki, jak
na przykład Java kompilują kod źródłowy do kodu pośredniego zwanego bajtkodem. Taki kod
pośredni jest następnie wykonywany przez maszynę wirtualną.
Programy napisane w językach interpretowanych, są wykonywane przez interpreter linijka po
linijce i nie muszą być wcześniej skompilowane. Programista nie musi podczas każdej edycji kodu
źródłowego kompilować programu, co w środowisku w którym modyfikacje kodu są codziennością
jest ogromną zaletą.
1
algorytmika – nauka o algorytmach, zajmuje się ich badaniem.
1
Języki interpretowane chociaż pochłaniają więcej zasobów systemowych i są wolniejsze od
kompilowanych, to jednocześnie oszczędzają najcenniejszy zasób – czas programisty.
Języki dynamiczne podczas działania programu wykonają wiele operacji, normalnie
wykonywanych na etapie kompilacji. Do działań tych zaliczamy: dołączanie kodu, rozszerzanie
definicji klas, zmianę typów zmiennych. Dzięki tym mechanizmom możliwe jest tworzenie kodu
bardziej zwięzłego i elastycznego. Programiści zwolnieni są z definiowania każdej zmiennej, co z
jednej strony znacznie zmniejsza ilość kodu do napisania, ale z drugiej strony, może przy
nieuważnym kodowaniu generować trudne do wychwycenia błędy.
Językami wysokiego poziomu nazwano języki takie jak C czy C++ . W odróżnieniu od języków
asemblerowych, kod w takim języku jest czytelny dla człowieka i składa się ze słów pochodzących z
języka angielskiego. Języki takie jak Ruby są czasami określane jako języki bardzo wysokiego
poziomu ponieważ umożliwiają pisanie kodu jeszcze bardziej zbliżonego do języka naturalnego.
Oczywiście kwestia czytelności kodu jest zawsze rzeczą subiektywną.
Język programowania powinien być maksymalnie czytelny. Wiele osób zachwyca się magicznym
jednolinijkowym. W rzeczywistości pisanie większych programów w ten magiczny, hakerski sposób
przynosi więcej problemów niż korzyści. Po pierwsze, nie wiadomo czy osoba pisząca taki kod
będzie go w stanie odczytać rok później, po drugie, szanse na to, że ten kod szybko zrozumie inny
programista są minimalne. Dlatego zasada najmniejszego zaskoczenia powinna zawsze być
przestrzegana przez programistów.
2
Do najpopularniejszych języków programowania należą:
Lista dwudziestu najpopularniejszych języków programowania według TIOBE (stan na czerwiec
2011 r.):
1. Java - jest językiem tworzenia programów źródłowych kompilowanych do kodu bajtowego,
czyli postaci wykonywanej przez maszynę wirtualną.
2. C - imperatywny, strukturalny język programowania stworzony na początku lat
siedemdziesiątych XX w. przez Dennisa Ritchiego do programowania systemów
operacyjnych i innych zadań niskiego poziomu.
3. C++ - Charakteryzuje się wysoką wydajnością kodu wynikowego, bezpośrednim dostępem
do
zasobów
sprzętowych
i
funkcji
systemowych,
łatwością
tworzenia
i korzystania z bibliotek, niezależnością od konkretnej platformy sprzętowej lub systemowej
(co gwarantuje wysoką przenośność kodów źródłowych) oraz niewielkim środowiskiem
uruchomieniowym.
4. C# - Program napisany w tym języku kompilowany jest do języka Common Intermediate
Language
(CIL),
specjalnego
kodu
pośredniego
wykonywanego
w środowisku
uruchomieniowym takim jak .NET Framework, Mono lub DotGNU. Wykonanie
skompilowanego programu przez system operacyjny bez takiego środowiska nie jest
możliwe.
5. PHP - jest najczęściej stosowany do tworzenia skryptów po stronie serwera WWW, ale
może być on również używany do przetwarzania danych z poziomu wiersza poleceń, a
nawet do pisania programów pracujących w trybie graficznym
6. Visual Basic - język programowania wysokiego poziomu i narzędzie programowania firmy
Microsoft. Składnia jest oparta na języku BASIC, ale unowocześniona. Zawiera kilkaset
instrukcji, funkcji i słów kluczowych
7. Objective-C - to rozszerzenie języka C o możliwości obiektowe, wzorowane
na Smalltalk przyjął drogę całkowicie odmienną od C++. Jest używany głównie
w frameworku Cocoa w systemie Mac OS X oraz w iOS
8. Perl - interpretowany język programowania autorstwa Larry'ego Walla początkowo
przeznaczony głównie do pracy z danymi tekstowymi, obecnie używany do wielu innych
zastosowań. Wzorowany na takich językach jak C, skryptowe: sed, awk
i
sh oraz na wielu innych.
9. Lua - język skryptowy pierwotnie zaprojektowany dla rozszerzenia funkcjonalności różnych
aplikacji, jednak często używany jako samodzielny język. Lua wiąże w sobie prostą składnię
procedury (podobną do Pascala) z konstrukcjami opisu danych opartymi na tablicach
asocjacyjnych i rozszerzalnej semantyce.
10. JavaScript - skryptowy język programowania, stworzony przez firmę Netscape, najczęściej
stosowany na stronach internetowych. Pod koniec lat 90. XX wieku organizacja ECMA
wydała
na
podstawie
JavaScriptu
standard
języka
skryptowego
o nazwie ECMAScript. Głównym autorem JavaScriptu jest Brendan Eich.
11. Ruby - to interpretowany, w pełni obiektowy i dynamicznie typowany język programowania
stworzony w 1995 roku przez Yukihiro Matsumoto (pseudonim Matz). Ruby bazuje na wielu
językach,
takich
jak
CLU,
Eiffel,
Lisp,
Perl,
Python
czy Smalltalk. Składnia jest zorientowana liniowo i oparta na składni CLU oraz,
w mniejszym stopniu, Perla
12. Delphi - język programowania, którego można używać w środowiskach firmy Borland,
Embarcadero, Microsoft (Delphi Prism), oraz w środowisku Lazarus. Standard języka Delphi
obejmuje
wiele
bogatych
funkcjonalnie
klas,
których
nie
ma
w standardzie Object Pascala, a ponadto umożliwia programowanie wizualne, czyli ObjectOriented Design.
13. Lisp - Lisp powstał jako wygodna matematyczna notacja dla programów komputerowych,
oparta na rachunku lambda stworzonym przez Alonzo Churcha. Szybko został najchętniej
wybieranym językiem do badania i rozwoju sztucznej inteligencji
14. Pascal - dawniej jeden z najpopularniejszych języków programowania, uniwersalny,
wysokiego poziomu, ogólnego zastosowania, oparty na języku Algol. Został opracowany
przez Niklausa Wirtha w 1970 roku. Pierwotnie służył celom edukacyjnym do nauki
programowania strukturalnego.
15. Asembler -W języku polskim oznacza on program tworzący kod maszynowy
na podstawie kodu źródłowego (tzw. asemblacja) wykonanego w niskopoziomowym języku
programowania bazującym na podstawowych operacjach procesora zwanym językiem
asemblera, popularnie nazywanym również asemblerem.
3
16. Transact-SQL - T-SQL oznacza transakcyjny SQL, czyli rozszerzenie języka SQL
umożliwiające
tworzenie
konstrukcji
takich
jak
pętle,
instrukcje
warunkowe
oraz zmienne. Jest używany do tworzenia wyzwalaczy, procedur i funkcji składowanych w
bazie. Został stworzony przez Sybase i wbudowany do serwerów SQL tej firmy, później
prawa
kupiła
firma
Microsoft
i
wykorzystuje
ten
język
w kolejnych wersjach MS SQL Server.
17. RPG (OS/400) - (ang.: Report Program Generator) to jeden z kilku języków programowania
pierwotnie używanych na komputerach wyposażonych w czytniki kart perforowanych, lecz
wciąż pozostający w użyciu (innym przykładem jest FORTRAN). RPG został zaprojektowany
w IBM dla systemów klasy mainframe, w szczególności dla słynnej rodziny maszyn
System/390 (gdzie używano RPG2).
18. Ada - strukturalny, kompilowany, imperatywny, statycznie typowany i obiektowy język
programowania opracowany przez Jean Ichbiaha i zespół z CII Honeywell Bull w latach 70.
XX wieku. Język ten wygrał konkurs zorganizowany przez Departament Obrony USA (U.S.
Department of Defense – DoD), pokonując 19 innych projektów.
19. Scheme - funkcyjny język programowania, dialekt (wariant) Lispu, który został
zaprojektowany na MIT przez Guy L. Steele-a i Geralda Jay Sussmana w latach 70. Jego
główną ideą jest minimalizm, co oznacza, że sam język zawiera jedynie podstawowe
mechanizmy, a na ich bazie, już z użyciem Scheme, tworzone są bardziej zaawansowane
rozwiązania. Scheme nie jest czysto funkcyjnym językiem programowania, co oznacza, że
dopuszczalne są efekty uboczne obliczeń.
Składnia
Aby dany ciąg znaków mógł być rozpoznany jako program napisany w danym języku, musi spełniać
reguły składni. Składnia opisuje:


Rodzaje dostępnych symboli.
Zasady, według których symbole mogą być łączone w większe struktury.
Składnia najczęściej opisywana jest w formalnym zapisie będącym połączeniem wyrażeń
regularnych oraz notacji BNF lub EBNF. Poniżej przedstawiony jest przykład prostej gramatyki
wzorowanej na języku Lisp:
wyrazenie ::= atom | lista
atom ::= liczba | symbol
liczba ::= [+-]?['0'-'9']+
symbol ::= ['A'-'Za'-'z'].*
lista ::= '(' wyrazenie* ')'
Zapis ten określa wygląd i budowę kolejnych symboli:





Wyrażeniem nazwiemy atom i listę.
Atomem nazwiemy każdą liczbę lub symbol.
Liczbą nazwiemy ciąg cyfr, który może zaczynać się opcjonalnie od
+ lub -.
Symbolem nazwiemy dowolną sekwencję dużych i małych liter alfabetu łacińskiego.
Listą nazwiemy parę nawiasów, w której może się znaleźć zero lub więcej wyrażeń.
Przykładowe
ciągi,
"(a b c232 (1))".
które
spełniają
podane
reguły
składni
to:
"12345",
znaku
"()",
Zauważmy, że na etapie przetwarzania składni w ogóle nie jest brane pod uwagę znaczenie
poszczególnych symboli. W praktyce kod poprawny składniowo nie musi być poprawny
semantycznie. Występuje tu analogia do języków naturalnych. Zdanie "Bźdźiągwy się mucioszą"
jest poprawne pod względem gramatycznym, lecz nie posiada żadnego znaczenia, ponieważ zostały
w nim użyte nieistniejące słowa.
4
Semantyka
Semantyka języka programowania definiuje precyzyjnie znaczenie poszczególnych symboli oraz ich
funkcję w programie. Semantykę najczęściej definiuje się słownie, ponieważ większość z jej
zagadnień jest trudna lub wręcz niemożliwa do ujęcia w jakikolwiek formalizm. Część błędów
semantycznych można wychwycić już w momencie wstępnego przetwarzania kodu programu,
np. próbę odwołania się do nieistniejącej funkcji, lecz inne mogą ujawnić się dopiero w trakcie
wykonywania.
Języki programowania dzielimy:
1. Ze względu na kryterium przydatności:
a) Imperatywne - to metoda programowania, w której program składa się ze zmiennych oraz
modyfikujących je operacji, z jawnie określonym przepływem sterowania. Typowe języki tego
typu to C, Pascal.
Największą zaletą jest bliskość takiej reprezentacji do tego co rzeczywiście wykonywane jest
przez komputer.
b) Funkcyjne - filozofia programowania będąca odmianą programowania deklaratywnego,
w której funkcje należą do wartości podstawowych, a nacisk kładzie się na wartościowanie
(często rekurencyjnych) funkcji, a nie na wykonywanie poleceń.
c) Logiczne - to metoda programowania, w której program podawany jest jako pewien zestaw
zależności, a obliczenia są dowodem pewnego twierdzenia w oparciu o te zależności.
d) Obiektowe - paradygmat2 programowania, w którym programy definiuje się za pomocą
obiektów — elementów łączących stan (czyli dane, nazywane najczęściej polami) i zachowanie
(czyli procedury, tu: metody). Obiektowy program komputerowy wyrażony jest jako zbiór takich
obiektów, komunikujących się pomiędzy sobą w celu wykonywania zadań.
2. Pod względem stopnia zaawansowania na języki generacji:
a) Pierwszej - są to języki maszynowe, czyli języki procesorów. Instrukcje są w nich
zapisywane w postaci liczb binarnych.
Przykładowy kod programu:
111010100000000000001111111111111111100010011101100000000010100000001
wbrew pozorom ma to jakiś sens.
b) Drugiej - języki symboliczne, asemblery. Języki niskiego poziomu, pod względem składni
tożsame z maszynowymi, z tą różnicą że zamiast liczb używa się tu łatwiejszych do zapamiętania
mnemoników3. Należy dodać, iż pod względem znaczenia kod ten jest jednoznaczny z kodem
binarnym przedstawionym w poprzednim punkcie (tylko dla procesorów z grupy 80x86).
c) Trzeciej - języki wysokiego poziomu, proceduralne (imperatywne). W językach tych jedna
instrukcja jest tłumaczona na kilka instrukcji procesora, najczęściej od 5 do 10. Pierwszym
językiem tego typu był ALGOL. Do tej grupy należą między innymi: FORTH, BASIC - języki
niestrukturalne, Pascal, C, FORTRAN - języki strukturalne, C++, Java - języki zorientowane
obiektowo.
d) Czwartej - języki bardzo wysokiego poziomu, nieproceduralne (deklaratywne). Korzystając
z tych języków programista skupia się na problemie, a nie na sposobie jego rozwiązania
Syntaktyka wielu języków czwartej generacji przypomina składnię języka naturalnego. Są one
często używane do dostępu do baz danych. Przykładem języka z tej grupy jest: SQL.
paradygmat - wzorzec programowania przedkładany w danym okresie rozwoju informatyki ponad inne lub
szczególnie ceniony w pewnych okolicznościach lub zastosowaniach.
3
mnemoniki – to składający się z kilku liter kod-słowo, które oznacza konkretną czynność procesora.
Przykładem mogą być: „add” (ang.dodaj) czy „sub” (ang. subtract - odejmij).
2
5
e) Piątej - języki sztucznej inteligencji, języki systemów ekspertowych. Języki najbardziej
zbliżone do języka naturalnego. Przykładem języka piątej generacji jest PROLOG.
Źródła:
http://www.sciaga.pl/tekst/106286-107-klasyfikacja-jezykow-programowania
http://wapedia.mobi/pl/Programowanie_obiektowe
http://chomikuj.pl/krzwin95
http://javaprogramming.awardspace.com/
http://www.pl.capgemini-sdm.com
6
Download