Spis treści TI/ Jak to działa: algorytm → kod źródłowy → program

Transkrypt

Spis treści TI/ Jak to działa: algorytm → kod źródłowy → program
Spis treści
1 TI/ Jak to działa: algorytm → kod źródłowy → program wykonywalny
1.1 Przykład: kod źródłowy programu obliczającego silnię w języku C
1.2 Przykład: kod źródłowy programu obliczającego silnię w języku C++
1.3 Przykład: kod źródłowy programu obliczającego silnię w języku Java
TI/ Jak to działa: algorytm → kod źródłowy → program
wykonywalny
Pisząc program komputerowy, chcemy stworzyć coś, co będzie zrozumiałe dla komputera, i będzie
pewnego rodzaju instrukcją, opisem tego, co komputer ma wykonywać, często zawierającą w sobie
wiele różnorodnych i skomplikowanych funkcjonalności. Programem komputerowym jest np.
przeglądarka internetowa, edytor tekstów, odtwarzacz multimediów, czy też prosta aplikacja
kalkulatora.
Aby się dowiedzieć jak w ogóle możemy powiedzieć komputerowi co ma zrobić, powiedzmy sobie w
jaki sposób możemy wpływać na to co komputer robi.
Zatem w jaki sposób opisać komputerowi taki skomplikowany zbiór funkcjonalności jakie dostarcza
np przeglądarka internetowa, skoro maszyna rozumie bezpośrednio jedynie bardzo ograniczony
zbiór prostych instrukcji procesora? Pisanie wszystkiego za pomocą prostych instrukcji procesora
trwałoby jakoś nieskończenie długo. Z pomocą przychodzi nam cała hierarchia różnorodnych
języków programowania, z których jedne potrafią "parsować", inne, analizując słowo po słowie treść
programów w nich zapisanych i sprowadzając z postaci bardziej intuicyjnej dla człowieka do postaci
zrozumiałej dla maszyny.
Człowiek pisze program komputerowy zgodnie z jakimś językiem programowania. Tworzy w ten
sposób kod źródłowy. Chcąc by komputer go wykonał, ma dwa wyjścia:
skompilować go do kodu maszynowego, zrozumiałego dla komputera, czyli użyć programu,
zwanego kompilatorem (tego konkretnego języka, w którym Człowiek napisał program), który
potrafi wczytać kod źródłowy i zgodnie z gramatyką danego języka programowania
przetworzyć na kod maszynowy, który będzie naszym "programem wykonywalnym". Wtedy
żeby używać programu, nie potrzebujemu już więcej, po skompilowaniu, jego kodu żródłowego.
Wystarczy nam postać "wykonywalna". Mówimy wtedy o językach programowania
kompilowanych.
użyć do wykonania napisanego przez siebie kodu "interpretera". Mówimy wtedy o językach
interpretowanych. Tym co uruchamiamy jest za każdym razem stworzony przez nas kod
źródłowy, ale żeby komputer mógł go zrozumieć, używamy interpretera danego języka —
programu, który analizuje kod źródłowy i od razu go wykonuje. Takie rozwiązanie jest
wolniejsze i pochłaniające więcej zasobów, niż uruchamianie wcześniej stworzonego kodu
maszynowego, jednak do pewnych zastosowań języki interpretowane, zwane też skryptowymi
są bardizej wskazane niż kompilowane. Szczególnie gdy kod źródłowy jest często zmieniany i
wykonywany w innej formi — nie ma sensu za każdym razem go przekompilowywać, i
uruchamiać kodu maszynowego. Tak jest np. w przypadku pythona którego się uczycie na
ćwiczeniach. Języki skryptowe przydają sie więc np do zastosowań naukowo-badawczych.
Teraz przyjrzyjmy się, co właściwie piszemy w takim kodzie źródłowym. Najczęściej jest to ciąg
instrukcji, opisującym bardzo dokładnie jakiś algorytm — schemat postępowania. Na przykład
algorytm otwierania drzwi mógłby wyglądać tak:
naciśnij klamkę
jeśli drzwi się otworzą
udało się - koniec.
w przeciwnym razie
włóż do zamka klucz, przekręć w lewo i naciśnij klamkę
jeśli drzwi się otworzą
udało się - koniec.
w przeciwnym razie
nie udało się - koniec.
Program komputerowy to zapis algorytmu w języku zrozumiałym dla komputera. Ten język składa
się niestety z samych zer i jedynek (wyjaśnienie w następnym rozdziale) i nie jest dla ludzi wygodny
w użyciu. Dlatego do pisania programów komputerowych stworzono języki programowania (Ada, C,
Pascal, Fortran, Logo, Basic... Python :-) ).
Tekst programu (czyli kod źródłowy) podlega ścisłej gramatyce i ortografii danego języka — zamiana
jednej litery zwykle spowoduje, że program nie będzie działał. To znaczy zwykle nawet nie da się go
skompilować.
Przykład: kod źródłowy programu obliczającego silnię w języku C
#include <stdio.h>
int main()
{
long int wynik=1, liczba=1;
while (liczba < 5) {
liczba = liczba+1;
wynik = wynik*liczba;
}
printf("5! = %ld\n", wynik);
return ;
}
Przykład: kod źródłowy programu obliczającego silnię w języku C++
#include <iostream>
using namespace std;
int main()
{
long liczba=1, wynik=1;
while (liczba < 5) {
liczba = liczba + 1;
wynik = wynik*liczba;
}
cout << "5! = "<< wynik << endl
<<"obliczone programem w C++ :-)" << endl;
}
Przykład: kod źródłowy programu obliczającego silnię w języku Java
class Silnia {
public static void main(String[] args) {
int wynik=1, liczba=1;
while(liczba<5){
liczba=liczba+1;
wynik=wynik*liczba;
}
System.out.println(wynik);
}
}
Kompilacja to zamiana kodu źródłowego na binarny (tj. zera i jedynki), wykonywalny przez
komputer. Dokonuje tego program komputerowy zwany kompilatorem. Jeśli "nie zrozumie" jakiegoś
słowa w kodzie źródłowym, bo np. end zamieniliśmy na edn, to po prostu odmówi kompilacji.
Niestety zdarzają się również błędy, które przechodzą przez proces kompilacji, ale powodują, że
skompilowany program nie działa dokładnie według intencji autora. Takie błędy bywają trudne do
wyśledzenia, szczególnie, gdy ujawniają się tylko np. w rzadko używanych funkcjach i w
specyficznych sytuacjach. Mówi się o nich bugs (insekty, robaki). Nazwa pochodzi z czasów
pierwszych komputerów, budowanych na lampach i zajmujących ogromne pomieszczenia. Ich
programowanie polegało na przełączaniu kabelków, a zwarcia (czyli błędy) powodowały czasem
ginące wśród nich ćmy.
Nawet dziś fachowcy uważają, że nie ma większych programów całkowicie wolnych od błędów.
Testowanie programów (czyli wykrywanie błędów) jest co najmniej tak samo kosztowne i
pracochłonne jak ich pisanie. Stąd pojawiające się często darmowe "wersje beta", czyli programy nie
przetestowane do końca — ich udostępnianie wiązane jest z nadzieją, że resztę błędów znajdą
użytkownicy.
Coraz większego znaczenia nabiera idea "otwartych źródeł", według której każdy użytkownik
powinien mieć prawo wglądu w kod źródłowy programu, którego używa, a nawet jego modyfikacji,
czyli dostosowania do własnych potrzeb. Jednak w przypadku komercyjnych programów i systemów
operacyjnych kod źródłowy bywa wciąż pilnie strzeżoną tajemnicą producenta, a użytkownik dostaje
wyłącznie programy wykonywalne (czyli zera i jedynki).

Podobne dokumenty