Podstawy programowania w języku Java. mgr inż. Piotr Kowalski



Podobne dokumenty
1 Podstawy c++ w pigułce.

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

Programowanie obiektowe

Programowanie obiektowe

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

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

1 Podstawy c++ w pigułce.

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

Programowanie obiektowe

Podstawy Programowania C++

Język ludzki kod maszynowy

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

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

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

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Java jako język programowania

Podstawy programowania w języku C

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Tworzenie aplikacji w języku Java

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

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

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

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA?? to proste!! Autor: wojtekb111111

Rozdział 4 KLASY, OBIEKTY, METODY

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

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

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

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

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

Java EE produkcja oprogramowania

Podstawy i języki programowania

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

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Podstawy Programowania Podstawowa składnia języka C++

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Zmienne, stałe i operatory

Algorytm. a programowanie -

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

Multimedia JAVA. Historia

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

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

Programowanie w języku Python. Grażyna Koba

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

Programowanie - instrukcje sterujące

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

Programowanie obiektowe

Podstawy programowania 2. Przygotował: mgr inż. Tomasz Michno

Ćwiczenie 1. Przygotowanie środowiska JAVA

Języki i techniki programowania Ćwiczenia 2

Warunek wielokrotnego wyboru switch... case

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

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

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Programowanie obiektowe zastosowanie języka Java SE

Pętle. Dodał Administrator niedziela, 14 marzec :27

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Podstawowe części projektu w Javie

4. Funkcje. Przykłady

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Spis treści. 1 Java T M

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

Java Język programowania

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

Programowanie obiektowe

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Wprowadzenie do języka Java

Dokumentacja do API Javy.

Część 4 życie programu

Zasady programowania Dokumentacja

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

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

Powtórka algorytmów. Wprowadzenie do języka Java.

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Wykład 8: klasy cz. 4

Metody Metody, parametry, zwracanie wartości

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

WPROWADZENIE DO JĘZYKA JAVA

KOTLIN. Język programowania dla Androida

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

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

Wstęp do programowania. Wykład 1

Platformy Programistyczne Podstawy języka Java

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

Lab 9 Podstawy Programowania

Podstawy i języki programowania

Transkrypt:

Podstawy programowania w języku Java mgr inż. Piotr Kowalski 18 stycznia 2013

Spis treści 1 Podstawy architektury komputera 5 1.1 Części składowe komputera..................... 5 1.1.1 Rzecz o rejestrach...................... 6 1.1.2 Rzecz o pamięci....................... 6 1.1.3 Rzecz o programowaniu................... 7 1.2 Języki programowania........................ 8 1.2.1 Od kodu do programu.................... 9 1.3 Funkcje systemu operacyjnego.................... 9 1.3.1 Jądro systemu operacyjnego................. 9 1.3.2 BIOS i uruchomienie stacji................. 10 1.3.3 Systemy plików........................ 10 1.3.4 Funkcja hashująca w systemie plików............ 11 2 Algorytmy i struktury danych 12 2.1 Struktury statyczne......................... 12 2.1.1 Tablice............................ 12 2.1.2 Rekordy............................ 12 2.1.3 Obiekty............................ 13 2.2 Struktury dynamiczne........................ 13 2.2.1 Stos.............................. 13 2.2.2 Kolejka............................ 13 2.2.3 Lista.............................. 13 2.2.4 Drzewo binarne........................ 13 2.2.5 Graf.............................. 14 2.3 Porównanie typów struktur..................... 14 3 Wstęp - instalacja zintegrowanego środowiska programistycznego dla Javy 15 3.1 Czym jest wirtualna maszyna Javy oraz najważniejsze składowe technologii............................... 15 3.2 Czym jest IDE............................ 16 4 Podstawy języka Java 18 4.1 Zmienne w Javie. Pierwsze starcie................. 18 4.1.1 Typy prymitywne...................... 19 4.1.2 Typy wyliczeniowe...................... 19 4.1.3 Typy tablicowe........................ 20 4.1.4 Klasy............................. 20 1

