Podstawy programowania

Podobne dokumenty
Podstawy programowania

Podstawy programowania

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Język ludzki kod maszynowy

Programowanie obiektowe

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Zmienne, stałe i operatory

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Języki i metodyka programowania. Wprowadzenie do języka C

1 Podstawy c++ w pigułce.

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Język programowania PASCAL

Języki programowania zasady ich tworzenia

Podstawy programowania skrót z wykładów:

Wykład 8: klasy cz. 4

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Czym jest Java? Rozumiana jako środowisko do uruchamiania programów Platforma software owa

Język C zajęcia nr 11. Funkcje

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Podstawy programowania. Wprowadzenie

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Wstęp do programowania

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wykład 1

Wykład 9: Polimorfizm i klasy wirtualne

Java jako język programowania

ZASADY PROGRAMOWANIA KOMPUTERÓW

Języki i paradygmaty programowania doc. dr inż. Tadeusz Jeleniewski

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

( wykł. dr Marek Piasecki )

Programowanie komputerów

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Wstęp do programowania. Wykład 1

Proste algorytmy w języku C

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

2 Przygotował: mgr inż. Maciej Lasota

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

1 Podstawy c++ w pigułce.

Typy danych, zmienne i tablice. Tomasz Borzyszkowski

Programowanie Komputerów

Język C część 1. Sformułuj problem Zanalizuj go znajdź metodę rozwiązania (pomocny może byd algorytm) Napisz program Uruchom i przetestuj czy działa

Java EE produkcja oprogramowania

Programowanie w języku C++ Grażyna Koba

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

KONSTRUKCJA KOMPILATORÓW

Programowanie RAD Delphi

Programowanie w języku Python. Grażyna Koba

Programowanie obiektowe zastosowanie języka Java SE

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Programowanie strukturalne język C - wprowadzenie

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Wykład 5: Klasy cz. 3

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Język programowania. Andrzej Bobyk

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Programowanie współbieżne i rozproszone

Podstawy programowania w języku C

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Języki i paradygmaty programowania - 1

Programowanie w C. dr inż. Stanisław Wszelak

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Podstawy Programowania 2

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Lab 9 Podstawy Programowania

Struktury, unie, formatowanie, wskaźniki

Algorytm. a programowanie -

Podstawy programowania - 1

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Algorytmika i Programowanie VBA 1 - podstawy

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Transkrypt:

Podstawy programowania Pojęcia bazowe 1. Programowanie Pod terminem "programowanie" będziemy rozumieć napisanie tekstu programu w specjalnym języku, tzw. języku programowania. Piszemy tekst programu w języku programowania w tym celu, aby specjalny program - kompilator przeczytał tekst i przekształcił go do postaci kodu komputerowego, a ten jest wykonywany przez procesor komputera. Napisanie programu bezpośrednio w kodzie komputerowym jest pracą żmudną i czasochłonną. 2. Algorytm Algorytmem nazywamy ciąg czynności do rozwiązywania określonego zadania. Czynności muszą być wykonywane kolejno; nie rozpoczynamy nowej czynności dopóty, dopóki nie jest zakończona poprzednia. Czynności algorytmu nazywamy operacjami. Złożoność każdej operacji nie ma znaczenia, ale w momencie wykonywania algorytmu każda z operacji powinna mieć jasną treść. Operacja może być algorytmem. Operacje algorytmu rozpoczynamy wykonywać na danych wejściowych, w końcu działania algorytmu otrzymujemy dane wyjściowe, każda operacja algorytmu może produkować dane pośrednie. W przypadku wielokrotnego korzystania z algorytmu dla różnych danych wejściowych i wielokrotnego produkowania odpowiednich danych wyjściowych mówimy o wejściowym i wyjściowym strumieniach danych. Opis algorytmu musi zawierać opis klasy (typu) danych wejściowych i wyjściowych. Każdy algorytm można stosować tylko do swojej klasy danych. Możliwe jest stosowanie, jako operacji tego samego algorytmu, do którego należy operacja. W takim przypadku mówimy o algorytmie rekurencyjnym. 3. Formy zapisu algorytmu Na zapisywanie algorytmu istnieje wiele sposobów, do których należą formy tekstowe w języku zwyczajnym lub specjalnym, formy graficzne, wyrażenia matematyczne. Dla przykładu opiszemy w formie tekstowej algorytm obliczenia największego wspólnego podzielnika (NWP) dwóch liczb całkowitych. Szkolny algorytm obliczenia największego wspólnego podzielnika (NWP) dwóch liczb całkowitych polega na rozkładaniu liczb na czynniki pierwsze. Następnie wybieramy czynniki wspólne i mnożymy je 1. Ten algorytm nigdy nie był realizowany w komputerze, ponieważ wymaga dużo więcej czasu niż inne algorytmy do obliczenia NWP. Do obliczenia największego wspólnego podzielnika (NWP) dwóch liczb całkowitych, dwóch wielomianów, jak też wspólnej miary dwóch odcinków, w komputerach stosuje się algorytm Euklidesa. Algorytm Euklidesa 2 dla liczb orzeka następująco: 1 Leitner R., Żakowski W., 1967: Matematyka. Kurs przygotowawczy na wyższe uczelnie techniczne. Warszawa: WNT 2 Encyklopedia Powszechna PWN 1

