Pojęcia związane z aplikacjami internetowymi. 2

Transkrypt

Pojęcia związane z aplikacjami internetowymi. 2
Języki skryptowe.
Język skryptowy – język programowania służący do kontrolowania danej aplikacji i
interpretowany wewnątrz niej.
Skrypty – programy napisane w językach skryptowych – wykonywane są wewnątrz pewnej
aplikacji, w odróżnieniu od programów ("normalnych", nieskryptowych), które wykonują się
niezależnie od innych aplikacji „wewnątrz” systemu operacyjnego.
Interpretery języków skryptowych są wykorzystywane przez serwery WWW do serwowania
dynamicznych stron internetowych (np. przez interfejs CGI lub dodatkowe funkcjonalności serwera
Apache). Używany w ten sposób jest m.in. PHP, Perl, Python i Ruby. Języki skryptowe osadzane
też są w grach komputerowych. Służą wtedy do sterowania przebiegiem gry – fabułą, dialogami,
zachowaniem wirtualnych postaci, a czasem nawet do sterowania działaniem całego interfejsu
graficznego. Coraz częściej języki skryptowe kompilowane są do binarnego kodu pośredniego,
który wykonywany jest w specjalnej prostej wirtualnej maszynie dużo szybciej, niż przebiegałaby
jego interpretacja bezpośrednio z tekstowej postaci źródłowej.
Biblioteka standardowa to zbiór podstawowych funkcji , dostarczana wraz kompilatorem lub
interpreterem danego języka programowania. Dla niektórych języków, np. ANSI C, istnieje
formalna specyfikacja zawartości i działania biblioteki standardowej. (STL Standard Template
Library, (pol. standardowa biblioteka szablonów)). Biblioteki standardowe mogą być statecznie lub
dynamicznie dołączane do programu.
Do najczęstszych funkcji bibliotek standardowych należą:
• operacje na tekstach,
• Operacje na typach danych, zarządzanie nimi,
• obsługa wejścia/wyjścia.
• Obsługa plików,
• obsługa wielowątkowości,
• zarządzanie pamięcią.
Algorytmy.
Algorytm – w matematyce skończony ciąg jasno zdefiniowanych czynności, koniecznych do
wykonania pewnego rodzaju zadań. Słowo "algorytm" pochodzi od starego angielskiego słowa
algorism, oznaczającego wykonywanie działań przy pomocy liczb arabskich (w odróżnieniu od
abacism – przy pomocy abakusa), które z kolei wzięło się od nazwiska, które nosił Muhammad ibn
Musa al-Chuwarizmi matematyk perski z IX wieku. Algorytm ma przeprowadzić system z
pewnego stanu początkowego do pożądanego stanu końcowego. Badaniem algorytmów zajmuje się
algorytmika. Każdy algorytm może zostać zaimplementowany w postaci programu komputerowego
ale nie każdy jeżyk programowania jest w stanie zaimplementować każdy algorytm.
Jako przykład stosowanego w życiu codziennym algorytmu podaje się często przepis kulinarny. Dla
przykładu, aby ugotować bigos należy w określonej kolejności oraz odstępach czasowych
(imperatyw czasowy) dodawać właściwe rodzaje kapusty i innych składników. Może istnieć kilka
różnych przepisów dających na końcu bardzo podobną potrawę. Przykład ten ma wyłącznie
charakter poglądowy, ponieważ język przepisów kulinarnych nie został jasno zdefiniowany.
Algorytmy zwykle formułowane są w sposób ścisły w oparciu o język matematyki.
Definicja klasyczna
Algorytm to jednoznaczny przepis obliczenia w skończonym czasie pewnych danych wejściowych do
pewnych danych wynikowych.
Zgodnie z założeniem o jednoznaczności dla identycznego zestawu danych początkowych,
algorytm zdefiniowany klasycznie zawsze zwróci identyczny wynik.
Cechy algorytmu:
Uporządkowanie operacji - działania wykonywane w algorytmie muszą posiadać określoną
kolejność. Powinna być wskazana pierwsza operacja. Po wykonaniu każdej operacji musimy
wiedzieć, którą z operacji wykonać jako następną. W algorytmie musi istnieć operacja ostatnia.
Skończona liczba operacji - od algorytmu żądamy praktyczności. Zatem ilość zawartych w nim
operacji nie może być nieskończona, ponieważ wtedy wykonanie algorytmu nigdy by się nie
zakończyło.
Określoność operacji - musimy wiedzieć jak wykonać każdą operację algorytmu. Co więcej,
każda operacja nie może być różnie interpretowana - musi być jednoznaczna, czyli taka, aby można
było ją wykonać tylko w jeden sposób.
Skończoność czasu wykonania - od algorytmu żądamy, aby dawał wynik w skończonym czasie.
W przeciwnym razie nigdy byśmy nie otrzymali wyniku, co jest przecież równoznaczne z brakiem
rozwiązania.
Ogólność - algorytm powinien dawać rozwiązanie wielu podobnych problemów. Złym
algorytmem jest obliczanie sumy 2+2=4. Dobrym algorytmem jest natomiast sposób obliczania
sumy dowolnych liczb.
Zadania niealgorytmiczne:
-malowanie obrazu, ponieważ nie istnieje przepis jak namalować obraz
-pisanie książki, do tego potrzebna jest wyobraźnia, której nie da się określić algorytmem
Występują następujące sposoby przedstawiania algorytmów:
• słowny opis algorytmu
• opis algorytmu w postaci listy kroków
• pseudokod
• schemat blokowy algorytmu
• drzewo algorytmiczne
Opis słowny algorytmu.
Algorytm opisujemy słowami przedstawiając kolejne operacje oraz sposób ich wykonania. Dla
przykładu przedstawimy algorytm Euklidesa znajdowania NWD.
NWD - największy wspólny dzielnik liczb a i b jest największą liczbą naturalną, która
jednocześnie dzieli a i b bez reszty. Euklides zauważył, że NWD liczb a i b dzieli również ich
różnicę. Fakt ten można prosto wyjaśnić geometrycznie:
Przy obliczaniu NWD liczb a i b postępujemy zatem w sposób następujący:
Dopóki liczby a i b są różne, odejmujemy od większej mniejszą. Gdy liczby a i b staną się równe, to
NWD(a,b) jest wartością dowolnej z tych liczb.
Lista kroków.
Wykonanie algorytmu opisujemy przedstawiając kolejne kroki tego procesu. W każdym kroku
opisujemy zwięźle wykonywaną operację. Kroki są numerowane i wykonywane zgodnie z
numerami, o ile nie zostanie nakazane inaczej. Przed listą kroków należy umieścić tzw. specyfikację
danych. Jest to opis danych wejściowych i wyjściowych algorytmu. Dane wejściowe to informacja,
którą musi otrzymać algorytm w celu rozwiązania problemu. Dane wyjściowe to wyniki pracy
algorytmu.
Algorytm Euklidesa wyznaczania NWD dwóch liczb a i b
Wejście: a,b - liczby naturalne, których NWD oblicza algorytm
Wyjście: a lub b - wartość NWD pierwotnych liczb a i b.
Krok 1:
Czytaj a,b
; wczytujemy dane wejściowe
K2: Jeśli a = b, to idź do kroku 5 ; jeśli a = b, to NWD jest a lub b
K3: Jeśli a > b, to a ← a - b. Inaczej b ← b - a
; jeśli a jest różne od b, to od większej odejmujemy mniejszą
K4: Idź do kroku 2
; wracamy do sprawdzania warunku w kroku 2
K5: Pisz a ; wypisujemy NWD
K6: Zakończ
; koniec algorytmu
Pseudokod
Jest to sposób zapisu algorytmu, który, zachowując strukturę charakterystyczną dla kodu
zapisanego w języku programowania, rezygnuje ze ścisłych reguł składniowych na rzecz prostoty i
czytelności. Pseudokod nie zawiera szczegółów implementacyjnych (jak np. inicjalizacja
zmiennych, alokacja pamięci), często też opuszcza się w nim opis działania podprocedur (jeśli
powinien być on oczywisty dla czytelnika), zaś nietrywialne kroki algorytmu opisywane są z
pomocą formuł matematycznych lub zdań w języku naturalnym.
Schemat blokowy to graficzny zapis algorytmu rozwiązania zadania, przedstawiający opis i
kolejność wykonywania czynności realizujących dany algorytm.
W schemacie blokowym poszczególne operacje przedstawione są za pomocą odpowiednio
połączonych skrzynek (klocków, bloków). Połączenia określają kolejność i sposób wykonywania
operacji
realizujących
dany
algorytm.
W literaturze informatycznej przyjęto pewne standardowe oznaczenia poszczególnych działań (są to
figury geometryczne), ale można również używać innych oznaczeń (muszą one jednak być takie
same dla określonego typu operacji).
Przykłady skrzynek (bloków) do prezentacji algorytmu w postaci graficznej:
Elementy schematu blokowego
Nazwa skrzynki
Symbol graficzny
Funkcja
Opis
(bloku)
Skrzynka
graniczna
Skrzynka
operacyjna
Skrzynka
wejścia/
wyjścia
Skrzynka
warunkowa
mają kształt owalu. Ze skrzynki
Początek algorytmu START wychodzi tylko jedno
lub koniec
połączenie, skrzynka STOP nie ma
połączenia wychodzącego.
Wykonywanie
różnych działań, np. ma kształt prostokąta.
sumowania
Wprowadzanie
(czytanie)
danych
jest równoległobokiem, wchodzi i
lub wyprowadzanie
wychodzi z niej jedno połączenie.
(drukowanie,
pisanie) wyników
mają kształt rombu. Ze skrzynki
Sprawdzanie
wychodzą tylko dwa połączenia:
warunku, np. czy N
jedno oznaczone TAK, a drugie
>0
NIE.
Zasady budowania schematu blokowego
• Każda operacja powinna być umieszczona w skrzynce (bloku)
• Schemat powinien posiadać tylko jedną skrzynkę "Start" i przynajmniej jedną skrzynkę
"Stop"
• Skrzynki powinny być ze sobą połączone
• Ze skrzynki powinno wychodzić jedno połączenie; wyjątek stanowią skrzynki "Stop" (z
której nie wychodzą już żadne połączenia) oraz "warunkowa" (z której wychodzą dwa
połączenia opisane Tak i Nie - w zależności od tego czy warunek jest spełniony czy też nie;
można wyjść jedną z dwóch dróg).
Drzewo algorytmiczne
Drzewo algorytmiczne, nazywane także drzewem obliczeń, jest szczególnym rodzajem schematu
blokowego, który przyjmuje postać drzewa w matematycznym tego słowa znaczeniu. W drzewie
algorytmu daje się wyróżnić korzeń- wierzchołek, w którym rozpoczynają się działania algorytmu,
wierzchołki pośrednie, w których są umieszczane operacje wykonywane w algorytmie, oraz
wierzchołki końcowe (liście), które odpowiadają różnym wynikom zakończenia obliczeń w
algorytmie.
Podstawowe metody tworzenia algorytmów komputerowych:
• dziel i zwyciężaj – dzielimy problem na kilka mniejszych, a te znowu dzielimy, aż ich
rozwiązania staną się oczywiste,
• programowanie dynamiczne – problem dzielony jest na kilka, ważność każdego z nich jest
oceniana i po pewnym wnioskowaniu wyniki analizy niektórych prostszych zagadnień
wykorzystuje się do rozwiązania głównego problemu,
metoda zachłanna – nie analizujemy podproblemów dokładnie, tylko wybieramy
najbardziej obiecującą w tym momencie drogę rozwiązania,
• programowanie liniowe – oceniamy rozwiązanie problemu przez pewną funkcję jakości i
szukamy jej minimum,
• poszukiwanie i wyliczanie – kiedy przeszukujemy zbiór danych aż do odnalezienia
rozwiązania,
• heurystyka – człowiek na podstawie swojego doświadczenia tworzy algorytm, który działa
w najbardziej prawdopodobnych warunkach, rozwiązanie zawsze jest przybliżone.
Podziała algorytmów ze względu na przebieg:
Algorytm liniowy(sekwencyjny) realizuje jeden ciąg działań. Kolejność wykonywanych w nim
czynności jest jednoznacznie określona. Wykonywane są one sekwencyjnie, tzn. po kolei, tak jak
zostały zapisane.
Przykład algorytmu liniowego - algorytm obliczania średniej arytmetycznej trzech dowolnych liczb
rzeczywistych.
Algorytm z warunkami(warunkowy, rozgałęziony) : może w nim nastąpić kilka alternatywnych
ciągów działań. Wybór jednego z nich następuje w zależności od spełnienia (bądź niespełnienia)
warunku.
Przykład algorytmu z warunkami - algorytm określenia, która z dwóch liczb jest większa.
Algorytm iteracyjny zawiera instrukcje, które nakazują wielokrotne powtarzanie pewnych
czynności. Iteracje występują w dwóch podstawowych odmianach:
iteracja z określoną liczbą powtórzeń : wykonuj czynność dokładnie N razy, iteracja warunkowa:
wykonaj czynność, dopóki jest spełniony warunek. Algorytm iteracyjny może działać na danych o
dowolnej długości (wielkości).
Przykład algorytmu iteracyjnego - algorytm obliczania silni wg. schematu: n!=1*2*...*(n-1)*n
Algorytm rekurencyjny jest to algorytm który wywołuje sam siebie. Najłatwiej zrozumieć
mechanizm działania rekursji na przykładzie silni: rekurencyjny wzór na obliczenie n! zapisuje się
w ten sposób: n!=n*(n-1)!
Sposób obliczenia 4! wygląda więc następująco: 4!=4*3!=4*3*2!=4*3*2*1!=4*3*2*1*0!
=4*3*2*1*1=24
Przykład obliczenie silni wg schematu: silnia(0)=1 a silnia(n)=n*silnia(n-1)
Najważniejsze techniki implementacji algorytmów komputerowych.
• proceduralność – algorytm dzielimy na szereg podstawowych procedur, wiele algorytmów
współdzieli wspólne biblioteki standardowych procedur, z których są one wywoływane w
razie potrzeby,
• praca sekwencyjna – wykonywanie kolejnych procedur algorytmu, według kolejności ich
wywołań, na raz pracuje tylko jedna procedura,
• praca wielowątkowa – procedury wykonywane są sekwencyjnie, lecz kolejność ich
wykonania jest trudna do przewidzenia dla programisty
• praca równoległa – wiele procedur wykonywanych jest w tym samym czasie, wymieniają
się one danymi,
• rekurencja – procedura lub funkcja wywołuje sama siebie, aż do uzyskania wyniku lub
błędu,
• obiektowość – procedury i dane łączymy w pewne klasy reprezentujące najważniejsze
elementy algorytmu oraz stan wewnętrzny wykonującego je urządzenia,
• algorytm probabilistyczny – algorytm działa poprawnie z bardzo wysokim
prawdopodobieństwem, ale wynik nie jest pewny,
•

Podobne dokumenty