SPIS TREŚCI 2 4.1.5 I jeszcze o zmiennych.................... 21 4.1.6 Słowa zarezerwowane..................... 21 4.1.7 Znaki niepisane........................ 22 4.1.8 Rzutowanie.......................... 22 4.1.9 Typ specjalny void...................... 22 4.2 Podstawowe operacje w języku Java................ 23 4.2.1 Instrukcje warunkowe.................... 23 4.2.2 Instrukcje pętli........................ 24 4.2.3 Funkcje............................ 25 4.3 Operatory............................... 26 4.3.1 Literały............................ 28 4.4 Obsługa błędów w języku Java................... 29 4.4.1 Drzewo hierarchii błędów.................. 29 4.4.2 Komendy obsługi błędów.................. 30 4.5 Inne reguły w języka Java...................... 32 4.5.1 Nazewnictwo w Javie..................... 32 5 Tworzenie modeli w Javie 33 5.1 Tworzenie nowej klasy........................ 33 5.2 Dziedziczenie i polimorfizm..................... 34 5.2.1 Interfejsy........................... 35 5.2.2 Modyfikator abstract i adnotacja @Override...... 36 5.3 Modyfikatory dostępu........................ 37 5.3.1 Modyfikator final...................... 38 5.4 Słowo kluczowe this oraz o konstruktorach............ 39 6 Korzystanie z pakietów podstawowych języka Java 41 6.1 Kontenery............................... 41 6.1.1 Kolekcje............................ 41 6.1.2 Iteratory........................... 42 6.1.3 Tablice asocjacyjne...................... 42 6.1.4 Przeszukiwanie i sortowanie kontenerów.......... 42 7 Tworzenie aplikacji z interfejsem graficznym Swing 43 7.1 Elementy pakietu Swing....................... 43 7.1.1 Uruchamianie okna głównego aplikacji........... 44 7.1.2 Swing - menu......................... 45 7.1.3 Swing - kontenery...................... 45 7.1.4 Swing - kontrolki....................... 46 7.2 Okienka dialogowe.......................... 46 7.2.1 Przykładowe użycia okienek dialogowych......... 46 7.3 Wydarzenia.............................. 46 7.3.1 Akcja wykonana....................... 46 7.4 Właściwości okna........................... 46 7.5 Nasłuchiwacze............................ 46 A Zadania laboratoryjne 47 B Zadania projektowe 50

SPIS TREŚCI 3 C Zadania do samodzielnego rozwiązania 52 C.1 Zadanie z prostych algorytmów................... 52 C.2 Zadania z modelowania w języku Java............... 52 C.3 Zadania z prostych aplikacji graficznych.............. 54

SPIS TREŚCI 4 Wersje numer data autor opis 0.1 10.10.2012 Piotr Kowalski Prace nad pierwszym rozdziałem 0.2 13.11.2012 Piotr Kowalski Dołączone dziedziczenie, modyfikatory dostępu oraz obsługa błędów 0.3 27.11.2012 Piotr Kowalski Dołączone konstruktory oraz liczne zadanka i projekty laboratoryjne. 0.4 18.01.2012 Piotr Kowalski Dołączone zaczątki kolejnych rozdziałów z: Kontenerów oraz Swing.

Rozdział 1 Podstawy architektury komputera 1.1 Części składowe komputera Do głównych elementów komputera należą ˆ Płyta główna ˆ Pamięć RAM ˆ Dysk twardy ˆ Karta graficzna ˆ Inne elementy Szczególną uwagę przykuwa płyta główna jako komponent odpowiedzialny za wykonywanie obliczeń i działanie programu. Głównymi elementami wchodzącymi w skład płyty głównej są: Procesor jest główną jednostką obliczeniową całego systemu komputerowego, przeprowadza wszystkie operacje w komputerze. Magistrala danych jest kanałem do przesyłania danych pomiędzy komponentami systemu. Jest jak rura łącząca wiele wejść i wyjść. W danej chwili jej pracy, jedno urządzenie działa w trybie nadawania a drugie w odbioru, reszta pozostaje bierna czekając na swoją kolej. Zazwyczaj jednym z tych czynnych urządzeń jest procesor. Rejestry są najszybszym typem pamięci (i najdroższym) i to od ich wykorzystania przez procesor w głównej mierze zależy szybkość oprogramowania. Rozmiar rejestrów zależy od tzw. architektury procesora. Pierwsze procesory były konstruowane w architekturze 16 bitowej co oznaczało że procesor operował na danych o rozmiarze do 16 bitów, zatem był wyposażony w rejestry o pojemności 16 bitów. Obecnie dominują procesowy 32 bitowe, część rynku jest jednakże już opanowywana przez procesory 64 bitowe. 5

