Język programowania
Język programowania to usystematyzowany sposób przekazywania komputerowi poleceń do wykonania.
Język programowania pozwala programiście na precyzyjne przekazanie maszynie, jakie dane mają ulec obróbce i jakie czynności należy podjąć w określonych warunkach.
Asembler
Asemblery lub języki asemblerów (ang. assembly languages) to w informatyce rodzina języków programowania niskiego poziomu, w których zasadniczo jedno polecenie odpowiada jednemu rozkazowi procesora. Są to języki powstałe na bazie języka maszynowego poprzez zastąpienie liczb odpowiadających fragmentom rozkazów kodu maszynowego ich symbolicznymi odpowiednikami. Dzięki zamianie liczb na tzw. mnemoniki można pisać programy w miarę zrozumiałe dla człowieka, a jednocześnie bezpośrednio tłumaczone na kod maszynowy procesora, co pozwala zapewnić duży stopień kontroli programisty nad zachowaniem procesora.
Pierwszym asemblerem był skonstruowany przez Konrada Zuse - układ elektromechaniczny przygotowania taśmy perforowanej z programem dla maszyny Z4 (moduł Planfertigungsteil). Pozwalał na wprowadzanie i odczyt rozkazów i adresów w sposób zrozumiały dla człowieka.
Współcześnie praktycznie nie używa się asemblera do pisania całych programów dla komputerów osobistych. Jest on za to wciąż używany do pisania fragmentów wymagających bardzo wysokiej wydajności lub mających inne specjalne wymagania, np. dla oprogramowania mikrokontrolerów o niewielkich rozmiarach pamięci programu.
Języki zewętrzne
Języki programowania klasyfikuje się zależnie od tego, do jakiego paradygmatu lub paradygmatów (Paradygmat jest to zbiór podstawowych stwierdzeń i pojęć które tworzą teorię) programowania najlepiej się nadają:
Imperatywne
Programowanie imperatywne to takie które skłąda się ze zmiennych i operacji które je modyfikują. W takich językach programowania jest widocznie określony przepływ sterowania.
Największą zaletą takiego programowania jest bliskie porównanie kodu z tym co aktualnie wykonuje komputer. Typowymi językami programowania dla tego typu są Pascal i C.
Obiektowe
Programowanie obiektowe polega na tworzeniu programów, definiując obiekty łączące w sobie stan i zachoewanie obiektu. Tradycyjne programowanie różni się od programowania właśnie tym,że dane i procedury nie są ze sobą bezpośrednio połączone.
Programowanie obiektowe ma ułątwić pisanie oraz konserwacjię danego kodu oraz umożliwia wielokrotne użycie fragmęty kodu w całym programie.
Językami typowymi dla tego typu są np.VisualBasic, Delphi (gdzie podstawą jest ObjectPascal) itp..
Funkcyjne
Programowanie funkcyjne to takie, w którym funkcjie nalężą do wartości podstawowych a nacisk kładzie się na ewaluacjię funkcji a nie na wykonywanie poleceń. Podstawą teoretyczną takiego programowania jest rachunak lambda z typami. Języki funkcyjne dzielą się na :
czysto funkcyjne
Języki czysto funkcyjne to takie w których nie występują zmienne ani efekty uboczne, a ewaluacjia jest leniwa.
Wejście/wyjście w takich językach musi się odbywać jakimś alternatywnym mechanizmem, np. za pomocą monad. Jedyny ważniejszy przedstawiciel to Haskell.
mieszane
Języki mieszane są grupą dominującą gdyż pozwalają na zmienne, efekty uboczne, tradycyjne IO oraz mieszanie stylu funkcyjnego z imperatywnym bądź obiektowym.
Ewaluacjia przeważnie gorliwa.
*Ewaluacja leniwa (ang. lazy evaluation) to strategia obliczania argumentów do funkcji tylko wtedy, kiedy są potrzebne.
Zaletą jest to, że może obliczyć funkcję nawet jeśli argument jest niemożliwy do obliczenia, jeśli tylko nie używa ona swojego argumentu. Wadą jest, że skutki uboczne argumentów mogą nie zajść.
*Ewaluacja gorliwa (ang. eager evaluation) to strategia obliczania argumentów do funkcji przed jej wywołaniem.
Zaletą jest to, że kolejność obliczeń jest dokładnie określona, wadą - że czasochłonne obliczenia muszą być wykonane nawet jeśli nie są potrzebne.
*Rachunek lambda to system formalny używany do badania zagadnień związanych z podstawami matematyki jak rekurencja, definiowalność funkcji, obliczalność, podstawy matematyki np. definicja liczb naturalnych itd. Rachunek Lambda został wprowadzony przez Alonzo Churcha i Stephen Cole Kleene w 1930 roku. Rachunek lambda jest przydatny do badania algorytmów. Wszystkie algorytmy, które dadzą się zapisać w rachunku lambda, dadzą się zaimplementować na maszynie Turinga i odwrotnie.
Logiczne
Programowanie 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.
oraz inne
Języki kompilowane - są to języki, które przechodzą proces całkowitej kompilacji (automatycznego tłumaczenia) do postaci kodu maszynowego oraz konsolidacji(linkowania(łączenia)) tego kodu z innym kodem maszynowym (używanych bibliotek, innych części programu lub części skompilowanych w innym języku programowania - zarówno wyższego jak i niskiego poziomu), po czym powstaje kod wykonywalny odpowiedni dla danego systemu i rodzaju procesora.
Będą to C, C++, Pascal, Object Pascal(Delphi)
Zalety: szybkość
Wady: po kompilacji i linkowaniu trudne do przenoszenia między systemami operacyjnymi i procesorami gdy nie ma dostępu do kodów źródłowych i kompilaterów oraz linkerów, wymaga procesu kompilacji i konsolidacji (linkowania).
Języki interpretowane - są to języki, które nie są tłumaczone przed uruchomieniem na kod maszynowy, ale są w trakcie wykonywania interpretowane przez działający w tle program interpretujący
Będą to PHP, Java Script.
Zalety: przenośność, brak procesu kompilacji i linkowania, nierzadko możliwość prostego korzystania z metod oprogramowania jakie daje program interpretujący - często są to języki wewnętrzne związane z obsługą pewnego oprogramowania, jak np. Java Script interpretowany w przeglądarkach internetowych
Wady: mała szybkość
Język kompilowano-interpretowany - język który jest wstępnie kompilowany do pseudo-kodu prawie maszynowego, który następnie jest interpretowany przez działający w tle program (tutaj tak zwaną maszynę wirtualną Java)
będzie to język Java
Zalety: szybszy od języków interpretowanych, przenośny
Wady: nie tak szybki jak kompilowany
Fortran lub FORTRAN (ang. FORmula TRANslator) to język programowania stworzony w latach 50. i nadal będący w użyciu. Był to niegdyś język proceduralny, obecnie także daje możliwość użycia struktur (Fortran 90/95), a jego głównym zastosowaniem są obliczenia naukowe i analiza numeryczna oraz arytmetyczna.
Z pierwszych wersji języka pochodzi zasada braku rozróżniania małych i dużych liter w słowach kluczowych języka oraz używanych zmiennych a także bogate zasady tworzenia formatów zapisywanych i drukowanych danych.
Dostępna jest wielka ilość bibliotek w Fortranie pozwalających rozwiązywać praktycznie każde zadanie numeryczne. Podstawowe przyczyny, dla których Fortran jest wykorzystywany i rozwijany do dziś, to: szybkość obliczeń oraz wysoka jakość kodu generowanego przez kompilatory Fortrana, wynikająca m.in. z jego długiej obecności na rynku programistycznym, znakomita skalowalność i przenośność oprogramowania (pomiędzy różnymi platformami sprzętowymi i systemami operacyjnymi), a także dostępność bibliotek dla programowania wieloprocesorowego i równoległego. Obliczenia aerodynamiczne, wytrzymałościowe i cieplne obecnie prowadzone są wyłącznie z użyciem tego języka.
Obecnie producenci kompilatorów, a zwłaszcza producenci niezależni, wzbogacają je o możliwość stosowania grafiki celem wizualizacji wyników obliczeń (wykresy, wizualizacja tablic wielowymiarowych) poprzez dostarczanie odpowiednich bibliotek.
Historia i standardy
Pierwszy kompilator Fortranu stworzył zespół Johna Backusa, który w latach 1954-1957 pracował on dla IBM. Kompilator ten był pierwszym w historii kompilatorem języka wysokiego poziomu. Został starannie zoptymalizowany, ponieważ autorzy obawiali się, że nikt nie będzie go używał, jeśli wydajność programów nie będzie porównywalna do programów napisanych w asemblerze.
Pierwsza standaryzacja nastapiła w 1960 roku, kiedy opisano pierwszy standard języka znany jako Fortran IV. Kolejnym standardem był Fortran 66. Standard ten był zbyt ubogi i implementacje musiały zawierać wiele rozszerzeń. W latach siedemdziesiątych American National Standard Institute (ANSI) opracowała kolejny standard nazwany Fortran 77 który w roku 1980 stał się światowym standardem. Jego struktura przystosowana jest do używanych wówczas powszechnie kart perforowanych, ale zawierała elementy programowania strukturalnego. W Polsce bardzo popularna była odmiana Fortranu na maszyny ICL/Odra (FORTRAN 1900), a także Watfor 77, Lahey 77 i MS Fortran na PC czy Fortran 80 dla 8-bitowych komputerów z systemem CP/M-80. W praktyce większość tych kompilatorów miała wiele rozszerzeń, które dopiero po latach weszły do kolejnego standardu (struktury rekordowe, alokowalne tablice, więcej instrukcji pozwalających na programowanie strukturalne itp.). Następcą Fortranu 77 stał się Fortran 90. Standard ma całkowicie zmienioną składnie dostosowaną do współczesnych języków programowania, przykładowo Fortran 90 nie wymusza już na użytkowniku stosowania etykiet i instrukcji Goto. Kolejnym standardem jest Fortran 95, zmiany w stosunku do poprzedniej wersji są niewielkie. Pomimo wprowadzenia nowych standardów Fortran 77 jest nadal w użyciu. Najnowszy standard języka nosi nazwę Fortran 2003
Algol - Algorithmic Language, język programowania, który odegrał ważną rolę w historii informatyki. Od momentu powstania, przez około 20 lat język, lub jego dialekty, był standardem opisu algorytmów w publikacjach naukowych.
Prace nad Algolem rozpoczęto w drugiej połowie lat 50., formalną specyfikację języka opublikowano w raporcie Algol 58, następnie język rozwinięto w raportach Algol 60 i Algol 68. Te właśnie wersje zdobyły uznanie informatyków. O ile Algol 58 oparty był na Fortranie i brakowało w nim wielu niezbędnych dla programisty konstrukcji, Algol 60 stanowił przełom w dziedzinie języków programowania. Był pierwszym językiem zaprojektowanym we współpracy międzynarodowej - w pracach nad nim uczestniczyli między innymi Peter Naur i John Backus. Do opisu języka wykorzystano stworzoną przez Backusa podczas projektowania Fortranu notację BNF, zmodyfikowaną przez Naura. Na podstawie języka Algol 60 Niklaus Wirth stworzył Algol W, który posłużył mu następnie do zdefiniowania Pascala.
W Algolu 60 wprowadzono:
instrukcje blokowe, pozwalające na grupowanie instrukcji w bloki
przekazywanie parametrów do procedur przez wartość i przez nazwę
rekurencję - wywoływanie procedur przez siebie
tablice dynamiczne - ich rozmiar mógł zmieniać się w trakcie działania programu.
słowa kluczowe - symbole użyte jako słowa kluczowe nie mogą być użyte jako identyfikatory w programie
typy danych definiowane przez użytkownika - użytkownik mógł zdefiniować abstrakcyjne typy danych najlepiej pasujące do konkretnego problemu
Algol 60 miał również wady, które zdecydowały o tym, że nie odniósł sukcesu przemysłowego. Nie określono w nim żadnych instrukcji wejścia/wyjścia, pozostawiając je konkretnym implementacjom, które na dodatek były utrudnione przez jego elastyczność i niezależność od sprzętu. Brak było przekazywania parametrów przez zmienną (lub referencję). Nie uzyskał też wsparcia firm komputerowych (głównie ze strony dominującego na rynku w latach 60. IBM, który zainteresowany był rozwojem Cobola i PL/I).
Algol 68 był rozwinięciem idei Algolu 60, wprowadzono w nim wreszcie operacje wejścia/wyjścia. Ścisłe określenie języka posunięto jednak do granic: opublikowany w styczniu 1969 roku raport języka był tak formalny, że wielu informatyków uznało go za całkowicie nieczytelny. Mimo to Algol 68 był pierwszym z niewielu języków zdefiniowanych w sposób formalny przed implementacją, które odniosły pewien sukces przemysłowy.
BASIC (Beginner's All-purpose Symbolic Instruction Code) - język programowania wysokiego poziomu, opracowany w 1964 przez Johna George'a Kemeny'ego i Thomasa E. Kurtza w Dartmouth College w oparciu o Fortran i Algol-60.
Historia
BASIC wybił się na czoło języków do zastosowań amatorskich i półprofesjonalnych po wprowadzeniu na rynek mikrokomputera Altair 8800. Twórcami dialektu BASIC-a dla tej maszyny byli Bill Gates i Paul Allen. BASIC szybko zaimplementowany został przy budowie serii komputerów Apple, a później (jako GW BASIC) w IBM PC (początkowo w ROM, a po pojawieniu się DOSa na dyskietce).
Następcą GW BASIC-a dla pecetów został QB, później rozprowadzany komercyjnie jako QuickBASIC, który w końcu wyewoluował w Visual Basic for Windows. Istnieją też alternatywne interpretery i kompilatory tego języka dla platformy win32 (Power BASIC, Dark BASIC itp.)
W Polsce najbardziej znane są dialekty BASIC-a napisane dla popularnych komputerów ośmiobitowych - Commodore, Amstrada CPC, Atari i Sinclair ZX Spectrum.
Semantyka
Programy w BASIC-u składają się z kolejno wykonywanych instrukcji, które zebrane są w wiersze. Wszystkie dialekty oprócz najprymitywniejszych dopuszczają kilka instrukcji w jednym wierszu, rozdzielonych zazwyczaj znakiem dwukropka. Starsze wersje wymagały numerowania wierszy (maksymalny numer wynosił zwykle 9999, 16384 albo 32767).
Zmienne mogą mieć dowolnie długie nazwy zaczynające się od litery. Nazwy zmiennych łańcuchowych zakończone są znakiem dolara. Tablice mogą mieć dwa lub więcej wymiarów (w niektórych dialektach tablice znakowe służą do wskaźnikowego dostępu do łańcuchów, jak w C).
BASIC w sprowadzonej do wspólnego mianownika wersji posiada bardzo proste mechanizmy sterowania przebiegiem programu - instrukcję skoku bezwarunkowego GOTO, wywołania podprogramu GOSUB (kończonego instrukcją RETURN) oraz warunkową (IF..THEN (oraz ELSE w niektórych dialektach). Za pomocą instrukcji FOR..NEXT można powtarzać określone fragmenty programu (pętla iteracyjna).
Niektóre dialekty posiadają także instrukcje pętli warunkowej (DO LOOP..UNTIL, WHILE..WEND), skoku warunkowego (ON GOTO, ON GOSUB), oraz wyboru warunkowego (CASE..SELECT).
Inne typowe instrukcje:
RUN - uruchomienie programu
PRINT tekst - wyprowadzenie tekstu lub wartości zmiennej na urządzenie wyjściowe (najczęściej ekran).
INPUT zmienna - wczytanie wartości z klawiatury do zmiennej
DIM tablica - deklaracja tablicy
LET zmienna = wartość - deklaracja zmiennej (czasami LET można opuścić)
STOP - zatrzymanie programu
CONTINUE - wznowienie zatrzymanego programu
Ponadto w większości dialektów dostępne są funkcje matematyczne (INT, ABS, SGN) trygonometryczne (SIN, COS, TAN, czasami LOG, LN) i operacji na łańcuchach (szereg funkcji zakończonych znakiem $, np. LEFT$, UPPER$).
COBOL (od skrót angielskiego Common Business Oriented Language) Został stworzony z głównym przeznaczeniem do prac programistycznych w dziedzinach ekonomii i biznesu. Został zapoczątkowany w 1959 roku na spotkaniu tzn. Short Range Committee w Pentagonie zorganizowanym przez Charlesa Phillipsa z amerykańskiego departamentu obrony. Komitet miał na celu doraźnie (short range) określić wspólny język programowania dla środowisk przemysłowych. Prace nad COBOL-em trwały okolo 6 miesięcy, a jest on używany od ponad 40 lat.
Zalety i wady
Chociaż COBOL posiada wspaniałe możliwości tworzenia własnej dokumentacji i ma dobre typy danych, ma także wiele wad, patrząc przez pryzmat współczesnych języków programowania :
nadmiernie rozbudowana składnia
brak zmiennych lokalnych
brak rekurencji
brak dynamicznej alokacji pamięci
brak programowania strukturalnego
brak programowania obiektowego
i wielu innych
Z tego względu niewiele nowych programów powstaje w COBOL-u.
Cechy języka COBOL sprawiły, że programy nadal działające w firmach (głównie finansowych) stały się podatne na usterki takie jak Problem roku 2000.
Logo jest to język programowania stworzony jako środek do nauczania informatyki i matematyki. Składa się z gotowych elementarnych procedur, które służą do definiowania procedur użytkownika. Ten język programowania został zaprojektowany przez pracującego pod koniec lat 60. na MIT Seymoura Paperta. Jest on oparty o LISP, z zupełnie inną składnią i używa tzw. "grafiki żółwia" (ang. turtle graphics). Po grecku logos znaczy słowo.
Grafika żółwia
Początkowo język Logo służył do sterowania robotem zwanym ze względu na swój wygląd "żółwiem". Robot ten po wpisaniu komendy FORWARD 50 przemieszczał się po podłodze o pięćdziesiąt kroków albo np. obracał się w prawo o kąt prosty po komendzie RIGHT 90. "Żółw" wyposażony był także w specjalne pióro, za pomocą którego mógł znaczyć trasę swojej wędrówki.
Wraz z upływem czasu, gdy powstały graficzne terminale komputerów żółw Logo przeniósł się z podłogi na ekran monitora. "Żółw ekranowy" jest znacznie tańszy w esploatacji, szybszy oraz posiada znacznie więcej możliwości. Mimo to, "żółwie podłogowe" są nadal interesujące chociażby ze względu na możliwość pomiaru właściwości otoczenia (np. temperatury, rozmieszczenia przeszkód itp.)
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 1971 roku.
Nazwa Pascal pochodzi od nazwiska francuskiego fizyka, matematyka i filozofa Blaise Pascala.
Pierwotnie służył celom edukacyjnym do nauki programowania strukturalnego. Popularność Pascala w Polsce była większa niż w innych krajach ze względu na dostępność kompilatorów w pirackich wersjach (zanim pojawiło się prawo ochrony własności intelektualnej), prostotę języka oraz jego popularyzację przez wyższe uczelnie. Szczyt popularności tego języka przypadł na lata 80-te i początek 90 XX wieku. Wraz ze zniesieniem ograniczeń COCOM, upowszechnieniem się sieci oraz systemu Unix (następnie Linuksa) stopniowo został wyparty przez C i C++.
Jedną z popularniejszych implementacji kompilatorów tego języka był produkt firmy Borland International - Turbo Pascal. W chwili obecnej dość mocno rozpowszechnionym obiektowym dialektem języka Pascal jest Object Pascal osadzony w Delphi oraz Kylix'ie (również wyprodukowanych przez Borland International).
Istnieją wolne kompilatory Pascala, na przykład Free Pascal, a także wolne środowisko IDE jak Lazarus.
Zalety Pascala - czytelność kodu, rygorystyczna kontrola typów danych, wraz z pojawieniem się C stały się dla programistów wadami. Wypromowanym przez C standardem stała się zwięzłość kodu:
Pascal bardzo rygorystycznie podchodzi do kontroli typów, tj. sprawdza czy do zmiennej typu A nie próbuje się przypisać wartości typu B. Jest to dobra cecha języka dydaktycznego, ale w przypadku doświadczonego programisty może być uciążliwa.
Popularność Pascala wzrosła z pojawiem się Delphi - środowiska programistycznego, opartego na obiektowym Pascalu (Object Pascal), pozwalającego na błyskawiczne tworzenie atrakcyjnych wizualnie aplikacji pod Windows. Wraz z pajawiem się biblioteki windows dla C++, oraz narzędzi do automatycznego tworzenia GUI, Pascal znów stracił na znaczeniu.
Clipper powstał w 1985 roku jako język programowania na podstawie systemu zarządzania bazą danych dBase firmy Ashton-Tate. Clipper operuje na plikach bazy w formacie DBF.
Początkowo język rozwijany był przez Nantucket Corporation, pod której kontrolą powstawały kolejne wersje (o ile to możliwe, podano daty głównych plików wykonywalnych):
Clipper Winter'84 - 25.05.1985
Clipper Summer'85 - 1985
Clipper Winter'85 - 29.01.1986
Clipper Autumn'86 - 31.10.1986
Clipper Summer'87 - 21.12.1987
W roku 1990 powstała zupełnie nowa wersja języka, która funkcjonalnie była zgodna z Clipperem S'87 natomiast pod względem wewnętrznej architektury był to już zupełnie nowy produkt.
Clipper 5.00 - 1990
Clipper 5.01 - 15.04.1991
Clipper 5.01 Rev.129 - 31.03.1992
Wersja 5.01 była ostatnią (z licznymi poprawkami i błędami) wersją firmy Nantucket. Wkrótce po jej wypuszczeniu Clippera i jego producenta przejął jeden z największych producentów oprogramowania w Ameryce, Computer Associates (CA), który w krótkim czasie wypuścił poprawioną wersję (i poprawkę do niej):
CA-Clipper 5.01a Rev. 147 - 07.09.1992
CA-Clipper 5.01a Rev. x147 - 16.10.1992
Następnie, po dwuletnim milczeniu powstała nowa, już całkowicie wyprodukowana przez CA wersja. Wersja 5.2 była wielokrotnie poprawiana. Powszechnie uważa się, że wersja 5.2e jest najlepszą (najstabilniejszą) wersją Clippera.
CA-Clipper 5.20 - 15.02.1993 05:20
CA-Clipper 5.2a - 15.03.1993 05:21
CA-Clipper 5.2b - 10.06.1993 05:22
CA-Clipper 5.2c - 06.08.1993 05:23
CA-Clipper 5.2d - 25.03.1994 05:24
CA-Clipper 5.2e - 07.02.1995 05:25 (wydana 21.03.1995)
Ostatnia wersja Clippera została wydana w 1995 roku. Jest ona bardziej obiektowo zorientowana i ma lepszą obsługę zgodnych z FoxPro indeksów CDX, ale w wersji początkowej była mniej stabilna i zyskała mniejszą popularność wskutek braku współpracy z bibliotekami opracowanymi dla wersji wcześniejszej.
CA-Clipper 5.30 - 26.06.1995 05:30
CA-Clipper 5.3a - 20.05.1996 05:31
CA-Clipper 5.3b - 20.05.1997 05:32
Oficjalnym następcą są CA-Visual Objects. Firma CA zaprzestała produkcji Clippera w drugiej połowie 2000 roku. 22.04.2002 r. GrafXSoft z Florydy, dotychczasowy dystrybutor Clippera, na mocy porozumienia z CA faktycznie przejął Clippera i CA-Visual Objects i prowadzi sprzedaż obu produktów oraz rozwój drugiego z nich.
Obecnie rozwijanych jest kilka wolnych wersji kompilatora Clippera:
Harbour wzorowany na ostatniej wersji CA-Clippera z serii 5.2
xHarbour bardziej agresywny fork pochodzący od Harbour, również bardziej komercyjnie nastawiony
Clip wzorowany na wersji 5.3
Delphi (oznaczane często jako Borland Delphi) to zintegrowane środowisko programistyczne typu RAD, przeznaczone do pracy pod kontrolą Microsoft Windows, działające zgodnie z zasadą dwustronnej edycji. Odpowiednik Delphi dla Linuksa nosi nazwę Kylix.
Językiem programowania (obiektowym) osadzonym w Delphi jest Object Pascal (obecnie jest to nieoficjalna nazwa języka; firma Borland zdecydowała się na jej zmianę przy okazji premiery Delphi 6 w roku 2002; wtedy to w oficjalnej dokumentacji programu zostało użyte po raz pierwszy sformułowanie "Delphi language"). Programy tworzone w Delphi muszą zostać skompilowane do postaci kodu binarnego przed pierwszym wykonaniem, pomimo tego podczas projektowania niektóre komponenty działają już w trakcie tworzenia projektu, umożliwiając oglądanie efektów pracy. Delphi zapisuje informacje o właściwościach obiektów udostępniając je programiście. Informacje te umożliwiają zmianę ich wartości przez programistę bez pisania kodu programu oraz są używane podczas pracy programu - technika ta zwana jest RTTI. Tworzone programy pracują na zasadzie obsługi zdarzeń, każde polecenie (np. kliknięcie myszką) generuje zdarzenie, które porzez wewnętrzne mechanizmy programu są przesyłane do odpowiedniego komponentu, a rolą programisty jest tylko dołączenie odpowiedniego kodu umożliwiającego obsługę tego zdarzenia.
Historia
Delphi, opracowane przez firmę Borland, jest następcą środowiska Turbo Pascal będącego połączeniem kompilatora języka Pascal ze środowiskiem edycyjnym. Pierwsza wersja (16-bitowa) Delphi ukazała się w 1995 roku i przeznaczona była do pracy w Microsoft Windows 3.1. Było to jedno z pierwszych narzędzi typu Rapid Application Development
Kolejna wersja - Delphi 2 - ukazała się w roku 1996 i była środowiskiem 32-bitowym, generującym kod dla Microsoft Windows 95. Delphi 3 ukazało się w roku 1997 i wprowadziło do środowiska następujące elementy: pakiety, rozproszoną obsługę baz danych, wspomaganie tworzenia aplikacji internetowych, wspomaganie tworzenia kontrolek ActiveX. Delphi 4 dodało wiele nowych usprawnień IDE (jak na przykład możliwość dokowanie okien), oraz usprawnienia w samym języku programowania (na przykład przeciążanie funkcji oraz metod). W roku 2001 powstała edycja przeznaczona dla Linuksa nazwana Kylix. Wersja 8 (rok 2003) wprowadziła Delphi w środowisko .NET, po raz pierwszy od powstania uległo też zmianie IDE, upodobniając się do Microsoft Visual Studio .NET. W edycji 2005 oprócz zintegrowania w jednym środowisku kompilatorów dla języków Delphi, Delphi.NET oraz C# wprowadzono dalsze udoskonalenia środowiska (zwłaszcza refactoring kodu).
Aktualna wersja: Borland Developer Studio 2006 (wersja 4.0 środowiska) znana jako Borland Delphi 2006/Borland C# Builder 2006/Borland C++ Builder 2006 (jeden produkt jest dostępny w trzech różnych wersjach pudełkowych), pracująca w środowiskach Win32 oraz .NET; integruje w jednym IDE kompilatory trzech języków: Delphi (Win32/.NET), C# (.NET) oraz C++ (Win32). Wersja kompilatora C++ pracująca w BDS4 została oznaczona przez producenta jako "preview" (przeglądowa).
Na początku 2006 roku firma Borland wystawiła wszystkie przygotowane przez nią środowiska programistyczne - w tym również Delphi - na sprzedaż:
Cechy i funkcjonalność
wspomaganie dla obsługi relacyjnych systemów bazodanowych
wspiera obsługę standardowych mechanizmów windowsowych, np. COM/ActiveX
szeroki zestaw gotowych do użycia komponentów
rozszerzalność środowiska (zarówno palety komponentów jak i samego IDE)
dwustronna edycja
budowa wizualnej części aplikacji za pomocą techniki drag and drop
zawiera wiele elementów mających na calu uproszczenie tworzenia aplikacji związanych z Internetem
szybki, efektywny kompilator
zawiera wiele dodatkowych narzędzi wspomagających programistów
Środowisko Delphi wraz z dołączonymi narzędziami może być uznane uznane za język czwartej generacji.
Język C++ jest wieloparadygmatowym językiem programowania, m.in. również obiektowo zorientowanym. Stworzony w latach osiemdziesiątych XX wieku przez Bjarne Stroustrupa. Na język C++ wpływ miały, poza językiem C, jako jego podstawą, przede wszystkim Simula, z której zaczerpnął właściwości obiektowe, a także języki takie, jak Algol, Ada, ML i Clu.
Historia
Początkowo język C++ był dostępny w takim standardzie, w jakim opracowano ostatnią wersję kompilatora Cfront (tłumaczący C++ na C), później opublikowano pierwszy nieformalny standard zwany ARM (Annotated Reference Manual), który sporządzili Bjarne Stroustrup i Margaret Ellis.
Początkowo najważniejszą rzeczą wprowadzoną w C++ w stosunku do C było programowanie obiektowe, później jednak wprowadzono do niego mnóstwo ulepszeń, czyniąc ten język wygodniejszym i bardziej elastycznym od swojego pierwowzoru. Niektóre zmiany w standardzie języka C były w większości zainspirowane językiem C++ (np. słowo inline w C99).
Nazwa języka została zaproponowana przez Ricka Mascitti w 1983 roku, kiedy to po raz pierwszy użyto tego języka poza laboratorium naukowym. Odzwierciedla ona fakt, że język ten jest rozszerzeniem języka C. Wcześniej używano nazwy "C z klasami".
Pierwsze kompilatory języka C++, podobnie jak Cfront, były wyłącznie translatorami na język C. Kompilatory takie dostępne są i dziś. Jednym z nich jest Comeau C++ - jeden z niewielu kompilatorów oferujących pełne wsparcie dla standardu języka. Pierwszym kompilatorem natywnym (produkującym od razu kod asemblerowy) dla języka C++ był g++ z pakietu GCC, którego pierwszym autorem był Michael Tiemann, założyciel Cygnus Solutions.
Java jest obiektowym językiem programowania stworzonym przez grupę roboczą pod kierunkiem Jamesa Goslinga z firmy Sun Microsystems. Java jest językiem kompilowanym do postaci wykonywanej przez maszynę wirtualną i silnie typowanym. Jej podstawowe koncepcje zostały przejęte z języka Smalltalk (maszyna wirtualna, garbage collection) oraz z języka C++ (duża część składni i słów kluczowych).
Programy napisane w Javie można uruchomić na wielu urządzeniach, takich jak telefony komórkowe lub komputery oraz pod różnymi systemami operacyjnymi, przy użyciu Wirtualnej maszyny Javy, która musi być w danym środowisku zainstalowana.
Autorzy języka Java określili kilkanaście kluczowych koncepcji swojego języka. Najważniejsze z nich to:
Obiektowość
W przeciwieństwie do C++ (który jest dodatkiem do proceduralnego języka C), w Javie obiektowość jest zaimplementowana od podstaw. Wszelkie dane i akcje na nich podejmowane są pogrupowane w klasy obiektów. O obiekcie można myśleć jako o samoistnej części programu, która może przyjmować określone stany i posiada określone zachowania, które mogą zmieniać te stany bądź przesyłać dane do innych obiektów. Wyjątkiem od całkowitej obiektowości (np. Smalltalk) są typy proste (int, float itp.).
Dzięki wykorzystaniu reguł obiektowości, Java nie widzi różnicy między danymi płynącymi z pliku lokalnego a danymi z pliku dostępnego przez HTTP czy FTP.
Niezależność od architektury
Tę właściwość Java posiada dzięki temu, że kod źródłowy programów pisanych w Javie kompiluje się do kodu pośredniego (tzw. bytecode). Powstały kod jest niezależny od systemu operacyjnego, a wykonuje go tzw. maszyna wirtualna, która (między innymi) tłumaczy kod uniwersalny na kod dostosowany do specyfiki konkretnego systemu operacyjnego. W tej chwili wirtualna maszyna Javy jest już dostępna dla większości systemów operacyjnych.
Niezawodność i bezpieczeństwo
W zamierzeniu Java miała zastąpić C++ - obiektową nakładkę na język C. Jej projektanci zaczęli od rozpoznania cech języka C++, które są przyczyną największej ilości błędów programistycznych, by stworzyć język prosty w użyciu, bezpieczny i niezawodny.
O ile po pięciu odsłonach Javy jej prostota jest dyskusyjna, o tyle język faktycznie robi dużo, by utrudnić programiście popełnienie błędu. Przede wszystkim Java posiada system wyjątków czyli sytuacji, gdy kod programu natrafia na nieprzewidywane trudności, takie jak np.:
operacje na elemencie poza zadeklarowaną granicą tablicy lub elemencie pustym
czytanie z niedostępnego pliku lub nieprawidłowego adresu URL
podanie nieprawidłowych danych przez użytkownika
W innych językach programowania programista oczywiście może wprowadzić wewnętrzne testy sprawdzające poprawność danych, pozycję indeksu tablicy, inicjalizację zmiennych itd., ale jest to jego dobra wola i nie jest to jakoś szczególnie wspierane przez dany język. W Javie jest inaczej - obsługa wyjątków jest obowiązkowa, bez tego program się nie skompiluje. Przy tym obiekty wchodzące w skład pakietu standardowego Javy (i gros obiektów z pakietów pochodzących od poważnych programistów niezależnych) implementują wyjątki w każdym miejscu kodu, którego wykonanie jest niepewne ze względu na okoliczności zewnętrzne.
Oprócz systemu wyjątków Java od wersji 1.4 posiada dwa inne systemy wspomagające pisanie niezawodnych programów: logowanie i asercje. Pierwsze pozwalają na zapisanie w plikach dziennika przebiegu działania programu, z dodatkową możliwością filtrowania zawartości, określenia poziomu logowanych błędów itp. Drugie rozwiązanie pozwala na upewnienie się, że pewne założenia co do określonych wyrażeń (np. że liczba, z której wyciągamy pierwiastek jest nieujemna) są prawdziwe. Asercje są o tyle ciekawe, że działają tylko z odpowiednią opcją wykonania programu, dzięki czemu programista może sprawdzić działanie programu, a później bez wysiłku spowodować pominięcie testowej części kodu po prostu przez ominięcie tej opcji.
Dystrybucje języka Java
Pakiety
Java nie jest monolitem, lecz składa się z szeregu klas definiujących obiekty różnego typu. Dla przejrzystości klasy te pogrupowane są w hierarchicznie ułożone pakiety. Każdy pakiet grupuje klasy związane z pewnym szerokim zakresem zastosowań języka np. java.io (klasy wejścia-wyjścia), java.util.prefs (klasy użytkowe do obsługi preferencji) czy java.awt (system obsługi trybu graficznego). Hierarchię klas oddają nazwy pakietów, które skonstruowane są podobnie jak ścieżki dostępu do plików. Na przykład klasa Preferences znajdująca się w pakiecie java.util.prefs na pełną nazwę: java.util.prefs.Preferences, co oznacza:
java - pakiet należy do zestawu standardowych pakietów Javy
util - to różnego typu klasy użytkowe (pomocnicze) głównie organizujące obsługę różnego typu struktur danych
prefs - system obsługi preferencji w sposób niezależny od platformy, w którym preferencje systemowe i użytkownika są składowane w postaci hierarchicznego rejestru.
Preferences - konkretna nazwa klasy.
Dzięki takiemu systemowi nazwy klas są niepowtarzalne, co pozwala uniknąć niejednoznaczności (np. czy chodzi o klasę List implementującą strukturę listy danych czy o List implementującą graficzną listę wyświetlaną w okienku).
Pakiety z hierarchii java i javax (dodatki wprowadzone w późniejszych wersjach) należą do podstawowego zestawu klas rozprowadzanych jako Java. Zestaw ten jest dostępny w dwóch wersjach: JRE (Java Runtime Environment) - udostępnia bytecode wszystkich klas standardowych i wirtualną maszynę do ich uruchamiania, zaś JDK (Java Development Kit) dodatkowo udostępnia źródła tych klas oraz dodatkowe narzędzia takie jak kompilator, paker czy debuger. Podział ten wprowadzono dlatego, że użytkownik Javy do uruchamiania programów potrzebuje tylko JRE, natomiast do programowania działających aplikacji potrzeba już JDK.
Implementacje Javy
Potocznie pod nazwą Java rozumie się nie tylko język programowania, ale także całe środowisko (JDK) tworzone przez firmę Sun. Z tego uogólnienia wynikają pewne nieścisłości, jak np. to, że Java jest niezależna od architektury - nie jest to jednak cecha samego języka, a mechanizmu wirtualnej maszyny, wykorzystywanego w standardowej implementacji Suna.