Krok 1. Weź liczby A i B, oznacz przez M większą, a przez N mniejszą z nich. Krok 2. Oblicz resztę R z dzielenia M na N. Krok 3. Gdy reszta R jest zerem, wówczas N jest szukanym największym wspólnym podzielnikiem i zakończ algorytm. Krok 4. Jeżeli reszta R nie jest równa zeru, wówczas w miejsce M weź N, w miejsce N weź R, po czym kontynuuj obliczanie reszty od kroku 2, tj. z dzielenia nowych wartości M i N, aż któraś z kolei reszta R będzie równa zeru. Należy przyznać, że najlepszą formą zapisu algorytmu jest forma graficzna. Diagramy czynności graficzno-tekstowego języka UML (Unified Modeling Language) w porównaniu ze schematami blokowymi (czynnościowymi) zajmują mniej miejsca. Reguły rysowania diagramów czynności ilustruje rys. 2, gdzie jest pokazany diagram czynności algorytmu Euklidesa do obliczenia największego wspólnego podzielnika dwóch liczb całkowitych. Na diagramie czynności rys. 2 kółko czarne jest początkiem algorytmu, kółko czarne w kółku - końcem algorytmu. Operacje algorytmu są wpisane wewnątrz tzw. stanów akcji. Stan akcji jest narysowany w formie podłużnej tabletki, w której krawędzie dolna i górna są równoległe, a boczne są półkolami. Rys. 2. Diagram czynności algorytmu Euklidesa Rozgałęzienie zaznacza się małym pustym rombem. Warunki rozgałęzienia zapisuje się w nawiasach kwadratowych na liniach przejść rozpoczynających się od rombu. Przykładem zapisu algorytmu w postaci formuły może służyć algorytm obliczenia funkcji wykładniczej n! na bazie wzorca: n! = n ( n 1)! dla n > 1 dla n = 0 lub 1 1, 4. Rodzaje algorytmów Algorytmy można klasyfikować według struktury. Mówimy o algorytmach liniowych, z rozgałęzieniami, z powtórzeniami, rekurencyjnych, współbieżnych. Algorytm liniowy jest prostym ciągiem operacji. W algorytmie z rozgałęzieniem jest zawsze operacja sprawdzania warunku. 2

W algorytmie z powtórzeniem poza operacją sprawdzania warunku ma miejsce przejście na powtórzenie już wykonanej części algorytmu. Przykładem algorytmu z powtórzeniem jest algorytm pokazany na rys. 2.. Jeżeli operacją algorytmu jest ten sam algorytm, to mówimy o algorytmie rekurencyjnym. Realizacja algorytmu rekurencyjnego jest możliwa, ponieważ w przypadku algorytmu rekurencyjnego w pamięci komputera rozmieszczane są kopie kodu komputerowego odpowiadającego algorytmowi. Liczba kopii równa się głębokości rekurencji i może być bardzo duża, ale ograniczona. Jeżeli chcemy opisać ciąg współbieżnych czynności, to mówimy o specjalnym rodzaju algorytmów - algorytmach współbieżnych. Algorytm współbieżny zawiera wykonywane jednocześnie (współbieżnie) algorytmy, które od czasu do czasu współdziałają przez wspólne dane. 5. Operacje algorytmu i operacje komputerowe Algorytm realizowany w komputerze jest ciągiem operacji z zestawu operacji procesora i innych bloków komputera. W procesie przygotowywania algorytmu do realizacji w komputerze pierwotne operacje algorytmu są zamieniane na operacje z zestawu operacji komputera. Algorytm z operacjami komputera, który (algorytm) jest otrzymany w wyniku przekształcenia pierwotnego algorytmu, nazywamy interpretacją algorytmu w komputerze. Program jest interpretacją komputerową algorytmu. Oprócz przekształcenia operacji potrzebna jest interpretacja danych pierwotnych danymi komputerowymi, tj. danymi zachowywanymi w uporządkowanych obszarach pamięci komputera. Algorytm z operacjami procesora jest kodem komputerowym. Zapisywanie algorytmu bezpośrednio w kodzie komputerowym jest pracochłonne i lepiej korzystać z pewnego systemu programowania, który pomaga wyprodukować kod komputerowy. 6. Dane Daną nazywamy istotę, która zachowuje informację. Dane wprowadzane do komputera mogą być liczbami, znakami, wyrazami, rysunkami lub mieć inne postacie. Ilość informacji przechowywanej w danej oceniamy po stopniu zmniejszenia nieokreśloności zajścia możliwego zdarzenia. Jednostką informacji jest bit. Jeden bit, jako jednostka informacji zmniejsza do zera nieokreśloność zajścia jednego z dwóch zdarzeń jednakowego prawdopodobieństwa. Inaczej mówiąc, jeden bit informacji wystarczy do wyboru między dwoma wartościami jednakowo prawdopodobnymi. Konkretna wartość 1 lub 0 jednej dwójkowej cyfry w dwójkowej postaci liczby jest wykazem niewidocznej jednostki informacji (bitu). Z powodu tego dwójkowa cyfra często jest nazywana bitem, co formalnie nie jest poprawne. Bajtem nazywamy 8 cyfr dwójkowych. Jasne, że bajt przechowuje 8 bitów informacji. 7. Typy danych Poprawne i szybkie programowanie nie jest możliwe bez dobrej znajomości programowych typów danych wybranego języka programowania. Programowym typem danych nazywamy fragment tekstu programu, informujący kompilator o właściwościach obiektu programowego. 3

Wyznaczając w programie typ danych pewnego obiektu informujemy kompilator o rozmiarze miejsca wymaganego do umieszczenia obiektu w pamięci oraz o ograniczeniach w operacjach z nim. Nazwa typu danych ma postać słowa kluczowego lub złożonej konstrukcji syntaktycznej języka programowania. Typy danych można podzielić na dwie grupy: - typy podstawowe (inne nazwy: typy standardowe, typy proste, typy zwykłe), - typy pochodne (inne nazwy: typy niestandardowe, typy strukturalne). Typem pochodnym nazywamy typ, który jest złożeniem innych typów. Liczba typów danych w jednym programie jest nieograniczona i nie tylko dla typów pochodnych, lecz również dla typów podstawowych, dlatego że prawie każdy język programowania daje możliwość definiowania przez programistę własnych typów danych. W językach C++, C# (czytaj C szarp lub Cis ) poprzez funkcję sizeof(), a w języku Object Pascal poprzez funkcję SizeOf(), można uzyskać informację o rozmiarze pamięci (liczbę bajtów) przydzielaną przez kompilator do rozmieszczenia danych. Do typów podstawowych zaliczamy typ liczbowy, znakowy, logiczny, okrojony. Za pomocą typów podstawowych można deklarować zmienne, stałe i tablice. W przypadku deklaracji stałych kompilator może sam wybierać odpowiedni typ danych. Do deklarowania typów pochodnych w językach programowania wykorzystuje się specjalne konstrukcje syntaktyczne, z których najważniejszymi są tablice, w tym tablice dynamiczne, oraz struktury, unie, klasy, interfejsy. Projektowanie programów 1. Wytwarzanie programu Aby stworzyć program w języku typu kompilacyjnego należy: 1) napisać tekst w języku programowania według ścisłych reguł, 2) wykonać kompilację tekstu do postaci pliku obiektowego za pomocą programu - kompilatora, 3) konsolidować plik obiektowy lub grupę plików obiektowych do postaci pliku wykonywalnego za pomocą programu - konsolidatora. W graficznych środowiskach BorlandC++ Builder 3, Delphi oraz Microsoft Visual Studio program - kompilator i program - konsolidator mogą być połączone wewnątrz systemu programowania. System programowania może od razu produkować plik wykonywalny z rozszerzeniem exe. Oprócz pliku wykonywalnego system programowania może produkować dodatkowe pliki: plik biblioteki importu z funkcjami programu (plik z rozszerzeniem lib ), plik dla wykrywacza usterek (ang. debugger) z informacją o nazwach i typach zmiennych i funkcji (plik z rozszerzeniem tds ). Żeby stworzyć i wywołać program w języku typu interpretacyjnego należy: 1) napisać tekst w języku programowania według ścisłych reguł, 2) wykonać kompilację tekstu za pomocą programu - kompilatora do postaci pliku interpretacyjnego ("pliku klasowego" w języku Java), 3 Obecnie środowiska RAD C++Builder oraz Delphi przejęła firma Embarcadero Technologies 4