ROZDZIAŁ 1. PODSTAWY ARCHITEKTURY KOMPUTERA 6 Sterownik przerwań, ponieważ komputer pracuje równolegle nad być może wieloma zadaniami, może się okazać że w trakcie pracy nad jednym z nich, jedno z urządzeń zgłosi procesorowi żądanie by ten sprawdził jego stan i wykonał pewne operacje. By proces ten był nadzorowany i odpowiednio kolejkowany (które urządzenie jako kolejne powinno być obsłużone) wprowadzony został sterownik przerwań. Sterownik przerwań jest mikrokontrolerem który nadzoruje zgłaszane przerwania (tu: żądania przerwania bieżącego zadania przez procesor), ustala ich priorytet i delikatnie szturcha procesor gdy nadejdzie przerwanie. Przykładem może być wciśnięcie przycisku na klawiaturze, które spowoduje zgłoszenie przerwania celem odczytania znaku z bufora klawiatury. Innym rodzajem przerwania są np. mrugania diody LED na przerwanie zgłaszane przez dysk twardy. Zegar jest urządzeniem, które odmierza pewien krótki okres czasu w komputerze i może być wykorzystane zarówno do przerwań systemowych, jak dla innych celów. Zbudowane jest na zasadzie drgającej struktury krystalicznej. 1.1.1 Rzecz o rejestrach Rejestry są podstawową pamięcią komputera. To na danych w nich zawartych są wykonywane wszystkie obliczenia. Rejestrów w architekturze rodziny procesorów Intel32 występuje ich około 20-tu. Do najważniejszych należą: EAX / AX jest rejestrem nazywanym Akumulatorem. Jego nazwa pochodzi od tego, że to najczęściej w nim umieszczane są wyniki pracy procesora (akumuluje wyniki). EBX / BX jest rejestrem adresowania. W tym rejestrze składowane są adresy w pamięci RAM w chwili gdy procesor stara się je odczytać lub zapisać. ECX / CX rejestr odliczający. Jest rejestrem ładowanym pewną daną przy okazji wykonywania wszelakich pętli w trakcie obliczeń. Jest ładowany pewną wartością, która co wykonanie pętli jest zmniejszana automatycznie o 1. Gdy osiągnie wartość 0 pętla jest zatrzymywana. W tej formie rozwiązania pętli można dostrzec przewagą (i przyczynę) osobnego tworzenia pętli FOR. CS, DS rejestry obszaru pamięci. Po załadowaniu programu do pamięci RAM, obszar pamięci gdzie znajduje się kod programu jest oznaczany w rejestrze CS (CODE SEGMENT), zaś dla danych ma adres ich składowania znajduje się w rejestrze DS (DATA SEGMENT) REJESTR FLAGOWY jest specjalnym rejestrem procesora, gdzie składowane są nie dane wyjściowe procesora, ale błędy które zostały zgłoszone w trakcie obliczeń. 1.1.2 Rzecz o pamięci W kwestii pamięci procesora, wyróżnioną role pełni pamięć RAM. Dysk twardy nie pełni żadnej innej funkcji poza funkcją składowania danych. Wszelkie operacje procesora na danych z dysku, muszą być poprzedzone przekopiowaniem

ROZDZIAŁ 1. PODSTAWY ARCHITEKTURY KOMPUTERA 7 tychże danych do pamięci RAM procesora. Pamięć RAM po załadowaniu systemu operacyjnego jest dzielona na obszar do użytku oraz na stos procesora. Stos procesora jest miejscem gdzie mogą być składowane dane. Zgodnie z zasadą stosu rzeczy odłożone później są zdejmowane wcześniej. Stos jest bardzo często wykorzystywanym obszarem pamięci. Przykłady użycia stosu ˆ Tymczasowe zachowanie stanu rejestrów, np gdy potrzeba rejestrów do kolejnych obliczeń a nie można poświęcić posiadanych danych. ˆ Wykonanie przerwania - w chwili pojawienia się przerwania wszystkie dane nad którymi pracował procesor muszę być zachowane tak by po zakończeniu przerwania procesor mógł kontynuować pracę. Na stos są wtedy zrzucane wszystkie używane rejestry włącznie z flagowym oraz wskaźnikiem do punktu w kodzie gdzie nastąpiło przerwanie. ˆ Wywołanie funkcji - w chwili wywołania funkcji podobnie jak przy przerwaniu, wszystkie dane zostają zapisane na stosie. ˆ Przekazanie parametrów do funkcji - Często lista parametrów funkcji jest bardzo długa. Wtedy nie jest możliwym przekazać ich przez rejestry ( przekazywanie przez rejestry jest nawet nie wskazane). Jedyną możliwością jest odłożyć je wtedy przez stos tak by nowa funkcja mogła go łatwo odzyskać ze stosu. 1.1.3 Rzecz o programowaniu W programowaniu występuje mnóstwo głównych reguł. Jednakże najważniejsze reguły informatyki to: ˆ Niezależność poziomów programowania ˆ Zgodność wstecz Poziomy programowania Napisanie programu jest z reguły rzeczą trudną. Wymaga dokładnego przemyślenia sytuacji, z którą program ma sobie radzić, zapobiec dopuszczenia do błędu programu oraz wykonania optymalnej ilości operacji by kod był szybki. Nie jest jednak nigdy tak, że jeden programista pisze cały program. Częściej programiści dzielą program na małe części i każdy realizuje jego część. Nigdy nie jest również tak, że program raz napisany nie zostanie już nigdy poprawiony. Ważną zasadą jest więc właśnie to by programy mogły korzystać z siebie nawzajem w sposób bezpieczny i niezmienny pomimo oczywistych poprawek lub nieznajomości innego programu. Prostym przykładem jest np. zainstalowanie nowego sterownika do drukarki. Pomimo, że program sterownika działa zupełnie inaczej, programy wyżej powinny mieć możliwość wywoływać DRUKUJ bez względu na to jak dany sterownik realizuje tą funkcję. Jest to tzw. niezależność poziomów programowania.

