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