3) interpretować plik interpretacyjny razem z plikami bibliotecznymi za pomocą programu - interpretatora. W pierwszych językach interpretacyjnych (np. w pierwszych BASIC'ach) tekst programu był interpretowany "od razu" linia po linii bez etapu kompilacji (etapu 2). 2. Metody programowania Przy napisaniu programu można korzystać z jednej z trzech metod: metody uściśleń (zstępującej) nazywaną też metodą od ogółu do szczegółu, według której najpierw rozpatrujemy algorytm, jako ciąg wielkich operacji do rozwiązywania zagadnienia i piszemy program, jako ciąg wywołań podprogramów, a późnej piszemy podprogramy odpowiadające każdej z operacji algorytmu, metody wstępującej (rozszerzającej) nazywanej też metodą od szczegółu do ogółu, według której najpierw programujemy niewielkie operacje opisujące małe grupy czynności do rozwiązywania zagadnienia, a późnej dodajemy łączące fragmenty, metody mieszanej (metody kolejnych ulepszeń), według której programujemy na zmianę tak wielkie, jak i niewielkie operacje. Trudno powiedzieć, jaka metoda jest lepsza. 3. Programowanie zorientowane obiektowo W ostatnich latach aktywnie rozwijało się tzw. programowanie zorientowane obiektowo. Programowanie zorientowane obiektowo to napisanie programu z taką strukturą, w której zmienne i funkcje należące do jednego obiektu, koncentrują się w jednym miejscu programu w postaci językowych konstrukcji, zwanych zwykle klasami. Skoncentrowanie zmiennych i funkcji daje możliwość programiście budować obiekty programowe jako odpowiedniki obiektów z przestrzeni przedmiotowej, a to pozwala na lepsze rozumienie współdziałania obiektów programu. Klasy programu opisują strukturę i zachowanie obiektów programu. Obiekt programu jest interpretowany jako egzemplarz klasy. Obiekt, o którym często się mówi w programowaniu zorientowanym obiektowo, jest czymś, co ma określone granice, stan charakteryzujący jego jednoznaczne i widoczne własne zachowanie w formie pewnego ciągu stanów. Programowanie zorientowane obiektowo wywarło wielki wpływ na metodologie procesu projektowania. Pojawiło się projektowanie zorientowane obiektowo jako projektowanie, w którego trakcie jest budowana obiektowa dekompozycja przestrzeni przedmiotowej, a stworzona struktura nie zmienia się w procesie projektowania. Przez projektowanie pewnego systemu technicznego będziemy rozumieć przekształcenie pierwotnego opisu systemu w zadaniu technicznym na jego opis końcowy w postaci dokumentacji technicznej (tj. dokumentacji, na której podstawie można stworzyć system) poprzez opisy pośrednie, wśród których może się znajdować projekt wstępny, projekt szkicowy, projekt techniczny itp. Pośród języków zorientowanych obiektowo najlepsze możliwości opracowania szybkich i złożonych aplikacji ma język C++. Źródłem zalet programowania zorientowanego obiektowo jest zwiększenie strukturalności programu. Korzystanie z klas oraz nierzadko z hierarchii klas, nieuchronnie doprowadzi do zaistnienia w programie strukturalnych komponentów (modułów itp.). Zwiększenie strukturalności pomaga programiście lepiej rozumieć swój program, a to zmniejsza liczbę błędów i skraca czas projektowania. 5

Ważną zaletą programowania zorientowanego obiektowo jest to, że klasy można wykorzystać ponownie w innych projektach, co też wpływa pozytywne na czas projektowania. Autonomiczność klasy doprowadzi do tego, że w przypadku modernizacji programu, aby na przykład zwiększyć szybkość działania, nierzadko można ograniczać się do miejscowej korekty kluczowych metod (podprogramów) klasy i uniknąć ogólnych zmian niebezpiecznych dla projektu. W literaturze o programowaniu zorientowanym obiektowo rzadko pisze się o jego wadach. Programowanie zorientowane obiektowo ma jednak wady i w niektórych przypadkach mogą one wykluczyć zastosowanie programowania zorientowanego obiektowo. Główną wadą programowania zorientowanego obiektowo jest zmniejszenie szybkości programu. Szybkość zmniejsza się z powodu trzech przyczyn: w programie zorientowanym obiektowo występuje więcej wywołań podprogramów niż w równoważnym mu programie bez klas ; w przypadku dziedziczenia klas adres podprogramu może zależeć lokalnie od nazwy klasy. Adres podprogramu znany jest wówczas tylko przy wywołaniu programu, a to pociąga dodatkowe nakłady czasu dla formowania adresu podprogramu; przy programowaniu zorientowanym obiektowo każda klasa zapisuje się z reguły w odrębnym pliku, a typowy konsolidator umieszcza kod odpowiadający każdemu plikowi w odrębnym segmencie pamięci. Wobec czego w przypadku zwykłego stronicowania pamięci komputera przy między klasowych wywołaniach podprogramów potrzebne są dodatkowe nakłady czasu do przełączenia w procesorze rejestru segmentów. Należy zaznaczyć, że języki zorientowane obiektowo mają konstrukcje składniowe zezwalające programować nieobiektowo tj. bez klas. Języki programowania 1. Elementy języka programowania Język programowania jest opisywany dwoma gramatykami: leksykalną (ang. lexical grammar) i syntaktyczną (ang. syntactic grammar). Gramatyka leksykalna(ang. lexical grammar) opisuje jak znaki języka są łączone w elementy leksykalne - leksemy (ang. form tokens). Leksemami są słowa kluczowe, symbole operatorów, separatory, identyfikatory itd. Gramatyka syntaktyczna(ang. syntactic grammar) opisuje jak leksemy (ang. form tokens) mogą być łączone w programach. Leksemy są połączone w kategorie składniowe. Opis języka zawiera nie tylko listy standardowych kategorii składniowych, ale i reguły tworzenia kategorii składniowych, które definiuje programista. Zdania języka programowania zbudowane są z leksem i kategorii składniowych połączonych według reguł języka. Słowa kluczowe (symboli terminalne) są zawsze wypisane w opisie języka. Przykłady słów kluczowych: for, define, begin, end. Symbole operatorów w większości są pobrane z matematyki, na przykład +, -, *. Separatory służą do rozdzielenia kategorii składniowych. Do separatorów należą: odstęp (spacja), przecinek, średnik itd. 6

2. Meta - język Do opisania każdego języka jest potrzebny meta - język. Meta - język jest nad językiem, ponieważ zasadniczo jest niemożliwe opisać kategorie języka korzystając tylko z samego języka. Często język programowania jest opisywany w języku naturalnym. W standardach z opisem języka programowania na początku standardu definiuje się meta - język. Jako meta - język standardu często wykorzystywana jest zmodyfikowana notacja Backusa - Naura (MBNF) oraz diagramy syntaktyczne. 2.1. Zmodyfikowana notacja Backusa - Naura Zmodyfikowana notacja Backusa - Naura jest zestawem reguł językowych w postaci: Nazwa_definiowanej_kategorii_składniowej = Meta-wyrażenie W niezmodyfikowanej notacji Backusa - Naura zamiast znaku "=" jest wykorzystana konstrukcja "::=". Obydwa warianty znaków należy czytać jako "to jest". W prawej części reguły w meta-wyrażeniu są wykorzystywane słowa kluczowe, wcześniej zdefiniowane kategorie składniowe i następujące operatory: konkatenacja, alternatywa, powtórzenie, opcja. Operatorowi konkatenacji nie odpowiada specjalny symbol. Konkatenacja jest realizowana za pomocą bezpośredniego zapisu znak za znakiem. Przykład definicji kategorii Ułamek_dziesiętny za pomocą operatora konkatenacji: Ułamek_dziesiętny =.Liczba_dziesiętna_całkowita_bez_znaku W przykładzie w meta-wyrażeniu widzimy znak." (kropka) i kategorię składniową Liczba_dziesiętna_całkowita_bez_znaku. W celu rozdzielenia kategorii składniowych meta-wyrażenie może zawierać nieznaczące spacji. W niezmodyfikowanej notacji Backusa - Naura kategorie składniowe są zapisywane w nawiasach ze znaków "<" i ">", na przykład: <Ułamek_dziesiętny> ::=.<Liczba_dziesiętna_całkowita_bez_znaku> Operator alternatywy jest zaznaczany symbolem i ma znaczenie lub wariant zapisany za symbolem. Przykład definicji kategorii Cyfra_dziesiętna za pomocą symbolu alternatywy i symbolów leksykalnych 0, 1,..., 9 : Cyfra_dziesiętna = 0 1 2 3 4 5 6 7 8 9 Operator powtórzenia jest zaznaczany nawiasami klamrowymi. Zawartość nawiasów może występować w kategorii dowolną ilość razy, w tym zero razy, tj. w ogóle nie wystąpić. 7

Przykład definicji kategorii Liczba_dziesiętna_całkowita_bez_znaku za pomocą operatora powtórzenia i kategorii Cyfra_dziesiętna : Liczba_dziesiętna_całkowita_bez_znaku = Cyfra_dziesiętna{Cyfra_dziesiętna} Operator opcji jest zaznaczany nawiasami kwadratowymi. Zawartość nawiasów może nie występować w kategorii. Przykład definicji kategorii Liczba_dziesiętna_całkowita za pomocą operatora opcji i kategorii Liczba_dziesiętna_calkowita_bez_znaku : Liczba_dziesiętna_całkowita = [+ -] Liczba_dziesiętna_calkowita_bez_znaku Definicja kategorii może być rekurencyjną. Przykład: Nazwa = Litera Nazwa Litera Nazwa Liczba Przedstawiona rekurencyjna definicja kategorii Nazwa wymusza, że nazwa może rozpoczynać się tylko od litery. 2.2. Diagramy syntaktyczne Diagramy syntaktyczne są graficzną formą dokładnego opisu języka programowania. Na diagramach syntaktycznych lepiej widać powtórzenia kategorii lub warianty budowanych kategorii. Każdy diagram ma nazwę definiowanej kategorii składniowej. Żeby przeczytać diagram syntaktyczny trzeba przechodzić w wyobraźni wzdłuż linii strumieniowych z lewej strony diagramu na prawu stronę. Trzeba wybierać wszystkie z możliwych wariantów przechodzenia. Leksemy (symbole terminalne) zapisują się w kółkach, a wcześniej zdefiniowane kategorie składniowe - w prostokątach. Na przykład definicja kategorii Cyfra_dziesiętna przez diagram syntaktyczny wygląda następująco: Przykład definicji kategorii Liczba_dziesiętna_całkowita_bez_znaku : Przykład definicji kategorii Liczba_dziesiętna_całkowita : 8

Przykład definicji kategorii Ułamek_dziesiętny : Przykład definicji kategorii Nazwa Należy zwrócić uwagę, że tym razem definicja kategorii Nazwa jest definicją bez rekurencji (bez jawnej rekurencji). 3. Przegląd języków programowania zorientowanego obiektowo 3.1. Język C++ Język C++ 4 stworzony przez Bjarna Stroustrupa jest często nazywany C z klasami, ponieważ w warstwie proceduralnej był osadzony w notacji języka C, którego zaproponowali Brian Kernighan i Denis M. Ritchie. Autor języka C++ Bjarn Stroustrup zapożyczył z języka Simula 67 koncepcję klasy. Analiza języka C++ ujawnia również wpływ na ten język języka Algol 68. Istnieją liczne kompilatory języka C++ znanych firm: Borland, Microsoft, Watcom. Rozszerzone wersje języka C++ są włączone w szeroko znane systemy oprogramowania (środowiska) Borland C++ Builder oraz Visual C++ (część Visual Studio firmy Microsoft). Język C++ jest standaryzowany od 1994 komisją ISO/ANSI, standard z ostateczną korektą - standard ANSI 14882 2003 roku. Język C++ jest najszerzej używanym językiem. Język C++ wywarł wielki wpływ na inne języki. 3.2. Język Java Język Java 5 jest językiem niezależnym od platformy i przystosowanym do zdalnego sterowania w Internecie. Kompilator języka Java produkuje tak zwany plik klasowy (ang. class file). Plik klasowy zawiera kod bajtowy Javy (ang. byte code) - instrukcje tak zwanej wirtualnej maszyny Javy (Java Virtual Machine). Wirtualna maszyna Javy jest aplikacją do implementacji na danym komputerze wyprodukowanego przez kompilator pliku klasowego i dołączonych bibliotek. Wirtualna maszyna i kompilator tworzą interpretator języka Java. Za pomocą języka Javy można stworzyć aplikację autonomiczną lub tzw. aplet (ang. applet). Samodzielne programy w języku Java są nazywane aplikacjami, a programy, które są wykonywane przeglądarkami internetowymi - apletami. Aplet jest pobierany na żądanie, podobnie jak bitmapa, plik dźwiękowy, itp. Istniejące przeglądarki internetowe mają wbudowane interpretatory apletów języka Java i mogą wykonywać aplety Javy. Język Java pochodzi od języka C++. Język Java ma w porównaniu z C++ dużo mniejsze możliwości. W języku Java nie ma jawnych wskaźników, tylko referencje (odwołania). Brak jawnych wskaźników wyklucza możliwość programowego czysz- 4 Stroustrup B.,1994: The Design and Evolution of C++. Addision Wesley. Kisilewicz J., 2002: Język C++: programowanie obiektowe. Wrocław: Oficyna Wydawnicza Politechniki Wrocławskiej. 5 Morgan M., 1999: Poznaj język JAVA 1.2. Warszawa: Wydawnictwo MIKOM 9

czenia sterty pamięci z niepotrzebnych obiektów dynamicznych. Dla rozwiązania problemu z czyszczeniem wirtualna maszyna Javy ma moduł śmieciarza, który od czasu do czasu czyści pamięć. 3.3. Język Object Pascal Popularny język programowania Pascal powstał w 1971 roku. Autor języka Niklaus Wirth szeroko znany ze swoich publikacji zorientował Pascal na strukturalne programowanie metodą z góry na dół. Język Pascal zmieniał się wiele razy. W końcu lat siedemdziesiątych firma Apple zbudowała język Object Pascal, w którym zjawiły się pierwsze konstrukcje obiektowe. Firma Borland twórczo przerobiła język Object Pascal i w 1983 roku zbudowała system programowania (środowisko) Turbo Pascal, który zawiera oprócz kompilatora redaktor tekstu i narzędzie wykrywania usterek (debugowania). W 1989 roku pojawiła się wersja Turbo Pascal 5.5, w której język Object Pascal zawiera konstrukcje składniowe potrzebne do programowania zorientowanego obiektowo. Znacznym krokiem w rozwoju programowania stało się ukazanie środowiska programowego Delphi 6 w języku Object Pascal z rozwiniętą biblioteką klas graficznych obiektów. 3.4. Język Visual Basic Język Visual Basic 7 powstał w firmie Microsoft w 1991 roku. Słowo Basic w nazwie języka przypomina o języku Basic (Beginners All - Purpose Symbolic Instruction Code), który ma zbiór słów kluczowych jasnych dla szerokiego grona osób. Firma Microsoft prawie, co rok wypuszczała na rynek następne środowiska Visual Basic z nową wersją języka. Od pierwszej wersji samo środowisko Visual Basic było oprogramowane obiektowo, ale programista mógł tylko brać obiekty z wbudowanej biblioteki graficznych obiektów lub podłączać obiekty ActiveX. Dla zbudowania obiektów według technologii ActiveX trzeba było kupić dodatkowy program. Od wersji 5.0 Visual Basic można uważać za język zorientowany obiektowo. Uwieńczeniem rozwoju języka Visual Basic stało się najnowsze środowisko Visual Basic.NET, w którym język jest gęsto przeplatany z biblioteką klas i elementami środowiska. Program w języku Visual Basic.NET można wywołać tylko za pomocą platformy.net Framework firmy Microsoft. 6 Kwasowiec W., 2002: Wprowadzenie do Object Pascal i Delphi. Warszawa: Wydawnictwo MIKOM 7 Halvorson M. Microsoft Visual Basic Professional 6.0 krok po kroku. Wydawnictwo RM Sp. z o.o., Warszawa 1998 10

Środowiska programowania W celu zwiększenia wydajności pracy programisty powstały systemy programowania. System programowania tworzą redaktor tekstów w języku programowania, kompilator, konsolidator, wykrywacz błędów (ang. debugger) oraz biblioteki z gotowymi komponentami. Kompilator przekształca tekst programu w formę pośrednią, która nazywa się w większości języków kodem obiektowym, a w języku Java - kodem klasowym. Konsolidator łączy między sobą kody obiektowe projektu aplikacji oraz dołącza biblioteki z kodami obiektowymi i przekształca kod obiektowy do postaci kodu komputerowego (maszynowego). Do kodu komputerowego (maszynowego) konsolidator dodaje nagłówek. System operacyjny korzystając z informacji zapisanej w nagłówku ładuje kod komputerowy (maszynowy) do pamięci komputera i uruchamia aplikacje przekazując sterowanie do pierwszej instrukcji. Kod klasowy języka Java jest interpretowany wirtualną maszyną Javy (ang. Java Virtual Machine) Programista przygotowuje program w zintegrowanym środowisku programowania (ang. Integrated Development Environment - IDE), które łączy programistę z komponentami systemu programowania oraz zawiera liczne funkcje serwisowe (na przykład, wyświetla innym kolorem słowa kluczowe, komentarzy itp.). Zintegrowane środowisko programowania zawierają zazwyczaj podsystem pomocy. Najnowsze z wersji zintegrowanych środowisk programowania pomagają programować pokazując możliwe warianty następnego fragmentu tekstu, na przykład listę atrybutów i metod klasy obiektu programowego. Rozpatrzymy systemy programowania z językami C++, Java, Visual Basic, Object Pascal. 1. System programowania Borland C++ Builder System programowania Borland C++ Builder ma na celu tworzenie wszystkich rodzajów aplikacji, napisanych w języku ANSI C++, tj. w takim dialekcie języka, który odpowiada standardowi ANSI. System Borland C++ Builder zawiera rozwiniętą bibliotekę VCL (skrót od Visual Component Library). W bibliotece VCL znajdują się komponenty zorientowane na system operacyjny Windows. Z systemu Borland C++ Builder można skorzystać też do przygotowywania aplikacji dla systemu operacyjnego Linux. System Borland C++ Builder (w wersji 6.0) zawiera bibliotekę CLX (skrót dla Borland Component Library for Cross-Platform). Komponenty biblioteki CLX są "uniwersalnymi", tj. mogą być wykorzystane w aplikacjach tak dla Windows, jak i dla Linux. 2. System programowania Visual Studio 2005 System programowania Visual Studio 2005 jest zbiorem narzędzi do tworzenia aplikacji ekranowych (ang. desktop applications), ASP - aplikacji internetowych (ang. ASP Web applications, skrót ASP od Active Server Pages), XML - aplikacji internetowych obsługujących klientów serwera (ang. XML Web services), oraz aplikacji dla urządzeń mobilnych (tj. komórek itp.) (ang. mobile applications). 11

Języki Visual Basic, Visual C++, Visual C#, oraz Visual J# systemu programowania Visual Studio 2005 są dostępne w jedynym zintegrowanym środowisku programowania. Zintegrowane środowisko daje możliwość tworzenia "mieszanej" aplikacji, której fragmenty są napisane w różnych językach. Wskazane języki są wsparte przez platformę.net Framework, która jest niezbędna do wykonywania ASP - aplikacji oraz XML - aplikacji. 3. System programowania Borland Delphi System programowania Borland Delphi pomaga stworzyć w języku Dephi, który opiera się o język Object Pascal, aplikacje z graficznym interfejsem użytkownika (ang. GUI applications, skrót GUI od Graphical User Interface), aplikacje konsolowe (ang. console applications), aplikacje obsługujące klientów serwera (ang. service applications), biblioteki dynamiczne (ang. DLLs, skrót od Dynamic-link Libraries) oraz pakiety Delphi, które są rodzajem bibliotek dynamicznych. Jedne z wersji systemu programowania Borland Delphi dają możliwość programowania dla platformy Linux. System programowania Delphi podobnie jak system C++ Builder zawiera dwie biblioteki: bibliotekę VCL (skrót od Visual Component Library) z komponentami zorientowanymi na system operacyjny Windows i bibliotekę CLX (skrót dla Borland Component Library for Cross-Platform) z "uniwersalnymi" komponentami tak dla Windows, jak i dla Linux. 4. Systemy programowania dla języka Java Najpopularniejszy system programowania dla języka Java to JavaBeans. Środowisko JavaBeans zawiera kompilator, konsolidator, interpretator, przeglądarkę apletów oraz wykrywacz błędów. Oprócz systemu JavaBeans istnieje system programowania "w częściach": pakiet JDK i środowisko JRE. Instalacja pakietu JDK (ang. Java Development Kit) dostarcza biblioteczne procedury, a także środowisko JRE (ang. Java Runtime Environment) do wykonania aplikacji oraz apletów. Instalacja środowiska JCreator firmy Xinox Software jako jednego ze środowisk programowania dla Java daje możliwość pracy z tekstem programu i uruchomienia aplikacji lub apletu. Środowisko JCreator zawiera kompilator, konsolidator, interpretator, przeglądarkę apletów oraz wykrywacz błędów. 12

Konstrukcje języka programowania 1. Zmienne Zmienna programowa jest obszarem pamięci komputera, którego rozmiar zależy od wskazanego lub ustawionego domyślnie typu zmiennej. Nazwa zmiennej jest identyfikatorem obszaru pamięci przydzielonego przez kompilator. Wyznaczając w programie typ zmiennej informujemy kompilator nie tylko o rozmiarze miejsca w pamięci wymaganego do umieszczenia wartości zmiennej, no i o możliwych operacjach z tą zmienną. Nazwę zmiennej wybiera programista przy następujących ograniczeniach: - nazwa musi rozpoczynać się od litery, lub od znaku _, lub znaku "$", - nazwa nie może być dłuższa niż 255 znaków lub 31 znaków w zależności od kompilatora, - nazwa nie może być jednym z kluczowych słów języka programowania. W tzw. notacji węgierskiej jest zalecane rozpoczynać nazwę od liter - skrótów od typu zmiennej, co daje programiście możliwość samokontroli typów danych. Na przykład przedrostkami mogą być litery: n lub "i" (od ang. integer) w nazwach zmiennych typu całkowitego, b (od ang. boolean) w nazwach zmiennych typu logicznego, x, "y" w nazwach współrzędnych, "s" (od ang. string) w nazwach tablic tekstowych, "sz" (od ang. string, zero) w nazwach tablic tekstowych ze znakiem "zero" na koncu, "p" (od ang. pointer) w nazwach zmiennych typu wskaźnikowego, "pfn" (od ang. pointer on function) w nazwach wskaźników na funkcji, itp. Duże i mały litery rozróżnia się w języku C/C++, Java i nie rozróżnia się w językach Object Pascal i Visual Basic.NET. 1.1. Deklaracje zmiennych Deklaracje zmiennych zawierają informacji o typie i nazwie zmiennej. Typ zmiennej należy wybierać w zależności od rodzaju danych i oczekiwanych wartości zmiennej (tab. 1). Typ Decimal w języku Visual Basic.NET ma na celu reprezentację danych finansowych. Typ decimal (Decimal) posiada niezwykłe wielki zakres wartości. 128-bitowa (16-bajtowa) reprezentacja typu Decimal składa się z 96-bitowej mantysy i 32- bitowego słowa, w którym zakodowany jest czynnik skalujący oraz znak mantysy. Czynnik skalujący ma zakres od 0 do 28 i wskazuje na liczbę miejsc dziesiętnych po przecinku. Jeżeli czynnik równa się 0 to typ Decimal stosuje się do liczb całkowitych ze znakiem. Typ Decimal opiera się na specjalnej, dziesiętną arytmetyce, dzięki czemu osiągnięta jest idealna dokładność dla liczb zmiennoprzecinkowych dziesiętnych. Na przykład liczba 0,01 nie może być dokładne reprezentowana przez typy Single lub Double, ale przez typ Decimal jak najbardziej. 13

Tabela 1 Typy zmiennych w zależności od rodzaju danych i oczekiwanych wartości Rodzaj danych i zakres wartości Język Typ Przykład Liczba całkowita ze znakiem od -128 do +127 C/C++ signed char int8 signed char ii; int8 ii; VB.NET - - Liczba całkowita bez znaku od 0 do 255 C/C++ unsigned char unsigned int8 unsigned char jj; unsigned int8 jj; Liczba całkowita ze znakiem od -32768 do +32767 Liczba całkowita bez znaku od 0 do 65535 Liczba całkowita ze znakiem od -2147483648 do +2147483647 Liczba całkowita bez znaku od 0 do 4294967295 Liczba całkowita ze znakiem od -92233 72036854775808 do +92233720368 54775807 Liczba całkowita bez znaku od 0 do 18446744073709551615 VB.NET Byte Dim symb As Byte C/C++ short short kk; int16 int16 kk; VB.NET Short Dim kk As Short C/C++ unsigned short unsigned int16 VB.NET - - C/C++ int long int32 unsigned short rodz; unsigned int16 rodz; int rozm; long rozm; int32 rozm; VB.NET Integer Dim rozm As Integer C/C++ unsigned long unsigned int32 unsigned long NN; unsigned int32 NN; VB.NET - - C/C++ int64 int64 ind; VB.NET Long Dim ind As Long C/C++ unsigned int64 unsigned int64 ui6; VB.NET - - Liczba zmienno-przecinkowa z dokładnością C/C++ float float flo; 7 cyfr dziesiętnych VB.NET Single Dim flo As Single Liczba zmienno-przecinkowa z dokładnością C/C++ double double doub; 15 cyfr dziesiętnych VB.NET Double Dim doub As Double Liczba zmienno-przecinkowa z dokładnością C/C++ long double long double d18; 18 cyfr dziesiętnych VB.NET - - Liczba stało-przecinkowa z dokładnością C/C++ - - 28 cyfr dziesiętnych VB.NET Decimal Dim dec28 As Deci- mal 1.2. Nadanie zmiennym wartości początkowych Wartości zmiennym, w tym wartości początkowe, nadajemy operatorem przypisania. Lewa część operatora przypisania zawiera nazwę zmiennej, a prawa - literał. Nadanie zmiennym wartości początkowych można połączyć z deklaracją. Język C/C++ i Java Przykłady: int rozm = 175; double doub = 3.74; 14

Język Visual Basic.NET Przykłady: Dim rozm As Integer = 175 Dim doub As Double = 3.74 2. Bloki programowe Bloki programowe są wprowadzone w celu ograniczenia zakresu widzialności zmiennych. Blok programowy daje programiście możliwość korzystania w różnych blokach z jednakowych nazw zmiennych i jednakowych nazw innych konstrukcji językowych. Granicy bloków są zaznaczane specjalnymi symbolami - separatorami lub granicami deklaracji konstrukcji programowej. Granicami bloku mogą być początek i koniec pliku. W językach C/C++ i Java granicy bloków są zaznaczane nawiasami figurowymi { i }. Słowa kluczowe begin i end są granicami bloku w języku Object Pascal. W języku Visual Basic.NET granicami bloku służą granicy konstrukcji programowej. Koniec konstrukcji programowej często jest pokazywany słowem kluczowym End razem z nazwą konstrukcji programowej, na przykład, End Structure, End While itp. Bloki mogą być włożone jeden w drugi bez ograniczeń (oprócz wyczerpania pamięci operacyjnej). Blok największego rozmiaru odpowiada całemu programu i nie jest zaznaczony nawiasami lub innymi symbolami. Obiekt (zwykle zmienna) zdefiniowany w bloku nazywa się obiektem lokalnym (zmienną lokalnej). Obiekt zdefiniowany w największym bloku, tj. w granicach programu, ale poza włożonymi blokami, nazywa się obiektem globalnym (zmienna globalnej). Modułem nazywamy grupę plików dotyczących autonomicznego obiektu, a mianowicie aplikacji, biblioteki dynamicznej (DLL) itp. Jednostką programowej (unit) nazywamy grupę plików dotyczących okna graficznego. W środowisku Borland Delphi do jednostki programowej należą plik implementacji z rozszerzeniem.pas, plik z opisaniem formularza z rozszerzeniem.dfm i plik resursów z rozszerzeniem.res. W środowisku Borland C++ Builder do jednostki programowej należą plik nagłówkowy z rozszerzeniem.h, plik implementacji z rozszerzeniem.cpp, plik z opisaniem formularza z rozszerzeniem.dfm i plik resursów z rozszerzeniem.res. 3. Zmienne globalne i lokalne Zmienne mogą być globalne i lokalne. Jeżeli programista planuje posługiwać się adresem komórki pamięci zmiennej w zasięgu całego programu, to on definiuje zmienną jako globalną. Miejsce w pamięci, w którym jest rozmieszczona globalna zmienna nie zmienia się w trakcie wykonywania programu. Mówimy, że globalna zmienna ma zasięg całego programu. Jeżeli zmienna jest potrzebna tylko w części programu, to należy zdefiniować zmienną jako lokalną. Miejsce, w którym jest rozmieszczona lokalna zmienna, może być wykorzystane przez system operacyjny w innych częściach programu do rozmieszczenia innych zmiennych. Zdarza się, że w przypadku powtórzenia fragmentu 15

programu system operacyjny zmienia miejsce rozmieszczenia tej samej zmiennej lokalnej. Lokalna zmienna ma zasięg bloku, w którym ona jest zdefiniowana. Języki C i C++ Przykład deklaracji zmiennych globalnych: int rozm = 175; double doub = 3.74; void main(void) {... } Przykład deklaracji zmiennych lokalnych: void main(void) { int rozm = 175; double doub = 3.74;... } Język Visual Basic.NET Przykład deklaracji zmiennych globalnych: Dim rozm As Integer = 175 Dim doub As Double = 3.74 Sub Main()... End Sub Przykład deklaracji zmiennych lokalnych: Sub Main() Dim rozm As Integer = 175 Dim doub As Double = 3.74... End Sub 4. Deklaracje zmiennych importowanych Jeżeli tekst programu jest rozdzielony na pliki i pewna globalna zmienna jest wykorzystana nie tylko w tym pliku, w którym ona jest zdefiniowana, to zmienna powinna być zadeklarowana jako importowana w miejscu jej wykorzystania. Deklaracja zmiennej importowanej zawiera modyfikator importu: słowo extern, lub import, itp. W deklaracji zmiennej importowanej nie można wskazywać początkowe wartości. Deklaracje zmiennych importowanych najwygodniej zapisywać do odrębnych plików nazywanych plikami nagłówkowymi. 16

Języki C i C++ Przykłady deklaracji zmiennych: #include <stdio.h> //import pliku nagłówkowego z nazwą "stdio-.h" extern int rozm; extern double doub; void main(void) { doub = rozm * 3.1415;... } Język Visual Basic.NET Przykład deklaracji zmiennych: Import Windows Dim rozm As Integer Dim doub As Double 5. Rodzaje zmiennych lokalnych Dla zmiennej lokalnej można zadać jeden z następujących rodzajów: automatyczna, statyczna lub rejestrowa. Zmienna automatyczna jest alokowana i inicjowana przy każdym wykonywaniu instrukcji bloku. Po zakończeniu instrukcji bloku wartość zmiennej automatycznej nie jest zachowywana. Zmienna statyczna jest alokowana i inicjowana tylko przy pierwszym wykonywaniu instrukcji bloku. Po zakończeniu instrukcji bloku wartość zmiennej statycznej jest przechowywana. Zmienna rejestrowa mieści się w jednym z rejestrów komputera, co powoduje szybkie wykonywanie operacji z tą zmiennej. Po zakończeniu instrukcji bloku wartość zmiennej rejestrowej będzie stracona. Jeżeli w bloku programowym zdefiniowano za dużo zmiennych rejestrowych kompilator zamienia zbędne zmienne rejestrowe na zmienne automatyczne. Języki C i C++ Przykład deklaracji zmiennych lokalnych: void main(void) { static licznik = 0; // zmienna statyczna register int indeks = 0; // zmienna rejestrowa double pi = 3.1415; //zmienna automatyczna... } Język Visual Basic.NET W języku Visual Basic.NET wszystkie zmienne są automatyczne. Przykład deklaracji zmiennych lokalnych: Sub Main() Dim rozm As Integer = 175 17

Dim doub As Double = 3.74... End Sub 6. Stałe Stałą można zdefiniować na dwa sposoby. Po pierwsze, można wykorzystać zmienną z początkowej wartością, która nie jest zmieniana. Można poinformować kompilator o niezbędności śledzenia, aby instrukcje programu nie zmienili wartość zmiennej. W tym celu w językach C, C++ i Object Pascal jest wykorzystane słowo kluczowe const. Przykłady w językach C i C++: const int rozm = 175; const char litera = A ; const char autor[] = Autor ; Po drugiej, można zadeklarować nazwę stałej i jej wartość. W tym przypadku kompilator decyduje o poprawnym rozmieszczeniu stałej i wybiera typ w zależności od wartości stałej. Języki C i C++ W językach C i C++ należy wykorzystać deklarację define, na przykład: #define rozm 175 lub słowo kluczowe const, na przykład: const litera = A ; Język Visual Basic.NET W języku Visual Basic.NET można zadeklarować stałą wykorzystując słowo kluczowe Const Przykład w języku Visual Basic.NET: Const rozm = 175 7. Tablice programowe Tablice programowe opisują kolejno rozmieszczone w pamięci elementy jednakowego typu. Tablice definiowane są zawsze przez typ elementu tablicy. Język C++ W deklaracji tablicy w języku C++ powinny być wskazane typ danych elementu tablicy i liczba elementów tablicy lub liczba elementów w każdym wymiarze, jeżeli tablica jest wielowymiarowa.. Przykłady deklaracji tablic programowych w języku C++: int tabl1[5];//tablica na 5 elementów typu int unsigned int tabl2[7][10];//tablica z 7*10 elementów typu unsigned int Kompilator języka C++ rozmieszcza w pamięci elementy tablicy wielowymiarowej w kolejnych komórkach pamięci w ten sposób, aby z dwóch sąsiadujących indeksów tablicy indeks z prawej strony zmienia się prędzej. 18

Język Visual Basic.NET W języku Visual Basic.NET nietrudno zdefiniować zarówno tablicę jednowymiarową, jak i wielowymiarową. Niezwykłą regułą języka jest wskazanie w deklaracji nie liczby elementów, lecz największej wartości indeksów w każdym wymiarze. Najmniejsza wartość indeksu równa się 0. Kompilator języka Visual Basic.NET rozmieszcza elementy tablicy wielowymiarowej w takie kolejności, że indeks prawy zmienia się szybciej niż indeks lewy. Przykłady deklaracji tablic w języku Visual Basic.NET: Dim tabl1(4) As Integer deklaracja tablicy na 5 elementów typu Integer Dim tabl2(6,9) As Double deklaracja tablicy na 7*10 elementów typu Double 19