ROZDZIAŁ 1. PODSTAWY ARCHITEKTURY KOMPUTERA 8 Interfejsy Interfejsem będziemy nazywać dowolny zestaw czynności udostępnianych przez program lub aplikację. Tak naprawdę zaś interfejs jest fikcyjnym programem, który ma zapewniać to, że inne programy będą mogły się do pewnej funkcjonalności odwoływać pomimo, że programista mógł zupełnie zmienić samą funkcję. Korzystanie z interfejsów zapewnia jednak to, że programy mogą ze sobą bezpiecznie współpracować, mimo iż byłyby modyfikowane. Zgodność wstecz Niektórzy nazywają największą zmorą programistów. Przyczyny jej stosowania są czysto ekonomiczne. Zachowanie zgodności wstecz to nic innego jak zapewnienie starszym programom możliwości pracy. I również w tym punkcie nieocenione okazują się być interfejsy, które potrafią poprawić to co robią stare programy i w miarę możliwości zastosować usprawnienia. Przykładem jest np. to że nowe wersje MS-WORDa potrafią otwierać pliki z poprzedniej wersji programu np z roku 97. Pomimo to, programy te niechętnie pozwalają zapisywać w starych formatach, które są mniej wydajne lub wręcz nie pozwalają na pewne dodatkowe funkcje. Z tej samej przyczyny architektura systemu MS-Windows nie zmieniła się zbytnio od roku 1994. 1.2 Języki programowania Pomiędzy językiem który rozumie procesor komputerowy, a językiem ludzkim jest olbrzymia przepaść. Nie jest możliwym aby przeskoczyć te różnice i ani procesor nie zacznie słuchać po ludzku ani programista nie napisze programu za pomocą ciągu zer i jedynek. Muszą istnieć zatem narzędzia, specjalne translatory które tłumaczyły by nawzajem te języki. Jako, że różne są potrzeby i wymagania wyróżnia się 5 generacji języków. Języki procesora - I Generacja - jest językiem komend procesora, jego składnia jest różna dla różnych procesorów i jest bardzo zorientowana na stronę techniczną procesora. Dominuje tu poprawianie programu poprzez lepsze realizowanie poleceń procesora. Języki komend procesora - II Generacja - Asemblery - jest to język dyrektyw wydawanych procesorowi. Nie zależy on od rodzaju procesora. W programach tych poprawianie realizuje się poprzez lepsze zarządzanie pamięcią. W asemblerach pisze się głównie sterowniki dla sprzętu. Języki proceduralne - III Generacja - podstawowa generacje języków programowania. Jest to najniższa generacja języków niezależnych sprzętowo tzn. ten sam kod programu działa tak samo na różnych komputerach, choćby były zupełnie inaczej zbudowane. Słowo proceduralne w nazwie określa, że programista dokładnie określa zadanie, które wykonać ma program. Przykładowe języki programowania to C, C++,C#, D, Pascal, Java, Ada95. Języki deklaratywne - IV Generacja - języki programowania z tej grupy są bardzo przyjazne użytkownikowi. W przeciwieństwie do proceduralnych,

ROZDZIAŁ 1. PODSTAWY ARCHITEKTURY KOMPUTERA 9 tu program automatycznie stara się zrozumieć co miał na myśli użytkownik by uzupełnić jego kod. Przykładami takich języków są : SQL, HTML, XML, BASH, PYTHON, PERL, PHP, AWK. Języki inteligentne - V Generacja - dopiero rozbudowywana gałąź samouczących się programów. Rzadko stosowana. Języki I i II generacji nazywa się językami niskiego poziomu - jako, że pozwalają tworzyć oprogramowanie zależne od sprzętu, języki wyższych generacji nazywane są językami wysokiego poziomu, jako niezależnym sprzętowo. 1.2.1 Od kodu do programu Ze względu na to, że języki V generacji są wielką innowacją, a języki II generacji są niewydajne w tworzeniu aplikacji, programiści skupiają się na pracy w językach III i IV generacji. Programy stworzone w językach III generacji nazywamy kodem, zaś programy stworzone w IV generacji nazywamy skryptami. Pomiędzy nimi zachodzi istotna różnica. Z tą różnicą związane są dwa pojęcia Kompilator - program komputerowy, którego zadaniem jest tłumaczenie kodu na języki coraz to niższego poziomu, aż do utworzenia kodu maszynowego. Jest to postępowanie, któremu podlegają języki 3 poziomu. Interpreter - program komputerowy, którego zadaniem jest wykonanie ciągu poleceń umieszczonych w programie języka IV generacji, zwanym skryptem. Jest to opis ciągu wywołań kolejnych programów niższego poziomu, celem uzyskania określone efektu. Z racji istnienia takiej struktury rzeczy, zauważyć możemy, że jeden kod wysokiego poziomu, może różnie działać ze względu na miejsce jego kompilacji. Oznacza to również, że skompilowany program przeniesiony na inną stację komputerową może działać błędnie lub w ogóle. Z drugiej strony mamy jednak zapewnienie, że na poziomie logicznym kod wykonany na jednej i drugiej stacji da takie same wyniki. 1.3 Funkcje systemu operacyjnego 1.3.1 Jądro systemu operacyjnego W komputerze niezwykle istotną funkcję pełni system operacyjny (ozn. OS). Pełni on role interfejsu pomiędzy programami, a architekturą komputera i urządzeniami doń podłączonymi. System operacyjny składa się z: ˆ Jądra systemu ˆ Aplikacji systemu ˆ Sterowników Aplikacjami systemu są wszystkie programy zainstalowane na systemie by zapewnić jego podstawową działalność. Wszystko co komputer może wykonać dla

