materiał1 - Paweł Mazurek
Transkrypt
materiał1 - Paweł Mazurek
Informatyka Studia niestacjonarne EINS 2 dr inż. Paweł A. Mazurek „…Programowanie nie istnieje samo dla siebie: aby w ogóle miało ono sens, musi służyć konkretnemu celowi…” Informacje organizacyjne Forma zajęć wykład – 2h na zjazd laboratorium – 2h na zjazd Informacje strony: http://mazurek.pollub.pl email: [email protected] 3 zakres tematyczny wykładów 1. 2. 3. 4. 5. 6. 7. 8. wstęp (podstawowe pojęcia związane z programowaniem, przegląd języków programowania, ogólne zasady programowania zorientowanego obiektowo) algorytmika - sieć działań (schematy blokowe) historia języka Pascal i ogólna charakterystyka pakietu Delphi posługiwanie się zintegrowanym systemem programowania, przegląd konstrukcji języka Delphi Pascal (program, moduł , biblioteka, funkcje i procedury, klasy i obiekty, typy danych, zmienne, instrukcje) struktura programu i modułu, podstawowe elementy języka (symbole podstawowe, słowa kluczowe i dyrektywy języka, identyfikatory, liczby, łańcuchy, literały logiczne, komentarze i separatory) typy danych i ich opis (definiowanie typów, typy proste, łańcuchowe, strukturalne, opisujące obiekty, wskaźnikowe, zgodność typów) zmienne (deklaracje zmiennych, zmienne indeksowane, rekordowe, obiektowe, dynamiczne, nakładanie zmiennych) 4 zakres tematyczny wykładów 9. 10. 11. 12. 13. 14. 15. 16. wyrażenia (rodzaje operatorów i ich priorytet, składnia wyrażenia, wyrażenia stałe) instrukcje (proste, strukturalne, asemblerowa) funkcje i procedury (definicje funkcji i procedur, rodzaje parametrów, przeciążanie funkcji i procedur, wywoływanie funkcji i procedur) przetwarzanie obiektów (konstruktory i destruktory, metody statyczne, wirtualne, dynamiczne i abstrakcyjne, obsługa wiadomości, własności) biblioteki łączone dynamicznie (tworzenie bibliotek, statyczne i dynamiczne pobieranie funkcji i procedur) przetwarzanie plików przygotowanie systemów pomocy dla programów okienkowych przygotowanie wersji dystrybucyjnej programu 5 Literatura Andrzej Marciniak, Borland Delphi 5 Professional – Object Pascal, Wydawnictwo NAKOM, Poznań Dokumentacja pakietu Borland Delphi 7 (6, 5) Professional (Language Guide, Developer’s Guide) System pomocy pakietu Borland Delphi 7 (6, 5) Professional Xavier Pacheco, Steve Teixeira, Delphi 7 (6, 5) - Vademecum profesjonalisty , tom 1, Wydawnictwo HELION, Gliwice 6 Wstęp do programowania Czym jest programowanie? Programowanie to formułowanie ciągu operacji rozwiązującego dany problem w postaci akceptowalnej przez komputer. inaczej: Proces tworzenia programu (systemu) komputerowego, na który składają się: • opracowanie założeń • kodowanie • testowanie Dobre programowanie łączy elementy inżynierii, „rzemiosła” i „sztuki”. Programowanie - projektowanie, pisanie, modyfikowanie i testowanie programów. (IBM Dictionary of Computing) 8 9 Podstawowe pojęcia • Algorytm • Język programowania • Program • Kod źródłowy i wynikowy • Kompilacja • Programowanie strukturalne i obiektowe • Środowisko programistyczne 10 Algorytm Algorytm to dokładny, jednoznacznie sformułowany sposób postępowania, umożliwiający rozwiązanie określonego zadania w skończonej liczbie kroków. (zbiór poleceń ze wskazaniem porządku, w jakim mają być realizowane). Słowo algorytm pochodzi od przydomka matematyka arabskiego (IX w.) AlChwarizmi (Algorismus, Algorithmus). Zapis algorytmu: • w postaci opisu słownego • w postaci pseudokodu • w postaci schematu blokowego. Algorytm - uporządkowany zbiór reguł rozwiązania zadania w skończonej liczbie kroków. (IBM Dictionary of Computing) Program - algorytm zapisany w języku programowania. 11 Algorytm Programista musi znać sposób rozwiązania problemu, który stanowi przedmiot programu. Ten sposób określa algorytm. Algorytm określa dane oraz skończony ciąg operacji, jakie należy na tych danych wykonać, aby rozwiązać dowolny problem z określonej klasy. Inaczej mówiąc, algorytm określa dane oraz plan akcji, jakie należy wykonać, aby osiągnąć założony cel. 12 cechy algorytmu Kompletność • algorytm uwzględnia wszystkie możliwe przypadki które mogą wystąpić w trakcie realizacji algorytmu • algorytm przewiduje wystąpienia błędów (numerycznych, logicznych, itd.) oraz posiada system reakcji (komunikaty o błędach, odpowiednie zakończenie działania skończoność • algorytm zapewnia osiągnięcie rozwiązania w skończonej liczbie kroków (czyli w skończonym czasie) • dokładna liczba kroków nie jest znana a priori • algorytm posiada warunek zakończenia jednoznaczność • dla tych samych danych wejściowych algorytm musi dawać zawsze te same wyniki • algorytm jest niezależny od momentu jego uruchomienia, wpływu 13 innych programów, sprzętu, kodowania znaków, itp. z czego składa się algorytm ? dane obiekty podlegające przekształceniu podczas działania wynik ostateczny rezultat działania algorytmu instrukcje opis sekwencji czynności które muszą zostać wykonane w ściśle określonej kolejności 14 Algorytm ma być.. 1. Poprawny — dla każdego poprawnego zestawu informacji wejściowych prowadzić do poprawnych rezultatów. 2. Jednoznaczny — każdorazowo, dla każdego poprawnego zestawu informacji wejściowych, prowadzić do tych samych rezultatów. 3. Szczegółowy — aby ktoś albo coś wykonujący algorytm rozumiał dokładnie opisane operacje i potrafił je wykonać. 4. Uniwersalny — pozwalał na rozwiązanie dowolnego problem z określonej klasy, a nie dotyczył pewnych przypadków. 15 Metody zapisu algorytmów 1. Język naturalny (potoczny) określający ciąg kroków algorytmu. 2. Notacje graficzne, blokowe. najpopularniejsze są schematy 3. Pseudokod — połączenie języka naturalnego i notacji matematycznej z elementami języków programowania. 4. Zapis w postaci kodu programu w pewnym języku programowania. 16 Schemat (diagram) blokowy SCHEMAT BLOKOWY (ang. flowchart, block diagram, block scheme, flow diagram) Sieć działań, czyli graficzna reprezentacja procedury lub programu sporządzana w celach poglądowych lub jako przedstawienie algorytmu do zapisania w języku programowania. Ogólny plan budowy układu elektronicznego sporządzonych za pomocą umownych symboli z zaznaczeniem połączeń i kierunków przepływu informacji. 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). (PN-75/E-01226) 17 Symbole stosowane w diagramach działań programów Wprowadzanie, wyprowadzanie wprowadzanie lub (i) wyprowadzanie danych Przetwarzanie operacja lub grupa operacji, w wyniku których ulega zmianie wartość, postać lub miejsce zapisu danych Skrzynka warunkowa sprawdzanie Decyzja operacja określająca warunku, np. czy N>0, mają kształt wybór jednej rombu. Ze skrzynki wychodzą tylko z alternatywnych dwa połączenia: jedno oznaczone dróg działania TAK, a drugie NIE. 18 Symbole stosowane w diagramach działań programów Łącznik stronicowy wejście lub wyjście z wyodrębnionych fragmentów schematu znajdujących się na jednej stronie Łącznik międzystronicowy wejście lub wyjście z wyodrębnionych fragmentów schematu znajdujących się na różnych stronach 19 Symbole stosowane w diagramach działań programów Przygotowanie modyfikacja instrukcji lub grupy instrukcji powodująca zmianę w przebiegu procesu przetwarzania Droga przepływu danych więź operacyjna między poszczególnymi operacjami procesu przetwarzania Droga przepływu danych o wskazanym kierunku 20 Schemat blokowy tworzony jest według następujących reguł: 1. Schemat blokowy składa się z bloków połączonych zorientowanymi liniami; 2. Bloki obrazują ciąg operacji; powinien być start i koniec; 3. Zawsze wykonywane są albo wszystkie instrukcje w bloku albo żadna; 4. Dalsze operacje nie zależą od poprzednich wariantów, chyba że zależności te zostały przekazane za pomocą danych; 5. Kolejność wykonania operacji jest ściśle określona przez zorientowane linie łączące poszczególne bloki; 6. Do każdego bloku może prowadzić co najwyżej jedna linia; 7. Linie mogą się łączyć ale nie mogą się rozdzielać (bez bloku decyzyjnego). 21 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 wychodzć 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). 22 operacja wyboru na schemacie blokowym operacje wyboru jednej z alternatywnych dróg działania realizujemy za pomocą skrzynki warunkowej wewnątrz skrzynki warunkowej umieszczamy warunek logiczny operatory: = <> < > <= >= OR AND 23 instrukcja warunkowa jeśli spełniony jest warunek W to realizowane są instrukcje A, w przeciwnym wypadku realizowane są instrukcje B 24 instrukcja pętli "dopóki" dopóki spełniony jest warunek W to instrukcje są powtarzane 25 instrukcja warunkowa instrukcje są realizowane jeśli spełniony jest warunek W 26 instrukcja pętli „powtarzaj aż” instrukcje są powtarzane aż do spełnienia jest Warunek W 27 instrukcja pętli „powtarzaj n raz” zainicjalizuj zmienną za pomocą wartości powtarzaj określoną liczbę razy - jeśli zmienna jest poniżej warunku zmiennej kontrolnej, to wejdź do pętli - jeśli warunek jest fałszywy, to następuje koniec przetwarzania 28 klasyfikacja algorytmów algorytmy proste i rozgałęzione algorytmy cykliczne i mieszane algorytmy sekwencyjne i równoległe/współbieżne algorytmy numeryczne i nienumeryczne algorytmy rekurencyjne i iteracyjne iteracja: wielokrotne wywołanie sekwencji poleceń aż do spełnienia warunku sterującego rekurencja: wywołanie procedury z wewnątrz tej samej procedury 29 30 31 32 33 Przykładowe diagramy 34 Przykładowe diagramy 35 Soft do diagramów Do realizacji diagramów graficznych można wykorzystać wiele programów, w tym nawet proste programy graficzne. Na laboratorium wykorzystywany będzie darmowy program Diagram Designer. Aktualną wersje programu można ściągnąć ze strony projektu: http://meesoft.logicnet.dk/ 36 Język programowania Język programowania to zbiór: • zasad (tzw. składnia języka) • instrukcji • operatorów • ….. dzięki którym powstaje program komputerowy (a ściślej: kod źródłowy programu). Język programowania - język formalny (sztuczny) służący do zapisu programów komputerowych. (IBM Dictionary of Computing) 37 Programowanie strukturalne, które zrewolucjonizowało tworzenie oprogramowania, opiera się na bardzo prostej zasadzie: dziel i rządź. Duży problem rozbija się na kilka mniejszych. Te rozbija się na jeszcze mniejsze. I tak dalej. Zaletą programowania strukturalnego jest możliwość tworzenia programu zespołowo: każdy konkretny programista dostaje pewną część zadania do rozwiązania. Standardowy język Pascal nie wspiera jednak programowania obiektowego. Istnieją różne dialekty, w tym obiektowo zorientowane, ale są one nieprzenośne. W praktyce oznacza to, że np. ucząc się Delphi, wiążemy się z jedną firmą i jednym typem komputera. Tym samym jest prawdopodobne, że napisany przez nas program nie będzie poprawnie pracował po kilkunastu latach czy też na innej platformie. Język Pascal ogranicza inwencję programisty i brak w nim standaryzacji procesu łączenia z bibliotekami. Piszącemu program wolno tylko to, co kompilator uzna za bezpieczne. W praktyce "zwykły" Pascal jest zbyt krępujący. Brak możliwości dołączania bibliotek uniemożliwia korzystanie z gotowych procedur, o ile nie są one dostępne w formie tekstu źródłowego. Konkurencyjnym w stosunku do Pascala językiem programowania był język C. Jest to język bardzo prosty w konstrukcji, niezbyt łatwy w użyciu, niezbyt teoretycznie konsekwentny w składni, lecz bardzo praktyczny. Obecnie jest jednak już nieco przestarzały. 38 Język C ewoluował w język C++, nazywany językiem programowania lat dziewięćdziesiątych. Język C++ jest językiem służącym do programowania obiektowego. Co ciekawe, rozbudowane C++ jest językiem znacznie łatwiejszym w użyciu niż "czyste" C i pozwala łatwo, po jedynie drobnych i automatycznych modyfikacjach, adaptować kod źródłowy pierwotnie napisany w Fortranie, Algolu czy Pascalu. Naturalne jest więc przechodzenie w ośrodkach naukowych zajmujących się fizyką z języka Fortran na C++ jako na de facto język standardowy, jak to np. ma miejsce w CERN. Pewnym zagrożeniem dla języka C++ może być, podobny do niego, język Java. Przewaga Javy nad C++ leży w lepszym podejściu do programowania współbieżnego. Java powstała niedawno, nic więc dziwnego, że udało się jej autorom stworzyć język XXI wieku. Jedynym problemem, jaki jest związany z językiem Java, jest polityka licencyjna firmy Sun, będącej formalnie właścicielem tego języka cokolwiek by to mogło oznaczać. 39 Język programowania to inaczej język opisu algorytmów przeznaczonych do wykonywania na komputerze. Językiem programowania nazywa się maszynowo-ukierunkowanym (język niskiego poziomu), gdy odzwierciedla listę rozkazów komputera ( asembler), a maszynowo-niezależnym ( język wysokiego poziomu), gdy nie jest związany z określonym typem komputera (komputer wymaga wyposażenia go w translator określonego językiem programowania). Ze względu na sposób przedstawienia algorytmu obliczeniowego rozróżnia się: język programowania imperatywnego, funkcyjnego i język programowania w logice. Gdy język programowania pozwala na tworzenie pewnych jednostek (zw. obiektami), wiązanie ich w różne struktury oraz dokonywanie na nich innych, specyficznych dla danego języka, operacji - to mówi się o języku programowania obiektowego (np. C++). Obiektami mogą być ciągi instrukcji (zw. wtedy współprogramami), grupy danych, struktury graficzne wyświetlane na monitorze (np. okienka) i inne. 40 Dlaczego powstały języki programowania? 41 Języki programowania – pojęcia podstawowe Język ogólna nazwa zdefiniowanego zbioru znaków i symboli oraz reguł określających sposoby i kolejność ich użycia. Język, który jest stosowany do przetwarzania algorytmów nosi nazwę języka algorytmicznego, a przy zastosowaniu go do celów programowania określony jest jako język programowania. Ponieważ komputer posługuje się językiem binarnym, tzn. rozróżnia stany 0:1 - program w języku programowania należy przetworzyć tak, aby był zrozumiały dla maszyny – zadaniem tym zajmują się translatory. Języki programowania – pojęcia podstawowe Język programowania zbiór zasad składni, instrukcji, dzięki którym powstaje kod źródłowy programu. Procesor jest w stanie wykonywać program w kodzie maszynowym. Jednakże tworzenie programów w tym języku jest praktycznie niemożliwe. Dlatego programista używa języka zrozumiałego dla człowieka, który następnie jest kompilowany bądź interpretowany do postaci maszynowej. Istnieje wiele rodzajów języków programowania. Można je podzielić na języki strukturalne i obiektowe. Innym kryterium podziału jest zastosowanie języków (innych używa się do tworzenia programów multimedialnych, a innych do obliczeń numerycznych czy np. aplikacji sieciowych). Niektóre z języków są bardziej uniwersalne niż inne. Języki programowania – pojęcia podstawowe Implementacja zestaw narzędzi pośredniczący w tłumaczeniu kodu zapisanego w danym języku na kod maszynowy danego procesora. Każdy język programowania ma z reguły kilka implementacji przeznaczonych na różne platformy i robione przez różnych producentów 44 Języki programowania – pojęcia podstawowe Kod (plik) źródłowy program komputerowy w postaci tekstu zawierającego instrukcje języka programowania. Kod źródłowy jest jedynym formatem programu czytelnym dla człowieka. Kod źródłowy jest przetwarzany na kod maszynowy przez program zwany translatorem. Kod (plik) obiektowy przetłumaczona na język niskiego poziomu (asembler) wersja kodu źródłowego. 45 Języki programowania – pojęcia podstawowe Translator służy do wykonania kompilacji lub interpretacji kodu źródłowego (automatycznego tłumaczenia kodu źródłowego na język maszynowy). Standardowym katalogiem, w których umieszcza się pliki translatora jest katalog BIN w głównym katalogu aplikacji. Aby proces translacji był możliwy, system operacyjny musi znać dokładne położenie translatora i jego bibliotek. W tym celu należy dokonać odpowiedniego wpisu w pliku wsadowym autoexec.bat (czasami wpis tworzony jest automatycznie podczas instalacji). Rozróżnia się dwa rodzaje translatorów: kompilatory i interpretery. 46 Języki programowania – pojęcia podstawowe Kompilator program jednorazowo tłumaczący cały kod źródłowy na język maszynowy i zapisujący go do pliku wynikowego. Kolejne uruchomienia programu (pliku wynikowego) nie wymagają powtórzenia etapu kompilacji – oznacza to, że kompilator nie jest potrzebny do uruchamiania programu. Typowymi przykładami języków kompilowanych są: C, C++, Pascal, Fortran; 47 Języki programowania – pojęcia podstawowe Interpreter program tłumaczący i wykonujący kod źródłowy linia po linii. W tym przypadku nie ma pliku wynikowego, a każde uruchomienie wymaga ponownego przeprowadzenia etapu interpretacji – interpreter jest więc niezbędny do uruchomienia i wykonania programu. Typowymi przykładami języków interpretowanych są: Python, MatLab, GNU Plot, HTML, BPL; 48 Języki programowania – pojęcia podstawowe Biblioteka statyczna rodzaj biblioteki, która łączona jest z programem w etapie konsolidacji. W systemach z rodziny Windows zwykło nadawać się im rozszerzenia .lib lub .o, natomiast w systemach z rodziny Unix są to zwykle .a lub .o. Biblioteki statyczne, w przeciwieństwie do bibliotek dynamicznych, nie wymagają pomocy systemu operacyjnego komputera – po połączeniu z danym programem są od razu gotowe do użycia. Biblioteka dynamiczna rodzaj biblioteki, która łączona jest z programem dopiero w momencie jego wykonania. Aby tego dokonać system operacyjny komputera musi posiadać pewne funkcje, które umożliwiają łączenie dynamiczne. W systemach Windows biblioteki dynamiczne mają zazwyczaj rozszerzenie .dll 49 Języki programowania – pojęcia podstawowe Edytor kodu służy do pisania tekstu kodu źródłowego. Edytory mogą być uniwersalne (np. ConText, Amigo, Crimson, Codex, EditPlus, UltraEdit, Editeur, …) lub też zintegrowane z konkretną implementacją języka (np. Borland Delphi, Compaq Visual Fortran …). Edytory uniwersalne pozwalają na podłączanie kompilatorów jednego lub wielu języków i są rozprowadzane jako oddzielne programy. Podłączenie konkretnego kompilatora odbywa się poprzez odpowiednią definicję opcji programu. Zaletą edytorów jest to, że poprawiają znacznie przejrzystość i wygodę tworzenia kodu, a także „pomagają” pisać kod źródłowy programu wyróżniając, zazwyczaj kolorem lub wytłuszczoną czcionką, słowa kluczowe danego języka – łatwo wówczas zauważyć błąd już na etapie jego popełniania. 50 Języki programowania – pojęcia podstawowe Debugger (analizator kodu) służy do analizy poprawności tworzonego kodu źródłowego i stanowi zazwyczaj integralną część translatora (może być to również oddzielny program). Podczas analizy kodu źródłowego generowane są informacje o błędach – czasami wymaga to podania dodatkowych opcji kompilacji – na bieżąco (analizator zatrzymuje się w miejscu wykrycia błędu) lub też w postaci końcowego raportu. Oprócz sygnałów o błędach, analizatory podają również tzw. ostrzeżenia, tzn. informacje o znalezieniu niejasności w kodzie lub o wykryciu miejsca potencjalnie niebezpiecznego. Typowym ostrzeżeniem jest wiadomość o wykryciu deklaracji zmiennej, która nie została nigdzie w kodzie wykorzystana. 51 Języki programowania – pojęcia podstawowe Edytor formularzy służy do budowy okien widzianych przez użytkownika po uruchomieniu programu (formularzy). Element ten występuje jedynie w językach wizualnych, takich jak Visual Basic, Delphi, Compaq Visual Fortan i innych. W różnych implementacjach języków, edytor formularzy może być dostępny bezpośrednio po uruchomieniu programu lub też po wybraniu odpowiedniej opcji z menu. Zaletą stosowania tego narzędzia jest łatwość tworzenia dowolnie skomplikowanych okien i określania ich właściwości. Nie traci się wówczas czasu na pisanie elementów kodu, odpowiedzialnych za tworzenie się formularzy i ich elementów, a programista skupia się jedynie na realizacji założonego algorytmu. Brak edytora formularzy nie przesądza o tym, że nie można tworzyć standardowych, „okienkowych” aplikacji – wygląd definiowany jest wówczas przez programistę w kodzie źródłowym. 52 Języki programowania – pojęcia podstawowe Menadżer projektu służy do zarządzania modułami i plikami projektu. Rzadko bowiem tak się zdarza, że cały kod źródłowy zawarty jest w jednym pliku – przeważnie jest ich wiele i zawierają nie tylko poszczególne moduły kodu, ale również biblioteki, różne pliki wsadowe, grafikę i pliki multimedialne. Zazwyczaj istnieje główny plik projektu zawierający wszystkie potrzebne do kompilacji informacje. Z pomocą menadżera łatwo można modyfikować zawartość i strukturę projektu. Narzędzia dodatkowe służą do tworzenia systemu pomocy, ikon i kursorów, programów instalacyjnych. Ilość narzędzi i poziom ich zaawansowania zależy od implementacji języka. 53 Języki programowania – pojęcia podstawowe System pomocy służy do uzyskiwania informacji o środowisku programistycznym, zasadach jego użytkowania, elementach języka (wraz z przykładami), rodzaju licencji, autorach i kontaktach. Zależnie od implementacji języka oraz jego rodzaju pomoc może być mniej lub bardziej rozwinięta. Dobrze zorganizowanie, obszerne systemy pomocy zawierają często kompendium wiedzy na temat danego języka programowania. 54 Języki programowania – pojęcia podstawowe Etapy kompilacji Etap preprocesingu – obejmuje on odczyt i analizę kodu źródłowego na podstawie reguł danego języka. W tym etapie dokonywana jest: • analiza leksykalna – rozdzielenie kodu źródłowego na elementarne jednostki języka programowania zwane tokenami; • analiza składniowa – kontrola, czy ułożenie tokenów nie łamie reguł danego języka programowania (czy kod źródłowy był poprawny składniowo); • analiza semantyczna – określenie znaczenia poszczególnych tokenów. Przykładem może być sprawdzanie, czy nie występuje niezgodność typów. Etap kompilacji – służy do przetłumaczenia kodu źródłowego na kod obiektowy. W przypadku jednoczesnej kompilacji wielu plików źródłowych, każdy z nich przetworzony jest na oddzielny kod obiektowy. Na tym etapie nie są analizowane zależności pomiędzy poszczególnymi segmentami programu; Etap konsolidacji – służy do połączenia wszystkich plików obiektowych oraz dodatkowych bibliotek statycznych w jeden kod wynikowy. Na tym etapie sprawdzane są zależności pomiędzy poszczególnymi segmentami programu. Dodanie biblioteki statycznej wymaga podania odpowiednich opcji kompilacji. Po konsolidacji program jest gotowy do uruchomienia. 55