http://poradnik.2lo.elblag.pl/800/jezyki_programowania-ks/
WSTĘP
Komputer jest zbiorem skomplikowanych układów elektronicznych, które same w sobie nie są w stanie wykonać jakiejkolwiek znaczącej operacji. Jego „inteligencja” bierze się w całości z wiedzy, którą przekazali mu programiści w postaci odpowiedniego oprogramowania. Zatem nie ma mowy o funkcjonowaniu komputera bez oprogramowania.
Program jest to przepis (algorytm) na rozwiązanie określonego zadania podany jako zbiór kolejnych poleceń zapisany w jakimś języku programowania. Każdy język programowania ma określony zestaw instrukcji oraz składnię poleceń.
Historia programowania zaczyna się w dziewiętnastym wieku. Przyjmuje się, że brytyjski matematyk Charles Babbage (1791 - 1871) jest wynalazca pierwszej maszyny liczącej, którą dało się zaprogramować. Ch. Babage przedstawił pierwszy prototyp tej maszyny, zwanej maszyną analityczną (ang: analytical engine) w Royal Society. Maszyna owa została opisana przez niego oraz przez Ade Auguste Lovelace (1815-1852), córkę Byrona. Lady Lovelace próbowała nawet za pomocą tej maszyny „obliczyć” wyniki wyścigów konnych. Wprowadzaniu i wyprowadzaniu danych służyły karty dziurkowane. Projekt jednak nie został do końca zrealizowany z powodu braku środków finansowych
Następnym wizjonerem był Alan Turing (1912-1954), który opracował znaną w informatyce koncepcję idealnych maszyn liczących, zwanych „maszynami Turinga”. Ten brytyjczyk miał również swój udział w pracach nad maszyna szyfrujacą Enigma. Maszyna Turinga stała się inspiracja dla John'a von Neumann'a (1903-1957), projektodawcy schematu stosowanego do dziś w architekturze komputerów.
Pod koniec lat 30-tych na arenie pojawia się niemiecki inżynier Konrad Zuse (1910-1995), który skończył budowę pierwszej elektronicznej i programowalnej maszyny liczącej o nazwie Z1. Wojna przerwała jego prace, do której jednak pod koniec lat 40-tych powrócił i w roku 1947 przedstawił pierwszy język programowania „Plankalkuel” (pol: rachunek planowy).
Jednak właściwy rozwój języków programowania zaczyna się w 1957, kiedy pojawia się język programowania FORTRAN (FORmula TRANslator), zaprezentowany przez John'a Backus'a. FORTRAN używany jest do dziś szczególnie w numeryce i fizyce. Dalej rozwój języków programowania, których dziś jest ponad 2000, przebiega w dość szybkim tempie.
Podział języków programowania
Zasadniczo możemy podzielić języki programowania na języki niskiego i wysokiego poziomu. Wśród nich zaś możemy wyróżnić:
Języki bliskie kodu maszynowego - do bezpośredniego sterowania procesorami komputerów.
Języki imperatywne - sekwencje poleceń zmieniających wartości danych.
Języki deklaratywne - składają się z opisowych stwierdzeń dotyczących danych i relacji pomiędzy danymi.
Języki proceduralne - określające procedury obliczeniowe.
Języki funkcyjne - stosują funkcje do kolejnych wartości oraz funkcje (operatory) do manipulacji funkcjami.
Języki definicyjne - kolejne podstawienia interpretowane są jako definicje.
Języki logiczne - oparte na logice matematycznej, programy traktowane są jako formuły logiczne.
Języki ograniczeń (constraint) - problemy są w nich specyfikowane nie w sposób jawny lecz przez podanie zbioru ograniczeń.
Języki obiektowo zorientowane - dane i procedury tworzą obiekty.
Języki programowania współbieżnego - dla komputerów o wielu procesorach.
Języki przepływu danych (dataflow) - dla komputerów o eksperymentalnej architekturze, sterowanych nie tyle kolejnymi instrukcjami co przepływem danych.
Języki czwartej generacji (4GL) - języki bardzo wysokiego poziomu, używają graficznych systemów dialogu z użytkownikiem lub opisu w języku naturalnym.
Języki zapytań baz danych - do zapisywania i wydobywania informacji z baz danych.
Metajęzyki - służące do opisu innych języków programowania
Krótka historia języków programowania
Historię języków programowania najszybciej można przedstawić za pomocą poniższej tabeli:
Opis wybranych języków programowania
Asembler
Asembler język niskiego poziomu, najbliższy kodu maszynowego, wymaga śledzenia zawartości rejestrów. Programy pisane w asemblerze charakteryzują się duża prędkością działania, wadą ich jest małoczytelna struktura.
Przykład: dodanie dwóch liczb:
LD rejestr1 adres1
LD rejestr2 adres2
ADD rejestr1 rejestr2
Disasembler tłumaczy kod maszynowego na asembler. Języki wyższego rzędu często tłumaczą najpierw na asembler, potem na kod maszynowy.
Basic
BASIC = Begginers All-purpose Symbolic Instruction Code Zaawansowane cechy:
manipulacja na wybranych bajtach RAM - instrukcje PEEK (zajrzyj) i POKE (wścib), bezpośredni dostęp do portów zewnętrznych;
instrukcje graficzne - brak standardu.
Implementacje: od 5 instrukcji po rozbudowane języki. Basic to zwykle interpretery, które są wygodne w interakcyjnej pracy, ale są też kompilatory i kompilatory przyrostowe. Przykłady:
BASICA, GWBASIC - nieudane wersje Microsoftu.
Professional Basic (Morgan Computing Co) - interpreter, pracuje okienkowo nawet w DOSie.
BetterBasic (SummitSoftware Technology) - kompilator przyrostowy, struktura modułowa.
Turbo Basic (Borland) i Quick Basic (Microsoft) - dwie udane implementacje, środowisko programisty.
QBasic - uproszczona wersja Quick Basic bez środowiska programisty.
Visual Basic - programowanie pod Windows, dostęp do funkcji systemu, elementów interfejsu, współpraca z bazami danych.
Fortran, F
FORmula TRANslation, czyli tłumacz formuł".
Standard ANSI (American National Standards Institute)
Historia standaryzacji: Fortran II, Fortran IV, 77, 90, 95
Implementacje IBM Fortran G, H.
Język nadal się rozwija, chociaż C. Dijkstra, tak pisał o Fortranie już w 1972 roku:
(...) wady ujawniły się dopiero po 10 latach intensywnego używania, ludzie go projektujący godni są podziwu (...) jednak im prędzej zapomnimy, że FORTRAN kiedykolwiek istniał, tym lepiej, bo jako nośnik myśli nie jest on już wystarczający: marnuje nasze władze umysłowe, jest zbyt ryzykowny i dlatego zbyt drogi by go używać. ... Modlę się codziennie za moich towarzyszy-programistów, by więcej z nich znalazło sposób na uwolnienie się od przekleństwa kompatybilności. Jednakże Fortran się rozwinął - teoretycy rzadko potrafili przewidzieć rozwój informatyki.
Język znalazł zastosowanie numeryczne, naukowe i inżynierskie. Zaletą jest duża szybkość programów oraz rozbudowane biblioteki procedur numerycznych.
Duży stopień standaryzacji: od PC do superkomputerów.
Język F: opracowany w połowie lat 90-tych, rozwiniecie Fortranu do nauki programowania, programy modularne, łatwo zrozumiałe i łatwo się je rozwija. Moduły F można wykorzystywać wielokrotnie podobnie jak obiekty. F to programowanie zorientowane modułowo, łatwiejsze od obiektowo zorientowanego. Wady:
brak środowisk programistów porównywalnych z innymi językami,
brak standardu grafiki.
Nowością jest: Digital Visual Fortran - doskonałe środowisko do programowania w Fortranie 90/95, używa środowiska Microsoft Developer Studio, zintegrowany z Microsoft Visual C++ 5.0 i Visual Studio '97, biblioteki graficzne i numeryczne.
APL, J
APL, czyli A Programming Language; APL W USA w środowisku inżynierów 80% programów stworzonych jest w języku APL. Do APL potrzebne są specjalne klawiatury, ze względu na greckie litery. Dzięki APL można zastosować komputer jako superkalkulator.
Nowsza wersja APL - język J, nie wymagaja znaków specjalnych na klawiaturze. Kolejna odmiana APL2 - lansowany jest przez IBM jako interakcyjne narzędzie do rozwiązywania problemów, wizualizacji danych i dostępu do baz danych.
Pascal
Zaprojektował go w 1971 roku N. Wirth z Politechniki w Zurychu. Popularność zdobył dzięki implementacji TurboPascal (1983) firmy Borland. TP ma wiele rozszerzeń, dobre zintegrowane środowisko: edytor, debuger, projekty, doskonałą pomoc, stosunkowo dużą szybkość kompilacji i wykonania, ale bardzo długo ograniczenia pamięci do 64 K.
Jest to pierwszy język, którego naucza się informatyków.
Istnieje wiele udanych kompilatorów i narzędzi do programowania w Pascalu. Siłą języka są rozbudowane struktury danych: typ prosty porządkowy, wyliczeniowy, okrojony, całkowity (shortint, longint, byte), logiczny, znakowy (bajt), rzeczywisty (single, double, extended, comp), łańcuchowy, strukturalny, tablicowy, rekordowy, zbiorowy, plikowy, wskaźnikowy.
Modula i Oberon
Niklaus Wirth niezadowolony z Pascala opracował Modulę - bardziej modularny język nadający się do budowy dużych programów, można w nim też wygodnie pisać kompilatory czy całe systemy operacyjne. Modula zawiera związane ze sobą procedury i dane, podobnie jak obiekty, składa się z części definiującej oddziaływanie z innymi modułami i części określającej jego funkcje. Język ten pozwala odwoływać się bezpośrednio do sprzętu.
Modula-Prolog służy do programowania logicznego; Modula/R, od programowania baz danych. Ulepszone: Modula-2 i Modula-3 są już o orientacji obiektowej (DEC Software Research Center), Wadą Moduli jest brak standaryzacji.
Oberon, Oberon-2 to kolejne dwa języki Wirtha, zbliżone do języków obiektowych, jednak mało znane.
Język C
Jest to najczęściej obecnie używany język na komputerach klasy PC. System Unix został napisany w C, jest on standardem na stacjach roboczych, stąd też duża jego popularność.
C ma duże możliwości, pozwala dobierać się do rejestrów procesora podobnie jak asembler, łatwo przenosić programy C między różnymi systemami komputerowymi. Struktury danych w C są prostsze niż w Pascalu.
Ada
Nazwa języka pochodzi od imienia Ady Lovelace (1811-1852), przyjaciółki Babbage'a, uznawanej za pierwszą programistkę na świecie (patrz Wstęp do niniejszej pracy).
Język powstał na zlecenie Departamentu Obrony (DoD) USA, gdyż żaden istniejący język nie spełniał ich wymagań, a były to:
zmniejszenie kosztów oprogramowania,
zapewnienie bezbłędności programu (bezpieczeństwo),
ułatwienie dalszego rozwoju oprogramowania (czytelność),
stosowanie naturalnej konstrukcji,
zapewnienie sprawności.
Ada 95 - rozszerza wymagania o większe możliwości współpracy z innymi językami, giętkość konstrukcji języka (używanie obiektów), kontrolę nad zarządzaniem bazami danych i synchronizacją rozproszonych danych oraz standaryzacją bibliotek oprogramowania. Ada 95 jest pierwszym obiektowo zorientowanym językiem, który przeszedł przez proces standaryzacji. Jest uniwersalnym językiem programowania, nadaje się również do programowania w czasie rzeczywistym (sterowanie procesami). Pozwala nawet wstawiać fragmenty kodu maszynowego do programu. Ada jest językiem bogatym, niełatwo go dobrze opanować.
Przeprowadzone w połowie lat 90-tych badania efektywności programowania w C i w Adzie pokazały, ze koszty rozwoju programów w C były dwukrotnie wyższe. Składa się na to kiepska czytelność programów napisanych w C i trudności w usuwaniu w nich błędów. Na etapie tworzenia programów zanotowano 70% mniej błędów, a na etapie obsługi klienta aż 90% mniej błędów korzystając z Ady zamiast C.
Kompilatory muszą przejść ostre testy zgodności ze standardem. Darmowym kompilatorem języka Ada95 jest GNAT.
Forth
Ciekawy język, opracowany przez Charlesa Moore około 1970 roku do sterowania radioteleskopem, początkowo realizacje na 8-bitowych komputerach, 1994 - standard ANSI Forth. Język jest bardzo prosty, programy są niewielkie, efektywne ale mało czytelne.
Zastosowano w nim Odwrotną Polską Notację (Reverse Polish Notation, RPN), używaną również w popularnych kalkulatorach Hewletta-Packarda. Np. (3+4)*5 trzeba napisać:
3 4 + 5 *
Programowanie polega na definiowaniu słów z listy ok. 30 słów bazowych, słowa kompilowane są w całość i dodawane do listy słów. Język jest mało używany i nie ma chyba szans na rozpowszechnienie.
Logo
Logo stworzone zostało w latach 60-tych przez Daniela Bobrowa i Wallace'a Feurzeiga z firmy Bolt, Beranek and Newman, Inc.oraz Seymura Paperta, profesora informatyki z MIT. Logo ucieleśnia wiele idei Piageta dotyczących sposobu uczenia się dzieci. Język programowania ma umożliwiać łatwy start - już siedmiolatki mogą go używać - a przy tym stwarzać nieograniczone możliwości w miarę nauki. Język Logo to sterowanie żółwiem po ekranie przy pomocy odpowiednich komend, np.:
DOPRZODU 10 (FORWARD 10)
WPRAWO 90 (RIGHT 90)
W latach 80-tych bardzo popularny w Polsce w czasie komputerów 8-bitowych: ZX Spectrum, Atari, Commodore. Obecnie już chyba zapomniany, a szkoda.
Cobol i PL/I
COBOL jest akronimem od Common Business Oriented Language. Służy głównie do zagadnień finansowych, dla banków, mniej administracyjnych (brak bazy danych), Jeszcze niedawno za zachodzie było wielkie zapotrzebowanie na programistów programujących w tym języku, gdyż problem roku 2000 istniał głównie z powodu programów napisanych w Cobolu.
Konstrukcje zbliżone są do naturalnego opisu problemu w języku angielskim. Programy długie ale łatwo zrozumiałe. Rozbudowane struktury danych, np. rozgałęzione typu drzewa, rekordy. Istnieją dobre kompilatory na PC, również darmowe.
PL/I, opracowany w 1964 roku, był połączeniem Fortranu i Algolu z COBOLem. Cechy języka to rozbudowane i niezależne od sprzętu typy danych, dynamiczna alokacja pamięci, prawie 200 wbudowanych operacji na zmiennych numerycznych i tekstowych, dobra komunikacja z urządzeniami zewnętrznymi. Niestety nigdy nie zdobył większej popularności.
LISP, Prolog i języki sztucznej inteligencji
LISt Processing, oparty na matematycznym formalizmie zwanym lambda-rachunkiem".
Prowadzenia dialogu w języku naturalnym, programy diagnostyki medycznej, systemy algebry symbolicznej.
Język aplikatywny: wszystkie konstrukcje LISPu są wynikiem zastosowania funkcji do argumentów, np. wyrażenie x^2+y wymaga funkcji plus i times: (plus (times x x) y). Rekurencja, programy jak i dane są listami, programy mogą zmieniać siebie.
Istnieje wiele implementacji, np. Common LISP (1984), i rozszerzeń, CLOS, CLIM, Iterate i Screamer.
Snobol, String Oriented Symbolic Language, czyli język symboliczny zorientowany w stronę łańcuchów znaków tekstowych.
PROgramming in LOGic czyli ProLog.Rozwijany od początku lat 70-tych. Łatwiejszy niż LISP, reprezentacja logiczna wiedzy, analiza języka naturalnego. Wbudowana baza danych, rekurencja.
Program to zbiór faktów, powiązań (klauzul logicznych) pomiędzy nimi, oraz dyrektyw, czyli zapytań. Podstawowa strukturą danych jest drzewo - szczególny rodzaj listy.
Stwierdzenie: Bocian zjada żaby zapiszemy jako ZJADA(Bocian,Żaby). Pytanie co zjada bocian - ZJADA(Bocian,X)
Istnieją dobre realizacje na PC, np. TurboProlog (Borland). Liczne rozszerzenia: Prolog II, Prolog III, Prolog ++ (obiektowy), Visual Prolog.
Języki zorientowane obiektowo
OOP (Object-Oriented Programming), rozwija się od 1981 roku, pierwszym językiem OOP był Smalltalk.
Klasa jest pewnym wzorcem rzeczy, działania, zjawiska którego dotyczy nasz program. Najprostsza klasa: liczby określonego rodzaju, np. liczby całkowite lub zmiennoprzecinkowe. Klasa zawiera również metody, czyli funkcje i procedury, które dają się zastosować do danej klasy. W przypadku liczb całkowitych są to operacje arytmetyczne. Konkretne elementy (realizacje) danej klasy to właśnie obiekty. Obiekty zawierają w sobie zarówno metody (programy) jak i dane.
Program przesyła informację pomiędzy obiektami; działanie programu polega na komunikacji obiektów, tworzeniu zależności między obiektami i modyfikacji ich cech. Nowe obiekty buduje się w oparciu o już istniejące, poprzez dziedziczenie cech innych obiektów i dodawanie nowych cech. Do obiektu można wysłać komunikat (dane), obiekt użyje dostępnych mu metod przetwarzania informacji i wyśle komunikaty do innych obiektów. Nową klasę utworzyć można z innych klas przez dziedziczenie ich danych i metod oraz dodawanie nowych lub zmianę odziedziczonych danych i metod. Powiązania między klasami wygodnie jest przedstawić w postaci drzewa, na którym zaznacza się klasy-rodziców i ich klasy-potomstwo.
Większość systemów programowania obiektowego zawiera narzędzia pozwalające na przeglądanie takich powiązanych klas (class browsers lub object browsers, czyli przeglądarki klas lub obiektów).
Języki OOP oferują narzędzia do tworzenia obiektów, czyli hermetyzacji (enkapsulacji, zwinięcia) danych i programu w obiekt. Obiekty są wielokrotnie używalne, biblioteki obiektów pozwalają na składanie programu z klocków. Polimorfizm (czyli wielopostaciowość) umożliwia ukrycie wewnętrznej struktury obiektów przez wyposażenie ich w jeden zunifikowany interfejs.
Object Management Group (OMG) opracowała wymagania dla języków zorientowanych obiektowo.
Niezależne testowanie ułatwia pielęgnację programu, oszczędza czas dzięki wielokrotnemu wykorzystaniu obiektów, np. elementów systemu graficznego dialogu z użytkownikiem.
Smalltalk to uniwersalny język stworzony dla potrzeb muzyki, gry komputerowe, inteligentne bazy danych, programy dla robotów, przetwarzanie sygnałów z oscyloskopu, zarządzanie centralami telefonicznymi w USA, systemem kolejkowania na dużych instalacjach komputerowych, testowaniem półprzewodników i oceną kosztów produkcji samochodów, zastosowania w systemach informacyjnych dla potrzeb biznesu. Sporo udanych implementacji, darmowy kompilator GNU Smalltalk
Eiffel - metoda konstrukcji oprogramowania i dobry język do nauczania programowania. Sather, wzorowany na Eiffel.
C++, najczęściej stosowany język obiektowy - nie jest to język czysto obiektowy, ma pewne ograniczenia. Ogromne rozbudowanie i trudne do opanowania środowiska, pełne bardzo rzadko używanych obiektów.
Wiele udanych realizacji: Borland C++ Builder, środowisko 4GL dla C++
Visual C++ Warsztat Programisty (Visual Workbench), środowisko tworzenia programów pozwalające na edycję, kompilację i śledzenie błędów w opracowywanym programie; Studio Aplikacji (AppStudio) do budowania graficznego systemu dialogu z użytkownikiem i edycji programów; Czarodziej Aplikacji (AppWizard), szybkie "składanie" obiektów znajdujących się w bibliotece i tworzenie szkieletu programu; Czarodziej Klas (ClassWizard) , śledzenie wykonywania programu i modyfikację obiektów.
DBMS języki do zarządzania bazami danych
SQL, czyli Structured Query Language, najbardziej popularny jezyk DBMS.
Bazy danych zawierają własne języki, np.: Oracle, Ingres, Informix, Paradox, dBase, FoxPro, MS Access ...
Obliczenia w biznesie - np. język ABAP/4, język czwartej generacji. Jest połączeniem SQL'a i języka wysokiego poziomu. Używany w systemach SAP R/3.
4GL - języki czwartej generacji
Najbardziej znane:
CA-Visual Objects, reklamowany jako software "który myśli" ...
Delphi
PowerBuilder Enterprise
Team Enterprise (Symantec Corp), oraz późniejsza wersja, Enterprise Developer
Oracle Power Objects
Wiele innych: Clarion, Magic, Matrix Layout, Plastic Software, Vermont Views, 4th Dimension ...
Programowanie wizualne
Visual Programming Languages. Jest to program przedstawiony w postaci powiązanych ze sobą obiektów zamiast tekstu.
Programowanie stron WWW
Java Programy w języku Java (tzw. aplety) są niewielkie, można uruchamiać na wielu różnych systemach operacyjnych. Są to największe zalety tego języka. Obecnie znalazł on zastosowanie w telefonach komórkowych, programy noszą nazwę midletów.
Języki skryptowe - JavaScript, CGI, PHP, Perl, DHTML, ActiveX, do programowania stron WWW
DHTML, dynamiczny HTML, czyli HTML + interaktywne rozszerzenia. Zwykle są to skrypty JavaScript i kaskadowe arkusze stylów (CSS). Są różnice interpretacji pomiędzy przeglądarkami. Typowe efekty: przeciągane rysunki, podświetlane menu, zmiana koloru, kształtu elementu po jego wskazaniu i wiele innych. Zalety: dynamiczne, multimedialne, małe strony, wykonywane po stronie klienta.
CSS (Cascading Style Sheet), kaskadowe arkusze stylów. Skrypty przypisujące style elementom języków HTML i XML, pozwalają na tworzenie złożonych stron WWW.
CGI (Common Gateway Interface). Najstarszy sposób tworzenia interaktywnych stron WWW; służy wymianie informacji między serwerami WWW a zewnętrznymi programami. Zamienia serwer w bramę (gateway) do źródła informacji, np. bazy danych. Skrypt wywołuje zewnętrzny program podając parametry zaznaczone na stronie przez użytkownika; wynik zwracany jest jako strona HTML.
JavaScript - język obiektowy, niezależny od platformy, interpretowany zwykle przez przeglądarkę WWW. Typowe efekty: rollover - wskazanie elementu graficznego powoduje jego zamianę na inny obrazek, tekst przesuwa się w okienku lub pojawia się czas i data.
PERL, Practical Extraction and Reporting Language. Szybkie i łatwe przeszukiwanie dużych zbiorów tekstowych, tworzenie interakcyjnych stron WWW - np. książek gości czy sklepów internetowych. Perl dostępny jest za darmo dla Linuxa i Windows. Wady: zawiła składnia poleceń, np. skomplikowane funkcje przetwarzania łańcuchów tekstowych.
PHP (Personal Home Page Tools), PHP: Hypertext Preprocesor. Darmowy język, licencja open source - dostępny razem z kodem źródłowym. Jest to język skryptowy + interpreter wykonujący skrypty po stronie serwera. Kod PHP umieszcza się w dokumencie HTML; przed wysłaniem do przeglądarki serwer przekazuje dokument HTML interpreterowi PHP, który tłumaczy komendy PHP oraz wykonuje odpowiadające im operacje.
Krótkie podsumowanie
W niniejszej pracy przedstawiono tylko najważniejsze języki jakie pojawiły się od momentu powstania pierwszych komputerów. Obecnie jest ich ponad 2000. Coraz szybsze tempo ich powstawania zmusza programistów do ciągłego uczenia się nowych zagadnień.
Języki programowania są coraz bardziej zrozumiałe zbliżone do języka naturalnego. Jednakże tak duża ilość języków zmusza do powstawania coraz węższych specjalizacji.
8