ROZDZIAŁ 1. PODSTAWY ARCHITEKTURY KOMPUTERA 10 innych programów w systemie jest jednakże zdefiniowane w jądrze systemu operacyjnego. Nie jest możliwym by jakikolwiek program znajdujący się powyżej poziomu jądra systemu był w stanie bezpośrednio wywołać aplikacje z poziomu poniżej. Jądro systemu świadczy zestaw metod i jeśli jakieś zastosowanie jest zgodne z zasadami pracy systemu komputerowego, to jest przesyłane poniżej. Najczęściej jądro służy do przekazania poleceń wywołania do poszczególnych sterowników. Sterowniki mają szczególną pozycję w systemie operacyjnym i dlatego ich instalacja musi być bardzo odpowiedzialna. Taka struktura systemu ma natomiast wiele zalet w kwestii bezpieczeństwa. W ten sposób programy, wywoływane osobno nie mogą mieć na siebie wzajemnego wpływu, gdyż wszystkie operacje są nadzorowane przez jądro systemu. 1.3.2 BIOS i uruchomienie stacji BIOS jest specyficznym rodzajem oprogramowania. Jest to oprogramowanie typu ROM tzn. jedynie do odczytu (choć od tego by był to czysty ROM, ostatnio się odchodziło to obserwuje się tego negatywne skutki), związane z poszczególnymi elementami stacji komputerowej. Jedną z głównych rol BIOSu jest uruchamianie stacji. Kolejne etapy uruchamiania stacji (orientacyjne): 1. Start BIOSu płyty głównej 2. Poszukiwanie na kolejnych pozycjach systemów operacyjnych 3. Start jądra systemu 4. Start podstawowych usług systemu - montowanie systemów plików 5. Start trybu graficznego (lub nie :P) 6. Wyświetlenie okna logowania 1.3.3 Systemy plików Nie rozłącznym pojęciem dla każdego OS-u jest system plików. Jest to sposób zapamiętywania danych na dysku twardym. Sposób taki, musi być wydajny - byśmy mogli zapisać jak najwięcej danych oraz bezpieczny - byśmy nie stracili danych. Jak łatwo przypuszczać ma się albo jedno albo drugie. Najczęściej całość wygląda następująco. DYSK FIZYCZNY - stanowi górny limit dla składowania danych. PARTYCJA - obszar zapamiętania poszczególnych danych. SEKTORY - obszar umieszczenia danych KLASTRY - jednostka pojemności pamięci. Pojedyncza dana zapisana na dysku jest w klastrze. Dysk fizyczny, ma w swoim nagłówku listę wszystkich partycji na niej utworzonych (TABLICA PARTYCJI).Oprócz tego znajduje się tu również MBR (MasterBootRecord) bardzo ważny element wskazujący położenie ewentualnego programu ładującego system operacyjny. Partycja zaczyna się z kolei elementem TOC (TABLE OF CONTENT) - tj tablicy zawierania. Są tu umieszczone

ROZDZIAŁ 1. PODSTAWY ARCHITEKTURY KOMPUTERA 11 wszystkie pliki na dysku, a dokładniej lokalizacja ich początku. Pliki znajdują się na dysku w postaci rozproszonej. W TOC znajduje się położenie pierwszego kawałka pliku, na końcu pierwszego kawałka znajduje się położenie następnego kawałka itd. Systemami plików stosowanymi obecnie są: NTFS dla windows, EXT3/4 dla linux. Oprócz tego historyczne formaty to FAT16, FAT32 i VFAT (obecnie na pendrive ach). 1.3.4 Funkcja hashująca w systemie plików Stosowanie tablicy plików jest dobrym rozwiązaniem w kwestii zapisu plików, jednak zapis nie jest jedyną główną operacją w systemie plików. Inną przykładową funkcją systemu plików jest wyszukiwanie pliku o pewnej cesze, powiedzmy nazwie. Prosta tablica plików nie jest wygodnym do poszukiwania rozwiązaniem. Trzeba by przejrzeć średnio połowę, a w najgorszym wypadku wszystkie zapisy tablicy, których może być bardzo dużo. Potrzebna jest subtelniejsza struktura, która jednak nie spowoduje opóźnień w dostępie do plików. Najprostszym rozwiązaniem byłoby podzielenie jedne dużej tablicy na kilka (a raczej kilka-dużo np kilka tysięcy) mniejszych tablic zawierających tylko wybrane rekordy. Więc można by przykładowo podzielić tekst ze względu na pierwszą literę w nazwie pliku. To podzieli zespół nazw na około 27 grup, co skróci przeszukiwanie 27 razy... Błąd. Przyśpieszenie wcale nie będzie nawet tak średnio dobre. Problemem jest liczność poszczególnych grup. Jak często trafiają się nam słowa na literę Y a jak często na literę K. Podział, który powinniśmy zastosować powinien zapewnić nam możliwie równomierne rozłożenie składu tych grup. Zatem potrzebne jest przyporządkowanie odpowiednich grup odpowiednim nazwom. Są to bardzo skomplikowane w wypracowaniu, ale proste w użyciu funkcje nazywane fachowo hashującymi.

