Pojęcia związane z aplikacjami internetowymi. Program komputerowy (ang. computer program) - sekwencja symboli zapisana w jakimś języku programowania opisująca obliczenia (ciąg instrukcji) zgodnie z pewnymi regułami opisującymi dany język programowania. Program jest zazwyczaj wykonywany przez komputer (np. wyświetlenie strony internetowej), czasami bezpośrednio – jeśli wyrażony jest w języku zrozumiałym dla danej maszyny lub pośrednio – gdy jest interpretowany przez inny program (interpreter). Programowanie komputerów – proces projektowania, tworzenia, testowania i utrzymywania kodu źródłowego programu komputerowego. Język programowania – Podobnie jak języki naturalne, język programowania składa się ze zbiorów reguł syntaktycznych oraz semantyki, które opisują, jak należy budować poprawne wyrażenia oraz jak komputer ma je rozumieć. Słowo kluczowe (ang. keyword) w języku programowania oznacza słowo mające szczególne znaczenie i oznaczające określony rozkaz, instrukcję lub deklarację w programie komputerowym. Lista słów kluczowych jest najczęściej ustalona dla danego standardu języka wraz z rozszerzeniami określonego producenta kompilatora. W zależności od języka programowania pisownia słów kluczowych może wymagać (lub nie) pisania ich małymi lub dużymi literami oraz zachowywania określonej składni. Kod źródłowy (ang. source code) to zapis programu komputerowego umożliwiający wykonie go w określonym języku programowania, opisujący operacje jakie powinien wykonać komputer. Kod źródłowy jest wynikiem pracy programisty. Kod źródłowy pozwala wyrazić w czytelnej dla człowieka formie strukturę i działanie programu komputerowego. Gotowy kod źródłowy jest zwykle zapisywany do pliku tekstowego. Określenie „wykonanie kodu źródłowego” jest równoważne wykonaniu programu zapisanego tym kodem. Przed wykonaniem kod źródłowy musi zostać poddany translacji na kod wynikowy – w procesie kompilacji jest tłumaczony do postaci kodu wynikowego, najczęściej kodu maszynowego. Możliwe jest także wykonywanie „w locie” programu zapisanego kodem źródłowym przy pomocy interpretera. Translator – program komputerowy (lub urządzenie), dokonujący tłumaczenia (translacji) programu napisanego w języku programowania, z postaci źródłowej do postaci wynikowej możliwej do wykonania przez maszynę (potocznie: „zrozumiałą dla maszyny”). Czasami zamiast kod wynikowy używa się równoważnego określenia kod obiektowy. Translatory dzieli się na dwie grupy: kompilatory tłumaczące programy zapisane w językach wysokiego poziomu oraz assemblery tłumaczące programy zapisane w językach symbolicznych. Asembler (z ang. assembler) – 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. W tym artykule język programowania nazywany będzie językiem asemblera, a program tłumaczący – asemblerem. Język maszynowy, kod maszynowy – zestaw rozkazów procesora, w którym zapis programu wyrażony jest w postaci liczb binarnych stanowiących rozkazy oraz ich argumenty. Był to jedyny język programowania komputerów zerowej generacji, a powszechnym w początkowym okresie rozwoju komputerów pierwszej generacji. Kod maszynowy może być generowany w procesie kompilacji lub asemblacji. W trakcie procesu tworzenia kodu maszynowego tworzony jest często kod pośredni zapisywany w pliku obiektowym. Następnie kod pośredni pobrany z pliku obiektowego poddawany jest konsolidacji (linkowaniu) w celu utworzenia ostatecznego kodu maszynowego. Kompilator - program służący do automatycznego tłumaczenia kodu napisanego w języku źródłowym na równoważny kod w języku wynikowym. Proces ten nazywany jest kompilacją. W informatyce kompilatorem nazywa się najczęściej program do tłumaczenia kodu źródłowego w języku programowania na język maszynowy. Jednakże niektóre z nich tłumaczą najpierw do języka asemblera, a ten jest tłumaczony na język maszynowy przez asembler. Różnica pomiędzy kompilatorem a asemblerem polega na tym, iż każde polecenie języka programowania może zostać rozbite na wiele podpoleceń języka maszynowego Interpreter – program komputerowy, który analizuje kod źródłowy programu, a przeanalizowane fragmenty wykonuje. Wykonanie programu za pomocą interpretera jest wolniejsze, a do tego zajmuje więcej zasobów systemowych niż wykonanie kodu skompilowanego, lecz może zająć relatywnie mniej czasu niż kompilacja i uruchomienie. Jest to zwłaszcza ważne przy tworzeniu i testowaniu kodu, kiedy cykl edycja-interpretacja-debugowanie może często być znacznie krótszy niż cykl edycja-kompilacja-uruchomienie-debugowanie. Moduł -wydzielony fragment programu komputerowego. Dzięki podzieleni programu na fragmenty ułatwione jest tworzenie każdego fragmentu przez innego programistę. Konsolidator (ang. linker) lub program konsolidujący to jeden z programów składowych kompilatora. Konsolidator w trakcie procesu konsolidacji łączy zadane pliki obiektowe i biblioteki statyczne tworząc w ten sposób plik wykonywalny. Aplikacja – program użytkowy wykonujący określone zadania. I oferujący interfejs użytkownika. Często jest używany zamiennie z pojęciem program komputerowy, różnią się tym że program nie musi mieć interfejsu użytkownika a aplikacja musi mieć. Aplikacja konsolowa - nie ma interfejsu graficznego i wykonuję się w trybie tekstowym wiersza poleceń (cmd w Windows lub podobne w Linux) Aplikacja internetowa, (ang.) web application – zwana również aplikacją webową, to program komputerowy, który pracuje na serwerze i komunikuje się poprzez sieć komputerową z hostem użytkownika komputera z wykorzystaniem przeglądarki internetowej użytkownika, będącego w takim przypadku interaktywnym klientem aplikacji internetowej. W pracy aplikacji internetowej musi pośredniczyć serwer WWW. Do przygotowania samej aplikacji używa się różnych mechanizmów (np. CGI, JSP, ASP.NET) i języków (np. PHP, Java, C#), jak również serwerów aplikacji. Mechanizm prezentacji danych w przeglądarce określa się czasem mianem cienkiego klienta. Przykładem aplikacji internetowej jest mechanizm edycji treści encyklopedii Wikipedia. Inne witryny WWW należące do tej kategorii to np. serwis aukcyjny Allegro czy księgarnia internetowa Merlin. Aplet (ang. applet – zdrobnienie od aplikacja) – zwykle niewielki program napisany w taki sposób, by mógł zostać osadzony w stronie WWW wprost i wykonany przez przeglądarkę internetową na komputerze, na którym jest ona uruchomiona – najczęściej jest to kod JavaScript, ale też Java, VBScript, Tcl, kontrolek ActiveX (stosowanych tylko w przeglądarce MS Internet Explorer z ogólnym zaleceniem ich wyłączenia ze względu na bezpieczeństwo) Język programowania dokładniej. Język programowania pozwala na precyzyjny zapis algorytmów oraz innych zadań, jakie komputer ma wykonać z wykorzystaniem określonej struktury składniowej danach oraz sterujący przepływem tych danych. Język programowania może być zdefiniowany ze względu na kilka cech: • funkcja: język programowania służy do tworzenia programów komputerowych, których zadaniem jest przetwarzanie danych, wykonywanie obliczeń i algorytmów oraz kontrolowanie/obsługa zewnętrznych urządzeń, np. drukarek, robotów itd. • przeznaczenie: języki naturalne służą do komunikacji między ludźmi, natomiast języki programowania umożliwiają wydawanie poleceń maszynom. Niektóre z języków są wykorzystywane również do kontrolowania jednego urządzenia przez inne. Przykładowo, program wykonywany na komputerze może wygenerować kod PostScript do sterowania pracą drukarki bądź wyświetlacza. • konstrukcje składniowe: język programowania może zawierać konstrukcje składniowe do manipulowania strukturami danych oraz zarządzania przepływem sterowania. • moc: teoria obliczeń klasyfikuje języki według rodzajów obliczeń, które można za ich pomocą zrealizować . We wszystkich językach zupełnych da się zaimplementować ten sam zbiór algorytmów. Przykładem języka niezupełnego jest SQL służący do komunikacji z bazą danych. Postać programu wyrażona w języku programowania określana jest jako kod źródłowy. Na język programowania składa się kilka elementów: składnia – zbiór reguł opisujący sposób definiowania struktur danych rodzaje słów kluczowych i symboli oraz zasady według których te symbole mogą być łączone w większe struktury semantyka - Semantyka języka programowania definiuje precyzyjnie znaczenie poszczególnych symboli oraz ich funkcję w programie. Semantykę najczęściej definiuje się słownie. 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. Typy danych - Każdy język operuje na jakimś zestawie danych, dlatego niezbędne jest podzielenie danych na odpowiednie typy, zdefiniowane ich właściwości oraz operacji, jakie można na nich realizować. Większość języków posiada typy danych do reprezentowania: • liczb całkowitych w różnych zakresach • liczb zmiennoprzecinkowych (reprezentacje liczb rzeczywistych o różnym stopniu dokładności) • ciągów tekstowych Od strony sprzętowej wszystkie te informacje wyrażane są za pomocą sekwencji zer i jedynek. Język programowania nakłada jedynie odpowiednie ograniczenia i zasady ich przetwarzania. Zjawisko konwersji wartości jednego typu na inną nazywa się rzutowaniem. Przykłady języków programowania: C, Java, Objective-C, C++, C#, (Visual) Basic, PHP, Python, JavaScript, Visual Basic .NET, Ruby, Transact-SQL, Perl, F#, Język asemblera, Lisp, PL/SQL, MATLAB, Delphi/Object Pascal, D Wybór jaki jeżyk użyjemy zależy od przebaczenia aplikacji, upodobań programisty, strategi firmy i istniejącej infrastruktury. Kompilatory. Kompilator – program służący do automatycznego tłumaczenia kodu napisanego w jednym języku (języku źródłowym) na równoważny kod w innym języku (języku wynikowym). Proces ten nazywany jest kompilacją. Jeżeli w jej trakcie zostaną wykryte niezgodności z regułami języka programowania to kompilacja zostanie przerwana a programista zostanie poinformowany o rodzaju błędu. Na proces kompilacji składają się następujące etapy: • wstępne przetwarzanie kodu: wykonanie poleceń preprocesora. • analiza leksykalna • analiza składniowa (ang. parsing) • analiza semantyczna • optymalizacja kodu wynikowego • generacja kodu. Wstępne przetwarzanie kodu – wykonywane prze preprocesor który wyszukuje w programie specjalne polecenia i je wykonuje. Np dotleniacze zawartości innego pliku lub pominięcie fragmentu kodu. Polecenia te w języku C++ zaczynają się od znaku # np. #include #define Analiza leksykalna (lexical analysis), wstępne czynności dokonywane przez kompilator na tekście programu, obejmujące podział tekstu programu na ciąg symboli, które sprawdza się pod względem gramatycznej poprawności i umieszcza na wspólnym wykazie, przypisując im odpowiednie kody. Analiza składniowa (ang. syntax analysis ) -inaczej parsowanie (ang. parsing) sprawdzenie poprawności składniowej programu lub jego modułu wykonywane przez translator (kompilator), a polegające na dokonaniu rozbioru gramatycznego analizowanej jednostki tekstu w celu ustalenia jego struktury gramatycznej i zgodności z gramatyką języka. Analiza semantyczna jest, wykonywana po analizie syntaktycznej, a przed generowaniem kodu, w której sprawdzana jest poprawność programu na poziomie znaczenia poszczególnych instrukcji oraz programu jako całości. Analiza semantyczna najczęściej operuje na drzewie składni, do którego dodaje dodatkowe informacja, np. typy wartości. W analizie semantycznej można wyróżnić trzy obszary działania: • kontrola typów, czyli sprawdzanie poprawności typów w każdym węźle drzewa składni programu (w tym także sprawdzanie, czy identyfikatory zostały zadeklarowane) występuje ona tylko w językach z silnym typowaniem, • kontrola poprawności instrukcji, czyli sprawdzenie, czy instrukcje i wyrażenia mają sens w kontekście, w którym zostały użyte, • kontrola nazw, czyli sprawdzenie, czy nazwy jednoznacznie identyfikują funkcje, etykiety i inne konstrukcje języka programowania. Optymalizacja kodu wynikowego – proces, w którym dosłowna wersja kodu źródłowego, zazwyczaj w postaci jakiegoś drzewa, jest przekształcana w postać umożliwiającą sprawne wykonanie. Optymalizacja pozwala poprawić wydajność, często jednak taki kod jest trudniejszy do debugowania, ponieważ utracona zostaje pełna odpowiedniość pomiędzy kodem źródłowym a wykonywanym. Z tego powodu istnieje możliwość wyłączenia optymalizacji w opcjach kompilatora Generowanie kodu – ogół czynności dokonywanych podczas kompilacji, w których na podstawie abstrakcyjnej reprezentacji kodu źródłowego (przeważnie pewnego drzewa) generowany jest kod niskopoziomowy - asembler, kod wykonywalny, lub rzadziej kod w języku pośrednim.