Rozdział 2 Algorytmy i struktury danych Napisanie programu nie jest niczym trudnym. Prawdziwą trudnością programistyczną jest zrobienie tego przy minimalnych nakładach. Programy optymalizuje się ze względu na dwie ich cechy: Ilość operacji - mierzona w taktach procesora; Zużycie pamięci - mierzona w ilości wykorzystanej pamięci W zależności od stawianych sobie wymagań wykorzystuje się różne struktury i różne metody prowadzenia obliczeń. Postaram się teraz omówić kilka najprostszych struktur. 2.1 Struktury statyczne Pierwszym typem struktur są struktury statyczne. Wszędzie w programowaniu określenie statyczne będzie się odnosiło do tworów, które są tworzone w chwili uruchomienia kodu (tzn. już w momencie uruchomienia programu, a zanim zostanie wykonane jakiekolwiek polecenie te struktury otrzymują swój przydział w pamięci). 2.1.1 Tablice Tablice są najprostszym sposobem łączenia wielu danych. Pozwalają one połączyć jednakowe obiekty w jedną większą strukturę. Cechą naturalną tablicy jest jej długość i rodzaj zawieranych danych. 2.1.2 Rekordy Rekordy są sposobem na generowanie bardziej złożonych typów danych poprzez łączenie określonej liczby elementów prostszych. Najlepszym przykładem jest data, która jest typem złożonym z liczby odpowiadającej dniu, liczby odpowiadającej miesiącowi oraz liczby roku. Cechą szczególną rekordów jest to, że potrafią łączyć składowe różnych typów w przeciwieństwie do tablic. 12

ROZDZIAŁ 2. ALGORYTMY I STRUKTURY DANYCH 13 2.1.3 Obiekty Obiekty w najprostszym ujęciu są pewnym uogólnieniem rekordów, ale że jest to temat obszerny jeszcze zdąży być omówiony. 2.2 Struktury dynamiczne 2.2.1 Stos Często fachowo pieszczotliwie nazywany LIFO (Last In - First Out). Informatycy żartują, że ta struktura danych została stworzona przez Jezusa ( Pierwsi będą ostatnimi, a ostatni pierwszymi ). Jako struktura ma następującą postać. By utworzyć stos potrzebne są dwa twory. Twór o nazwie stos, oraz twory o nazwie elementy stosu. Element stosu jest swego rodzaju otoczką, która otoczy element odkładany na stos. Ponadto każdy element stosu wskazuje element, który znajduje się na stosie poniżej jego, lub jeśli jest ostatni nie pokazywać niczego. Twór stosu jest zarządcą struktury. Pokazuje zawsze wierzchołek stosu oraz wie jak zrealizować dwie główne operacje stosu. PUSH - odłożenie kolejnego elementu na stos. POP - zdjęcie elementu z wierzchołka stosu. Operacjami, które są bardzo trudnymi do wykonania na stosie to usuwanie z wnętrza stosu oraz np. sortowanie. 2.2.2 Kolejka Kolejka jest z kolei pieszczotliwie nazywana FIFO (First In - First Out). Podobnie jak stos, struktura ta składa się z elementów kolejki i samej kolejki. Elementy kolejki pokazują element je poprzedzający ( ta pani stała przede tu przede mną ), zaś sama kolejka musi tym razem pamiętać i swój początek i swój koniec. Operacje identyczne jak dla stosu. 2.2.3 Lista Zwana też niekiedy listą dwukierunkową. W tej strukturze zmianie ulegają elementy listy, które pamiętają i poprzednika i następnika. Użycie takiej ulepszonej kolejki pozwala łatwo z niej usuwać elementy. 2.2.4 Drzewo binarne Z goła odmiennymi strukturami są drzewa. Drzewa są strukturami o zupełnie odmiennym podejściu niż listy, kolejki i stosy. Drzewa składają się z tworu drzewa oraz tzw. węzłów (ang. node) (którym odpowiadają rozgałęzienia). Drzewo pamięta swoją podstawę tzw. korzeń (ang. root). Węzły są otoczką dla danych. Dodatkową informacją jest położenie kolejnych węzłów. Jeden węzeł może wskazywać wiele innych węzłów (maksymalnie pewną określoną ilość - najczęściej dwa). Jeśli węzeł nie wskazuje żadnych kolejnych węzłów to nazywamy go liściem (ang. leaf). Drzewa, a w szczególności drzewa binarne są najlepszą strukturą do przechowywania uporządkowanych struktur danych. W takim układzie

ROZDZIAŁ 2. ALGORYTMY I STRUKTURY DANYCH 14 wyszukiwanie, usuwanie, dołączanie i wiele innych operacji może być wykonanych rekordowo szybko. 2.2.5 Graf Tak po prawdzie wszystkie struktury danych są z punktu widzenia matematyki pewnymi grafami. Dla ogólnych grafów najczęściej tworzy się tablicę z posiadanych danych oraz inną strukturę do oznaczenia krawędzi i ich ewentualnych wag. 2.3 Porównanie typów struktur Struktury dynamiczne są najczęściej stosowanymi w programowaniu. Struktury statyczne co prawda wśród swoich zalet mają prostotę oraz maksymalną szybkość przy tworzeniu i dostępie, jednakże mają znacznie poważniejsze wady. Absorbują i nigdy nie zwalniają dużej ilości miejsca, jak również że przy ich tworzeniu może nie istnieć dostatecznie długa przestrzeń pamięci by ją utworzyć.

Rozdział 3 Wstęp - instalacja zintegrowanego środowiska programistycznego dla Javy W części pierwszej skupimy się na przygotowaniu komputera jako stanowiska pracy programisty. W przypadku programowania w technologii Java (nazywamy to technologia, gdyż myślimy łącznie o języku, narzędziach, jak i sposobie myślenia), może być to wykonane niemalże na każdym ciut bardziej zaawansowanym urządzeniu elektronicznym, telefon, tablet, netbook aż w końcu nawet i największych komputerach. W odróżnieniu od poprzedzających ją technologii, raz napisany program będzie mógł działać na każdym urządzeniu. Technologie takie jak C/C++, Ada95, Pascal czy inne generowały kod maszynowy, który pozwalał programom działać na urządzeniach o podobnej specyfikacji. Często aby zaadaptować ten sam program potrzebne były poprawki jego kodu. W przypadku Javy, ten problem został niemal doszczętnie wyeliminowany. 3.1 Czym jest wirtualna maszyna Javy oraz najważniejsze składowe technologii Podstawowym problemem kompilacji 1 programów, jest to że w pewien sposób umieszcza ona w kodzie maszynowym 2 konstrukcję komputera na którym została przeprowadzona. W przypadku Javy rozwiązano to poprzez specjalny program instalowany w urządzeniu, który udaje przed programem napisanym w Javie, cały komputer. Sprawia to że cały kod można łatwo przenosić pomiędzy urządzeniami. Tym programem jest wirtualna maszyna Javy (JVM - Java Virtual Machine). Jej instalacja jest niezbędna do tego by na danym urządzeniu dział jakikolwiek program w tej technologii. Wirtualna maszyna jest obecnie jedynie częścią większej całości. Do tego by uruchamiały się programy potrzeba również wielu standardowych bibliotek. Wirtualna maszyna razem wspólnie z tymi bibliotekami jest udostępniania jako 1 proces zamiany kodu programu podanego przez programistę na jego binarny odpowiednik dla procesora 2 kod po kompilacji, kod binarny rozumiany przez komputer 15

ROZDZIAŁ 3. WSTĘP - INSTALACJA ZINTEGROWANEGO ŚRODOWISKA PROGRAMISTYCZNEGO środowisko uruchomieniowe java (JRE - Java Runtime Environment). W przypadku programistów potrzeba jeszcze znacznie więcej bibliotek, podobnie jak dużo dokumentacji i innych narzędzi. Wszystko wspólnie można pobrać jako Zestaw Narzędzi Programisty Java (JDK - Java Development Kit). JDK występują w różnych wersjach. Zalecane jest zawsze używanie najnowszych, jako najbezpieczniejszych i najaktualniejszych. JDK powinna być dołączona do systemu przy instalacji IDE (o którym zaraz). Jeśli nie została, należy ją doinstalować ręcznie. 3.2 Czym jest IDE O tym jak dużo jest czasami pracy aby z kodu napisanego przez programistę zrobić kod rozumiany przez komputer, wystarczy zapytać starszych programistów. Tymczasem prawda jest taka, że ten proces jest dość prosty, a jedynie bardzo męczący w prowadzeniu. Zgodniej z zasadą co nudne należy automatyzować wkrótce powstały narzędzia, które miały przejąć od programisty zadanie pilnowanie tego. Programy te są rozwijane po dziś dzień i większość programistów nie wyobraża sobie pracy bez nich. Główne aspekty z procesu tworzenia kodu przez nie monitorowane to ˆ Proces kompilacji kodu ˆ Weryfikacja składni kodu ˆ Zarządzanie bibliotekami ˆ Zarządzenia konfiguracją ˆ Nadzór wersji kodu ˆ Zarządzanie testami ˆ Pobieranie brakujących bibliotek ˆ Generowanie prostych i monotonnych fragmentów kodu ˆ Przeszukiwanie kodu źródłowego ˆ Reorganizacja nazw w kodzie (tzw. refaktoring) ˆ Podpowiadanie i kolorowanie składni ˆ Generowanie i przedstawianie dokumentacji Wszystkie narzędzia o których tu wspominam są nazywane IDE czyli zintegrowanymi środowiskami programistycznymi (ang. Integrated Development Environment). W przypadku języka Java na rynku dominują dwa najsilniejsze programy (oba darmowe). Jednym z nich jest Eclipse, stanowiący wolne oprogramowanie będące własnością Fundacji Eclipse. Drugim programem jest Netbeans, darmowa aplikacja stanowiąca własność amerykańskiego giganta na rynku oprogramowania czyli firmy Oracle (firmy, który wykupiła firmę Sun - twórców języka Java). Zasadniczo osoby, które są z zawodu programistami i tworzą duże projekty, wybierają za swoją platformę Eclipse, jako prościej konfigurowalny do

ROZDZIAŁ 3. WSTĘP - INSTALACJA ZINTEGROWANEGO ŚRODOWISKA PROGRAMISTYCZNEGO ich potrzeb. Osoby o mniejszych potrzebach programowania z reguły wybierają Netbeans, z uwagi na dużą ilość wbudowanych narzędzi. O ile kod java może być bezproblemowo przenoszony pomiędzy platformami Eclipse i Netbeans, o tyle konfiguracja projektów i algorytmu budowania różnią się na tyle, że z reguły nie udaje się przenieść projektu pomiędzy tymi platformami. Oczywiści skompilowane kody przenoszą się bez problemu. Z uwagi na początkujący charakter czytelnika, w dalszej części zakładamy, że czytelnik posiada na swoim komputerze zainstalowany zarówno zestaw narzędzi Java czyli jdk jak i Netbeans IDE. W takim układzie możemy spokojnie przejść do nauki podstaw tego prostego języka jakim jest Java.

Rozdział 4 Podstawy języka Java Aby nie programować na kartce papieru zacznijmy od razu od utworzenia nowego projektu. Wybierzmy z menu plik okna Netbeansa, nowy projekt typu Java Application i nazywamy go HelloWorld. Automatycznie zostanie nam wygenerowana klasa HelloWorld oraz w niej funkcja main(string[]). Aby nasz projekt coś napisał musimy wywołać metodę println() z klasy System dla jej elementu out tj. System.out.println("Hello World!!"); // tak wypisujemy tekst na ekranie Co musimy umieścić w kodzie funkcji main(string[]): public static void main(string[] args) { System.out.println("Hello World!!"); // tak wypisujemy tekst na ekranie Aby mieć lepsze zrozumienie co tak naprawdę się stało możemy zrobić to wolniej public static void main(string[] args) { String hello = "Hello World!!"; // tak tworzymy zmienną o typie tekstu System.out.println(hello); // tak wypisujemy zmienną tekstową // a to oczywiście był znak komentarza Program utworzył nową zmienną o nazwie hello i wstawił tam ciąg znaków Hello World!!, a następnie wypisał stan tej zmiennej. 4.1 Zmienne w Javie. Pierwsze starcie Programowanie jest niczym innym jak opracowywaniem pewnego zbioru danych. Dane te muszą znaleźć się najpierw w pamięci komputera. To co wyróżniło Javę w porównaniu do jej poprzedników to sposób w jaki można modelować bardzo skomplikowane dane. Tak czy inaczej musimy poznać podstawowe typu danych aby umieć z nimi pracować. W Javie typy danych można podzielić na podstawowe 4 grupy 1. Prymitywne 2. Wyliczeniowe 18

ROZDZIAŁ 4. PODSTAWY JĘZYKA JAVA 19 3. Tablicowe 4. Klasy Zacznijmy od najprostszych 4.1.1 Typy prymitywne Typu prymitywne są podwalinami wszystkich pozostałych typów danych. Pozwalają one gromadzić najprostsze informacje w pamięci komputera. Jest 8 typów prymitywnych. Pierwsze 4 czyli byte, short, int oraz long są typami które służą do przechowywania w pamięci komputera liczb całkowitych. Dwa kolejne czyli float i double służą do przechowywania w nich liczb zmiennoprzecinkowych czyli przybliżeń liczb rzeczywistych. Typ do składowania danej zmiennej wybiera programista i musi kierować się wartościami liczba jakie będą tam składane. Najczęściej wybiera się typy int oraz double. Ostatnie dwa typy to char, czyli znak alfanumeryczny oraz boolean czyli typ prawda-fałsz. Poniżej przykład zadeklarowania (zgłoszenia do użycia) każdego z powyżej wymienionych typów. /* typy całkowite */ byte calkowity1bajt; short calkowity2bajty; int calkowity4bajty; long calkowiry8bajtow; /* typy zmiennoprzecinkowe */ float zmiennoprzecinkowa4bajty; double zmiennoprzecinkowa8bajtow; /* inne zmienne */ char znak; boolean logiczny; W przypadku Javy, wszystkie nieprzypisane wartości prymitywne są od razu inicjowane pewną wartością. Dla liczb są to zera, fałsz dla typu logicznego oraz znak pusty dla typu znakowego. 4.1.2 Typy wyliczeniowe Typ wyliczeniowy tworzy się poprzez stworzenie ciągu określeń, które wypełniają jego sens. Np. enum PoraRoku { WIOSNA, LATO, JESIEN, ZIMA; Przyjmuje się, że wartości stałe nazywa się pisząc wszystko dużymi literami. Odróżnia to je od tworzonych zmiennych, do nazwania których używa się mały liter. Jeśli nazwa zmiennej ma łączyć w sobie kilka słów, przyjmuje się że poza pierwszym z nich, wszystkie rozpoczynamy z wielkiej litery. Później dowiemy się, że wszystkie pierwsze litery piszemy z wielkiej litery np. w nazwach klas. Jak używa się typu wyliczeniowego? Bardzo prosto enum PoraRoku { WIOSNA, LATO, JESIEN, ZIMA; /**