PROGRAMUJ APKI Wprowadzenie do programowania SPIS TREŚCI Wprowadzenie do programowania, omówienie języka oraz kompilatora /prof. Marlena Plebańska/ 1. Typy podstawowe i złożone, omówienie typów zmiennych oraz ich zastosowanie /Barbara Halska/ 2. Podstawowe funkcje, zapoznanie z wbudowanymi funkcjami oraz bibliotekami, które je obsługują /Barbara Halska/ 3. Programowanie obiektowe i funkcjonalne, przygotowanie funkcjonalnych aplikacji, analiza złożoności projektu, optymalizacja kodu /Paweł Bensel/ 4. Interakcja z otoczeniem (we/wy, bd), zapisywanie i odczytywanie wyników /Paweł Bensel/ 5. Interfejsy graficzne projektowanie interfejsu graficznego /Paweł Bensel/ 6. Zarządzanie projektem przeprowadzenie projektu przez procesy związane z zarządzaniem /prof. Marlena Plebańska/
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
PROGRAMUJ APKI
Wprowadzenie do programowania
SPIS TREŚCI
Wprowadzenie do programowania, omówienie języka oraz kompilatora /prof.
Marlena Plebańska/
1. Typy podstawowe i złożone, omówienie typów zmiennych oraz ich zastosowanie
/Barbara Halska/
2. Podstawowe funkcje, zapoznanie z wbudowanymi funkcjami oraz bibliotekami, które
je obsługują /Barbara Halska/
3. Programowanie obiektowe i funkcjonalne, przygotowanie funkcjonalnych aplikacji,
analiza złożoności projektu, optymalizacja kodu /Paweł Bensel/
4. Interakcja z otoczeniem (we/wy, bd), zapisywanie i odczytywanie wyników /Paweł
6. Zarządzanie projektem przeprowadzenie projektu przez procesy związane z
zarządzaniem /prof. Marlena Plebańska/
1
WPROWADZENIE
/prof Marlena Plebańska/
Zainteresowanie programowaniem, tworzeniem aplikacji towarzyszy ludziom już do wielu lat.
Eksplozja Internetu, oprogramowania, gier, aplikacji, sprzętu sprawiły że świat zmienił się,
przestał być analogowy, a stał się cyfrowy. Cyfrowy świat przybrał inne oblicze niż jego
poprzednik, a cyfryzacji krok po kroku zaczęła podlegać każda dziedzina naszego życia. Od
początków istnienia ludzkości technologie wiązały się z innowacjami. Już pierwsi ludzie,
czerpiąc z wiedzy przodków, potrafili ulepszać otaczającą ich rzeczywistość, korzystając ze
znanych im „nowych technologii”, począwszy od konstruowania coraz bardziej
zaawansowanych przyrządów życia codziennego, a skończywszy na postępie w rozwoju
zachowań społecznych. Zasada ta nie zmieniła się przez tysiące lat.
W czasach nam współczesnych technologia stała się generatorem zmian, które na nowo
zdefiniowały zwykły dzień współczesnego człowieka. Nowe technologie wspierają dziś
większość naszych codziennych czynności - komputer, smartfon czy tablet towarzyszą
ludziom na każdym kroku. Szczególnie istotne stają się technologie mobilne, które
pozwalają na korzystanie z dobrodziejstw cyfryzacji niezależnie od miejsca czy czasu. To
właśnie za pomocą mobilnych aplikacji codziennie sprawdzamy pogodę, czytamy
informacje, robimy zakupy, dokonujemy przelewów bankowych i rezerwacji hoteli itp.
Mobilne aplikacje wspomagają nas w codziennych czynnościach, usprawniają naszą pracę,
ułatwiają zdobycie wiedzy z wielu dziedzin. Nie dziwi zatem fakt, iż coraz więcej młodych
ludzi interesuje się programowaniem. To ciekawa, przydatna umiejętność, a zawód
programisty często wymieniany jest w czołówce zawodów przyszłości. Programowanie jest
dziedziną informatyki stale rozwijającą się, a programistów wciąż brakuje, klasy
informatyczne w szkołach średnich oraz uczelnie techniczne są oblegane, młodzież chce
programować, widzi w tej umiejętność konkretną wartość do wykorzystania w przyszłości.
Niniejsza publikacja doskonale wpisuje się zatem nie tylko w światowe trendy, ale przede
wszystkim w potrzeby młodych ludzi, którzy zarówno z samej publikacji, jak i z całego
projektu „Akademia 3.0 - apki.org” czerpać mogą wiedzę oraz praktyczne umiejętności z
zakresu programowania.
2
Publikacja składa się z sześciu rozdziałów, w ramach których omówione zostały: typy
zmiennych programistycznych oraz zasady ich zastosowania, podstawowe funkcje oraz
biblioteki programistyczne. Przedstawione zostały również zasady programowania
obiektowego, zasady funkcjonalnego przygotowania aplikacji, analiza złożoności projektu,
zasady optymalizacji kodu oraz zasady interakcji z otoczeniem. W rozdziale piątym
omówione zostały interfejsy graficzne oraz zasady ich projektowania. W ostatnim rozdziale
przedstawiono natomiast najważniejsze zasady zarządzania projektem informatycznym oraz
tworzenia metodycznego zarządzania pierwszym projektem informatycznym.
Publikacja zawiera szereg praktycznych przykładów kodu, odniesień do praktyki
programowania oraz przykładów optymalizacji kodu. Podręcznik jako integralna część
platformy www.apki.org jest ściśle skorelowany z udostępnionymi na niej materiałami
edukacyjnymi w postaci interaktywnych kursów programowania w najpopularniejszych
językach. Uczeń, korzystając z podręcznika, może zdobyć podstawy wiedzy niezbędne do
samodzielnego tworzenia pierwszych aplikacji. Podręcznik ułatwia także zaplanowanie
całego procesu tworzenia własnej aplikacji, a liczne zgromadzone przykłady są inspiracją do
tworzenia własnych autorskich rozwiązań.
Zatem jeśli interesuje Cię programowanie i zastanawiasz się jak stworzyć swoją pierwszą
aplikację, ta publikacja przeznaczona jest właśnie dla Ciebie. Informatyk to projektant
przyszłości. Jeśli zatem chcesz projektować, kreować nowe rozwiązania, ta publikacja jest
właśnie dla Ciebie. To świetny pierwszy krok, żeby zostać architektem przyszłości.
Jak należy pisać kod programu?
Tak jak w życiu w świecie programowania mamy do czynienia z unikalnymi językami.
To samo zdanie możemy zapisać w różnych językach, i chociaż będzie ono inaczej
wyglądać, będzie znaczyć to samo i będzie zrozumiałe dla osób, które znają dany język.
np.
język polski - Dzień dobry
język angielski - Good morning
język francuski - Bonjour
Pisanie Przetwarzanie Wykonanie
3
Kod programu możecie pisać nawet w zwykłym notatniku, ale tak naprawdę w większości wypadków istnieją przeznaczone do tego dedykowane programy, o których więcej dowiedzie się przy omawianiu konkretnych języków w kursie.
Za przetwarzanie kodu również odpowiada konkretny program, który najczęściej tworzy plik wykonywalny. Jedynie języki skryptowe takie jak Java Script do przetwarzania korzystają z przeglądarki internetowej.
Gdy już uzyskamy plik wykonywalny, możemy go po prostu uruchomić.
Pseudokod - a co to takiego?
Nie będzie zbyt odkrywcze, jeśli powiemy Wam, że pseudokod to po prostu coś, co
przypomina kod, ale tak naprawdę nie jest żadnym językiem programowania. Wprawdzie
stosujemy w nim ogólne instrukcje i schematy programowania, jednak nie jest konkretnym
językiem.
Pseudokod jest więc narzędziem, pozwalającym nam rozwiązać jakiś problem, zbudować
pewien zarys, który następnie wykorzystamy, pisząc program w danym języku.
Pseudokod można więc porównać z przepisem na wykonanie ciasta. Mamy podane
wszystkie składniki oraz procedury, jakie musimy wykonać, aby upiec ciasto, nie jest
natomiast ważne to, produktów jakiej firmy użyjemy.
Przykład pseudokodu, który obrazuje procedurę sprawdzania czy zmienna a jest równa
zmiennej b oraz to co ma się zadziać, kiedy warunek jest niespełniony
Przykład
zmienna a = 3
zmienna b = 6
jeżeli (a == b)
zwróć prawda; inaczej
zwróć fałsz;
Powyższy pseudokod jest oczywiście tylko prostym przykładem. Warto jednak pamiętać, że
w bardziej złożonych problemach zawsze może Wam pomóc rozłożenia problemu na
mniejsze kawałki.
4
Zamiast pseudokodu schemat blokowy
Schemat blokowy to graficzny zapis pseudokodu, a więc rozwiązania zadania, który mniej
instrukcjami, ale schematem przedstawia opis oraz kolejność wykonywania instrukcji
Rozdział I: Typy podstawowe i złożone. Omówienie
typów zmiennych oraz ich zastosowanie
/Barbara Halska/
Zacznijmy od początku, a więc od sposobu zapisywania danych. Tak jak Wy macie potrzebę
zapisania jakichś wartości na kartce, w notatniku czy w telefonie, tak samo dzieje się z
danymi w programie. Dane te przypisujemy do zmiennych, które to właśnie służą do
przechowywania wartości.
I.1. Zmienne
Zmienna to miejsce zarezerwowane w pamięci, w którym zapisana jest jakaś dana, z której
korzysta napisany program. Można przetwarzać tą zmienną, przechowywać w niej dane
tymczasowe, wykonywać na niej funkcje.
5
Pamięć komputera możemy porównać z koszykiem na zakupy, do którego wkładamy
produkty. Każdy produkt ma nazwę oraz kolor, smak czy rozmiar. Tak więc w naszym
koszyku możemy znaleźć nabiał, który raz jest mlekiem, raz jogurtem, a raz serkiem
homogenizowanym, ale to zawsze będzie nabiał.
Przykład: owoce = "jabłko" //ta instrukcja deklaruje zmienną o nazwie owoce i zapisuje w niej
łańcuch znaków
nabiał = "ser"
pieczywo = "bułka"
I.1.1 Typy zmiennych
Każda zmienna może przechowywać określony rodzaj informacji. Informacją może być
liczba (dowolnego rodzaju – naturalna, całkowita, zmiennoprzecinkowa, stałoprzecinkowa),
znaki. Rodzaj informacji zwany jest typem.
Rodzaje zmiennych:
● całkowite (int) - przechowują liczby całkowite np.: 1,10,1000;
● zmiennoprzecinkowe (float) - przechowuje liczby ułamkowe np.: 1,00001;
● zmiennoprzecinkowe (double) - przechowuje liczby ułamkowe o podwojonej precyzji
● logiczne (bool) - przechowują wartość true lub false;
Kompilator to program, który rozumie instrukcje napisane w danym języku. Kompilacja
przekształca kod źródłowy i powoduje wygenerowanie jego wydajnej, maszynowej
reprezentacji, która zazwyczaj jest zoptymalizowana pod kątem wydajności działania. Wśród
języków programowania są też języki skryptowe, które z natury są językami
interpretowanymi, co oznacza, że przeglądarka może wykonać każdą instrukcję w kodzie.
I.1.3 Instrukcja przypisania
Deklarując zmienną możemy od razu przypisać jej wartości, ale możemy też to zrobić
później. Do przypisania konkretnej wartości wykorzystujemy operatory przypisania np.:
znak =
Poniżej przedstawiamy kilka przykładów deklaracji zmiennych:
Smak_lodow = „truskawkowe” //ta instrukcja deklaruje zmienną o nazwie smak_lodow
i zapisuje w niej łańcuch znaków w tym przypadku „truskawkowe”
Ile_galek = 2 //z kolei ta instrukcja zapisuje wartość liczbową.
Na pewno zauważyliście różnicę przy zapisie w zależności od tego czy wprowadzamy
wartość liczbową, czy ciąg znaków. W drugim przypadku stosujemy cudzysłów. Tworząc
zmienną nie musimy od razu przypisać jej wartości początkowej, zawsze możemy to zrobić
później.
7
Może rysunek pudełek, które nazywamy tak jak deklarowana zmienna i do tych pudełek
będą wpadały wartości tych zmiennych
* Zmienna dostaje jakieś miejsce w pamięci a co za tym idzie, wartości, które tam już kiedyś
nasz system operacyjny zapisał, więc dla bezpieczeństwa można ją wyzerować np. nr = 0
I.2. Tablice
Ostatnio padła wygrana w totolotka w wysokości 35 milionów, każdy chciałby taką nagrodę
wygrać, udało się to jednej osobie. Szczęśliwiec wytypował 6 cyfr z przedziału od 1 do 60.
Te wylosowane cyfry możemy zapisać: 1,14,23,31,33,35. Gdybyśmy chcieli zapisać je w
programie, musielibyśmy użyć 6 zmiennych np. lotto1 = 1, lotto2 = 14 itd. Do tego typu
zapisu przy użyciu jednej zmiennej stosujemy tablice. Tablica (ang. array) jest typem
danych, który może przechowywać wiele wartości. W pamięci komputera tablica zajmuje
ciągły obszar pamięci, a jej elementy, zwane komórkami, są umieszczone w tym obszarze
jeden obok drugiego.
Wizualizacja tablicy
I.2.1 Tworzenie prostej tablicy
Skoro tablica również jest zmienną, to trzeba nadać jej nazwę np. lotto w której będzie
przechowywała wyniki losowania.
lotto = [ 1,14,23,31,33,35]; //deklaracja tablicy lotto, która przechowuje wyniki
losowania
Wszystkie wartości możemy potraktować jako jedną całość, możemy też odwoływać się do
poszczególnych elementów tej tablicy.
pisz(lotto[0]); //Wyświetlony zostanie pierwszy element tablicy czyli liczba 1
Zanim przejdziemy dalej, musimy się upewnić, czy rozumiecie czym są tablice. Jak już
wcześniej było to wytłumaczone, tablic używamy do przechowywania wielu wartości w
odróżnieniu od zmiennych, które pozwalają zapisywać tylko jedną wartość, taką jak liczba
czy słowo. Najczęściej tablice, będziemy stosować do grupowania podobnych informacji,
takich jak wyniki meczów czy oceny. Zawsze wtedy, gdy będziemy chcieli zgrupować jakiś
zbiór danych możemy utworzyć tablicę i w niej je zapisać. Gdy będzie to potrzebne, możemy
odwołać się do całej tablicy lub do konkretnej komórki w celu skorzystania z danych.
8
PRZYKŁAD CHCEMY STWORZYĆ TABLICĘ, KTÓRA BĘDZIE PRZECHOWYWAĆ KOLORY COLOR = ["NIEBIESKI", "ZIELONY", "CZERWONY", "ŻÓŁTY"]; *Czy zwróciliście uwagę, że poszczególne elementy tablicy są oddzielone przecinkami?
Każdy element jest umieszczony w osobnej komórce, która ma swój indeks. Indeksowanie
zaczyna się od zera.
Każdy element jest umieszczony w osobnej komórce, która ma swój indeks. Numerowanie
indeksów zaczyna się od zera. Jeżeli tablica tak jak w przypadku naszej lotto jest 6
elementowa to ostatni indeks jest mniejszy o jeden a więc ma wartość 5.
PRZYKŁAD LOTTO = [ 1,14,23,31,33,35]; //DEKLARACJA TABLICY PISZ(LOTTO[5]); //WYŚWIETLENIE SZÓSTEGO ELEMENTU TABLICY
Wizualizacja tablicy:
1 14 23 31 33 35
I.2.2 Ciąg znaków jako tablica
Zmienne typu string mają specyficzną budowę. Mogą zostać także zapisane tak naprawdę
jak ciąg pojedynczych znaków.
name = ["a","p","k","i",".","o","r","g"] lub też name = "apki.org"
Jeżeli wcześniej zmienna name została zadeklarowana jako tablica to kompilator
samodzielnie podzieli string na pojedyncze znaki.
Wizualizacja tablicy
a p k i . o r g
I.2.3 Tablica asocjacyjna
Są to tablice, gdzie indeksem może być znak lub string.
Przykład tablicy, która zawiera numery pokoi, a w rekordach zapisane są nazwiska osób,
które zarezerwowały pokój.
PRZYKŁAD HOTEL[„POKÓJ_1]” = „MARCIN” HOTEL[„POKÓJ_2]” = „KASIA” HOTEL[„POKÓJ_5]” = „BASIA”
9
I.2.4 Tablice wielowymiarowe
Możemy też tworzyć tablice wielowymiarowe - czyli tablice w tablicach. Do czego może się
to przydać? Wykorzystajmy poprzedni przykład z hotelem, tworząc tablicę, której kolejna
kolumna będzie przechowywać informację o tym, czy osoba wykupiła śniadanie.
PRZYKŁAD HOTEL[1]=[„MARCIN”, „ŚNIADANIE”] HOTEL[2]=[„KASIA”, „BEZ ŚNIADANIA”] HOTEL[3]=[„BASIA”, „ŚNIADANIE”]
I.3. Podstawowe operacje na danych
Poradziliśmy sobie ze zmiennymi i przyszedł czas no wykonywanie operacji na danych, a
więc przetwarzanie ich. Do tego wykorzystujemy operatory np. takie jak dodawanie czy
porównywanie dwóch wartości.
I.3.1 Podstawowe operacje matematyczne
Dodawanie
Podstawowymi operacjami są głównie dodawanie, odejmowanie, mnożenie, dzielenie.
Można w bardzo prosty sposób te operacje wykonywać, używając podstawowych dla
każdego języka programowania znaków.
liczba = 2 + 7 //po tym działaniu w stworzonej zmiennej liczba będzie przechowywana
wartość 9
W przeciwieństwie do matematyki, w programowaniu można przeprowadzać operacje, które
w matematyce nie miałyby miejsca.
Kod:
liczba = liczba + 1 //po tej instrukcji w zmiennej zapisana zostanie wartość 10 (jako, że
poprzednią wartością zmiennej liczba jest liczba 9
nie jest operacją matematyczną, a operacją przypisania do zmiennej "liczba" wartości o
jeden większej niż wartość poprzednia.
Zapis można skrócić poprzez istnienie dodatkowego operatora dodawania:
liczba += 1
Zadaniem tego operatora jest dodanie do zmiennej dowolnej wartości.
Analogicznie można do jednej zmiennej zapisywać przetworzoną drugą liczbę, np.:
10
Przykład
liczba1 = 5
liczba2 = liczba1 + 20
lub
liczba1 = 5
liczba2=0
liczba2+=liczba1
liczba2+=5 //Wynikiem ostatniej operacji jest zapisana w zmiennej "liczba2" wartość
25.
Odejmowanie
Drugim podstawowym znakiem jest znak minus, którego używa się w sposób analogiczny
do poprzedniego:
Przykład
liczba1 = 5
liczba2 = liczba1 – 20 //wynikiem będzie wartość -15.
Istnieje też możliwość wykorzystania operatora "-=":
liczba1 = 5
liczba2 += liczba1 //wynikiem będzie wartość 5.
liczba2 -= 20 //wynikiem będzie wartość -15.
Mnożenie
Operacja mnożenia jest reprezentowana za pomocą znaku "*". W bardzo prosty sposób
można wyliczyć kwadrat danego elementu przy pomocy poniższej operacji:
Przykład
liczba = 5
liczba = liczba * liczba //w zmiennej "liczba" zostanie zapisany wynik 25
11
Dzielenie
Operacja dzielenia reprezentowana jest za pomocą znaku "/". W zależności od typu danych
w jakim będzie zapisywany wynik działania taka będzie zwracana wartość.
Przykład
liczba = 5/10 //w przypadku gdy zmienna "liczba" jest całkowitą, wynikiem działania
jest 0
liczba = 5.0/10.0 //w przypadku gdy zmienna "liczba" jest całkowitą, wynikiem
działania jest 0.5
Kolejny operator związany z dzieleniem, jest zwracający resztę tej operacji. Znakiem
używanym w tym wypadku jest znak "%"
liczba = 2%5 //wynikiem jest 4
I.3.2 Operatory porównania
Operatory porównania służą przede wszystkim do porównania liczby:
Operator Opis
> większe od
>= większe lub równe
< mniejsze
<= mniejsze lub równe
== równe
!= różne
Wynikiem operacji porównania jest prawda albo fałsz, czyli warunek jest spełniony albo nie.
Operatorami logicznymi nazywamy wszystkie spójniki klasycznego rachunku zdań.
Najczęstszymi są to i, lub oraz negacja. Będziesz ich używał/-a w instrukcjach
warunkowych. Zwracają wartość true lub false.
12
Iloczyn logiczny
Znak operatora logicznego to "&&". Wszystkie wartości muszą być prawdziwe, aby została
zwrócona wartość true(prawda).
wejście wejście wyjście
0 0 0
0 1 0
1 0 0
1 1 1
Suma logiczna
Znak sumy logicznej to "||". Co najmniej jedna z wartości musi być prawdziwa, aby została
zwrócona prawda.
wejście wejście wyjście
0 0 0
0 1 1
1 0 1
1 1 1
Wyrażeń logicznych można używać do podejmowania decyzji przy użyciu instrukcji
warunkowych if. Instrukcja ta pozwala wykonywać umieszczony w niej kod, jedynie wtedy
gdy warunek jest spełniony, a więc osiąga wartość true.
I.3.3 Instrukcja warunkowa
Instrukcje warunkowe to konstrukcje, które służą do sprawdzania, czy dany warunek został
spełniony. Jest to praktycznie podstawowy element języka programowania. Dzięki
instrukcjom warunkowym możemy odpowiednio zareagować na istniejące sytuacje i
sterować pracą programu. Przykładowo: użytkownik musi wpisać swoje imię na samym
początku działania programu. Może się jednak zdarzyć, że użytkownik specjalnie lub
omyłkowo wpisze liczbę. Jeżeli programista nie uwzględni tej możliwości i nie wprowadzi
13
Ciało instrukcji
if (warunek)
instrukcja jeżeli warunek jest spełniony
odpowiednich zabezpieczeń, może się to skończyć źle dla programu lub (w przypadku
większych aplikacji) spowodować błędy związane z bezpieczeństwem systemu.
Konstrukcja warunku
Warunek składa się z dwóch zasadniczych
części – słowa kluczowego if i głównego
warunku. Instrukcja ta pozwala wykonać
umieszczony w niej blok kodu, wyłącznie w
przypadku, gdy warunek przyjmie wartość true.
Składnia wygląda w następujący sposób:
Podstawowym warunkiem jest warunek porównujący, czy wartość dwóch zmiennych jest
identyczna
Przykład
if (a==b)
pisz”a = b”
Należy tutaj zwrócić uwagę, że w instrukcji warunkowej korzystamy z operatorów
porównania.
Każdy warunek powinien zwracać wartość true lub false.
W programowaniu używa się czasem także operatora negacji – który zamienia wartość
logiczną na przeciwną, np.
Przykład
!(a>b) //sprawdź, czy nieprawdą jest, że a jest większe od b
//operacja ta jest równoważna z !(a<=b)
Bardzo ważne jest też łączenie warunków ze sobą – służą do tego operatory logiczne.
14
if (warunek)
instrukcja, jeżeli warunek
jest spełniony
else
instrukcja, jeżeli warunek
nie jest spełniony
if (warunek)
instrukcja, jeżeli pierwszy warunek jest spełniony
else if(warunek)
instrukcja, jeżeli drugi warunek jest
spełniony
else
instrukcja, jeżeli żaden z dwóch
warunków nie został spełniony
A co jeżeli warunek nie został spełniony?
Możemy również wykonać instrukcję, kiedy
warunek nie jest spełniony - do tego służy
„else".
Warunki można też
zagnieżdżać tzn, jeżeli
instrukcja “else” nie
wystarczy, a istnieje
potrzeba sprawdzenia
kolejnego warunku, jeżeli
pierwszy nie został spełniony. Możemy połączyć dowolnie wiele instrukcji if/else. Za pomocą
else if można dodawać dowolnie wiele warunków, przy czym każdy będzie mieć własny blok
kodu, który będzie wykonany, jeżeli warunek zostanie spełniony.
Przykład
Sprawdź czy podana przez użytkownika liczba jest dodatnia, ujemna czy zero.
Założenie wprowadzane liczby są całkowite
liczba = 3
if ( liczba > 0 )
pisz("Liczba jest dodatnia") //spełniony warunek - zostanie wyświetlony komunikat
else if ( liczba < 0 )
pisz ("Liczba jest ujemna ") //nie spełniony warunek - nie zostanie wyświetlony
komunikat else if ( liczba == 0 )
pisz ("Liczba jest dodatnia") //nie spełniony warunek - nie zostanie wyświetlony
komunikat
I.4. Optymalizacja kodu
Projektując kod, zawsze staraj się zoptymalizować go tak, aby był jak najmniej narażony na
błędy oraz nie zawierał niepotrzebnych instrukcji i tak przykład powyższy zostanie
zoptymalizowany.
15
Przykład
liczba = 3
if ( liczba > 0 )
pisz("Liczba jest dodatnia") //spełniony warunek zostanie wyświetlony komunikat
else if ( liczba < 0 )
pisz ("Liczba jest ujemna ") //nie spełniony warunek nie zostanie wyświetlony
komunikat
else
pisz ("Liczba jest dodatnia") //wyświetli się tylko wtedy kiedy powyższe warunki nie
zostaną spełnione
*Jeżeli zmienna jest jest typu logicznego to nie musi sprawdzać czy jest true, wystarczy ją
tylko umieścić w warunku
Przykład
sunny_day = true
if(sunny_day)
pisz(“Idziemy na spacer”)
else
pisze(“Zostajemy w domu”)
I.5. Konstrukcje pętli
Jest wiele czynności, które wykonujemy więcej niż jeden raz, to może być pojedyncza
instrukcja lub zbiór np. Wstajemy rano, myjemy zęby.
16
Składnia jest
następująca:
while (warunek) instrukcja do
wykonania
Oczywiście, także w kodzie często musimy wykonywać czynności więcej niż jeden raz i
właśnie do tego możemy wykorzystać pętle.
Wcześniej zostały już omówione wyrażenia, które zwracają wartość logiczna np a>0.
Właśnie takie wyrażenia, mają duże znaczenie w działaniu pętli.
Pętla to chyba najważniejszy składnik programowania w dowolnym języku. Umożliwia
odciążenie programisty od decydowania, ile razy dana operacja ma się wykonać – komputer
sam określa ile razy wykonuje się dana operacja.
I.5.1 Pętla while
Działa nieco podobnie do instrukcji warunkowej, z tą
różnicą, że wykonuje kod nie jednokrotnie, a wielokrotnie.
Przykład
Tworzymy maszynę losującą liczby z dużego LOTTO.
Jak wiemy trzeba ich wylosować aż 6 a więc będzie
powtarzalność działania
Lotto = 1
while (lotto < 7) lub (lott<=6) // w obu przypadkach pętla wykona się 6 razy
{
Losowanie liczby lotto;
Lotto = lotto + 1;
}
*instrukcja while rozpoczyna się od słowa kluczowego while
*petla while używa wyrażenia logicznego, w skrócie zwanego – warunkiem
*jeżeli warunek jest spełniony, czyli przyjmuje wartość true, cała zawartość bloku kodu
zostanie wykonana
*co to takiego blok kodu? Jest to zbiór instrukcji, które w naszym przykładzie zostały zawarte
w nawiasach klamrowych
*jeżeli warunek będzie spełniony, po wykonaniu bloku kodu, wracamy na początek pętli i
realizujemy go ponownie. Jeżeli natomiast warunek będzie false to pętla zostanie
zakończona i nie wykona się instrukcja.
Na początku programu tworzona jest zmienna lotto, która przyjmuje wartość 1. Następnie
dodano do kodu pętlę, która sprawdza, jaka jest wartość ww. zmiennej. Jeżeli zmienna lotto
17
do
instrukcja do
wykonania
while( warunek )
for ( warunek ) instrukcja do
wykonania
jest mniejsza od 7 to następuje losowanie liczby oraz zwiększenie wartości zmiennej lotto.
Zmienna stanu jest modyfikowana tylko i wyłącznie w przypadku, gdy zostało wpisane
poprawne hasło. Po modyfikacji wartości zmiennej stanu na True, program przechodzi do
końca pętli i kończy jej działanie – a także programu – dalej nie ma instrukcji.
Proponuję wprowadzić wizualizację graficzną działania pętli - ok
I.5.2 Pętla do while
Ta pętla różni się od poprzedniej przede wszystkim tym, że zostanie przynajmniej raz
wykonana nawet, jeżeli nie zostanie spełniony warunek.
W przypadku tych dwóch powyższych pętli nie wiemy ile
razy zostaną wykonane - jest to uzależnione jedynie od
warunku, który został przez Was określony.
Przykład
Lotto = 6
do
{
Losowanie liczby lotto;
Lotto = lotto + 1;
} while (lotto < 7) lub (lott<=6) // w obu przypadkach pętla wykona się 6 razy
I.5.3 Pętla for
Ta pętla charakteryzuje się tym, że możemy przy jej deklaracji
ustalić, ile razy zostanie wykonana i najczęściej stosowana jest
przy operacjach na tablicach takich jak wypełnianie tablic,
wyświetlanie oraz dokonywanie operacji na tablicach.
Przykład
Maszyna do losowanie liczb lotto tym razem przy wykorzystaniu pętli for
for( lotto=1; lotto<=6; lotto=lotto+1)
18
Losowanie liczby lotto.
Rozdział II Podstawowe funkcje, zapoznanie z
wbudowanymi funkcjami, bibliotekami, które je obsługują /Barbara Halska/
Podobnie jak biblioteka szkolna zawiera książki o różnej tematyce, tak biblioteki w językach
programowania mogą zawierać różne funkcje, z których możemy korzystać w naszym
programie. Korzystanie z bibliotek pozwoli Wam na rozbudowanie programu o dodatkowe
możliwości, a przy okazji zwolni z tworzenia własnego rozwiązania. Po co zatem wyważać
otwarte drzwi?
Już zdobyliście nieco informacji programistycznych, więc nadszedł czas na użycie
supermocy, czyli zapoznanie się z funkcjami. Funkcje dają możliwość wykorzystanie w
ramach niej kodu we wszelkich możliwych okolicznościach, a więc wielokrotnie.
II.1 Biblioteki Każdy język posiada biblioteki, po załączeniu których możemy korzystać z funkcji, procedur
oraz instrukcji.
Biblioteka zawierająca funkcje wejścia/wyjścia
Zawiera przede wszystkim funkcje, które pozwalają przyjmować dane wejściowe
użytkownika oraz wyświetlać je z powrotem. Dzięki temu można np. odczytać co jest
wpisywane, korzystając z klawiatury, jak porusza się myszka. Ta biblioteka obsługuje też
monitor, a więc instrukcje związane z wyświetlaniem na ekranie.
Biblioteka zawierająca funkcje matematyczne
Biblioteka matematyczna posiada funkcje, które umożliwiają różne bardziej skomplikowane
obliczeniowo działania. Przykładem takiej funkcji jest funkcja pierwiastkowania. Kolejne
funkcje przydatne to np. random, która umożliwia losowanie liczb ze zbioru.
Przeprowadzimy analizę kodu:
19
Tworzymy funkcję, która będzie obliczać średnią ocen, a następnie informować o tym, czy
Programowanie polega na zapisie rozwiązania określonego problemu w języku zrozumiałym
dla komputera. Rozwiązywanym zadaniem może być proste sumowanie kolejnych liczb, ale
może ono dotyczyć również skomplikowanych algorytmów obliczeniowych czy
przetwarzających dane użytkowników.
Programowanie pozwala na przetwarzanie danych w określony przez programistę sposób –
może ono dotyczyć zarówno wyświetlania ich na ekranie, formatowania wydruku czy
przeprowadzenia obliczeń i zapisywania danych do bazy danych w celu ich późniejszego
wykorzystania.
Wybór sposobu programowania zależny jest od rozwiązywanych problemów. Do prostych,
niepowtarzalnych zadań można wykorzystać proste programowanie przy użyciu funkcji;
bardziej złożone zadania dotyczące przetwarzania danych najczęściej wykorzystują
programowanie obiektowe, które dzięki swoim cechom takim jak dziedziczenie czy
polimorfizm pozwalają na szybsze i wygodniejsze tworzenie aplikacji.
III.1. Programowanie strukturalne
Programowanie strukturalne zakłada tworzenie programów jako zestawu funkcji, których
kolejność wykonania kontrolowana jest poprzez instrukcje warunkowe oraz pętle. Funkcje te
22
definiowane są przez programistów w celu zwrócenia określonego wyniku działania na
parametrach wejściowych lub wykonania pewnego działania.
Programowanie strukturalne w przeciwieństwie do programowania obiektowego trudniej
odwzorowuje rzeczywistość, gdyż bardziej koncentruje się na algorytmach przetwarzania
danych, a nie na strukturach i ich metodach.
III.2. Programowanie obiektowe
Najbardziej rozpowszechnionym paradygmatem (wzorcem) programowania jest
programowanie obiektowe, gdzie wykonywany program składa się z obiektów
komunikujących się między sobą w przeciwieństwie do programowania strukturalnego gdzie
program składa się z sekwencyjnie wykonywanych funkcji.
Programowanie obiektowe pozwala na lepsze odwzorowanie rzeczywistości w języku
programowania, pozwala na lepszą organizację kodu oraz jego wielokrotne wykorzystanie,
dzięki czemu oprogramowanie powstaje szybciej, a co za tym idzie kosztuje mniej.
Każdy obiekt w programowaniu podobnie jak w rzeczywistości posiada pewne
cechy(właściwości), które go charakteryzują oraz zachowania(metody), które służą do jego
przetwarzania, np.
Obiektem może być kwadrat, jego własnością jest długość boków, a metodami funkcje
zwracające pole powierzchni oraz obwód.
Aby w języku programowania stworzyć obiekt, w pierwszym kroku należy zdefiniować jego
strukturę - w tym celu tworzymy tzw. Klasę opisującą własności oraz funkcje a następnie
tworzymy konkretny obiekt danej klasy.
Ogólny zapis definicji klasy i stworzenia obiektu wygląda w sposób następujący:
PRZYKŁAD: CLASS KWADRATKLASA { //DEKLARACJA KLASY O NAZWIE KWADRATKLASA INT DLUGOSC_BOKU; //DEKLARACJA WŁAŚCIWOŚCI O NAZWIE DLUGOSC_BOKU FUNCTION PRZYPISZ_DLUGOSC_BOKU(INT BOK) //DEKLARACJA FUNKCJI PRZYPISZ_DLUGOSC_BOKU
SŁUŻĄCA DO PRZYPISANIA OBIEKTOWI WŁAŚCIWOŚCI DLUGOSC_BOKU { DLUGOSC_BOKU=BOK; //INSTRUKCJA PRZYPISANIA WŁAŚCIWOŚCI DLUGOSC_BOKU ZMIENNEJ BOK BĘDĄCEJ
PARAMETREM FUNKCJI } FUNCTION POLE() //DEKLARACJA FUNKCJI POLE ZWRACAJĄCEJ POLE POWIERZCHNI KWADRATU O
ZADEKLAROWANEJ DŁUGOŚCI BOKU { RETURN DLUGOSC_BOKU* DLUGOSC_BOKU; }
23
FUNCTION OBWOD()//DEKLARACJA FUNKCJI OBWOD ZWRACAJĄCEJ OBWÓD KWADRATU O ZADEKLAROWANEJ
DŁUGOŚCI BOKU { RETURN 4* DLUGOSC_BOKU; } } KWADRAT = NEW KWADRATKLASA; //UTWORZENIE OBIEKTU O NAZWIE KWADRAT KLASY KWADRATKLASA KWADRAT.PRZYPISZ_DLUGOSC_BOKU(4); //URUCHOMIENIE FUNKCJI PRZYPISZ_DLUGOSC_BOKU Z
PARAMETREM 4 PRINT(‘POLE KWADRATU WYNOSI ’, KWADRAT.POLE()); //WYPISANIE WARTOŚCI FUNKCJI POLE DLA OBIEKTU
KWADRAT PRINT(‘OBWÓD KWADRATU WYNOSI’, KWADRAT.POLE());//WYPISANIE WARTOŚCI FUNKCJI OBWÓD DLA
OBIEKTU KWADRAT
III. 2.1 Programowanie obiektowe charakteryzuje się
następującymi cechami:
Hermetyzacja – to mechanizm ukrywania danych składowych obiektu (zarówno metod jak i
właściwości) przed innymi klasami w ten sposób, aby były one dostępne tylko metodom
wewnętrznym danej klasy. Takie blokowanie dostępu pozwala łatwiej kontrolować
przetwarzane dane – np. udostępniane właściwości mogą być zapisywane i przetwarzane
tylko przez wewnętrzne metody danej klasy, co pozwala na łatwiejszą kontrolę zarówno
przetwarzania danych jak i również tworzenia kodu.
Ze względu na fakt, że komunikacja pomiędzy obiektami następuje tylko i wyłącznie poprzez
metody danej klasy hermetyzacja pozwala m.in. na łatwiejszy podział prac przy dużych
projektach programistycznych – definiując metody komunikacji między obiektami można
rozdzielić implementacje poszczególnych klas pomiędzy programistów, którzy muszą
przestrzegać ustalonych reguł komunikacji.
Zakresy dostępu do metod oraz właściwości obiektów mogą być zdefiniowane wraz z klasą
przy użyciu słów kluczowych Public, private protected.
Metody i właściwości opisane jako public widoczne są publicznie, dla wszystkich innych
obiektów, opisane jako protected będą dostępne dla obiektów należących do klas
potomnych, opisane jako private dostępną są tylko dla danego obiektu.
Dziedziczenie – to mechanizm pozwalający na współdzielenie tworzonych funkcjonalności
pomiędzy klasami (a więc również obiektami danych klas). Klasa dziedzicząca (zwana także
pochodną lub potomną) może dziedziczyć po innej klasie (tzw. klasa bazowa) dzięki czemu
oprócz swoich własnych właściwości i metod posiada również własności i metody klasy
bazowej.
24
Dziedziczenie pozwala na wielokrotne wykorzystanie tworzonego kodu – tworząc
oprogramowanie gdzie klasy wykonują podobne zadania można stworzyć uogólnione klasy
ze wspólnymi metodami i własnościami, a następnie tworząc klasy pochodne można
uszczegółowić funkcjonalności do konkretnych potrzeb np.
Projektując aplikację gdzie przetwarzane będą dane Klientów oraz pracowników można
utworzyć klasę Osoba, która będzie zawierać wspólne własności takie jak imię, nazwisko,
data urodzenia, PESEL, adres, numer telefonu oraz metody do zapisu i odczytu do bazy
danych zapisz oraz czytaj.
Klasa Klient będzie dziedziczyć własności oraz metody po klasie osoba oraz zawierać
specyficzne własności takie jak adres kontaktowy, nazwa firmy czy numer NIP. Klasa
Pracownik będzie zawierać dodatkowe własności takie jak data zatrudnienia, wysokość
pensji czy metody takie jak oblicz premię.
Taki podział na klasę bazową oraz klasy potomne pozwala na wykorzystanie tego samego
kodu, dzięki czemu tworzone oprogramowanie powstaje szybciej, jest mniej podatne na
błędy oraz łatwiejsze do testowania.
Polimorfizm - to mechanizm pozwalający na zmianę zachowania takich samych metod w
zależności od obiektu, który je wywołuje.
Analizując poprzedni przykład polimorfizm umożliwia, aby metoda dziedziczona – zapisz do
bazy inaczej działała, gdy zostanie wywołana przez obiekt klasy Klient oraz inaczej gdy
wywołana zostanie przez obiekt klasy Pracownik – w pierwszym przypadku oprócz
wspólnych danych imię, nazwisko, data urodzenia, PESEL, adres, numer telefonu zapisane
zostaną dodatkowo adres kontaktowy, nazwa firmy oraz numer NIP, w drugim przypadku
oprócz danych wspólnych dodatkowo zachowane zostaną dane typowe dla pracowników:
data zatrudnienia, wysokość pensji
III. 2.2 Konstruktory i Destruktory
Programowanie obiektowe pozwala na stworzenie specjalnych metod które uruchamiane są
w momencie utworzenia obiektu danej klasy (konstruktory) i w momencie usunięcia obiektu
z pamięci (destruktory). Konstruktory pozwalają na przypisanie wstępnych (domyślnych)
parametrów danego obiektu.
Deklaracja konstruktorów i destruktorów jest zależna od języka programowania – może to
być funkcja, która nazywa się tak samo jak klasa, której nazwa jest określona w języku
25
programowania lub której deklaracja jest poprzedzona wymaganym słowem np.
(constructor).
Rozdział IV Interakcja z otoczeniem (we/wy, bd)
zapisywanie i odczytywanie wyników
/Paweł Bensel/
Większość aplikacji do działania potrzebuje sposobu komunikacji, dzięki któremu użytkownik
będzie miał wpływ na jej działanie - czy to poprzez wprowadzenie danych do przetworzenia,
poruszania określonym elementem na ekranie, wybranie określonego elementu na ekranie,
czy chociażby wczytania konfiguracji potrzebnej do uruchomienia programu.
W zależności od budowanej aplikacji komunikacja aplikacji z otoczeniem prowadzona jest
przy użyciu różnych kanałów. Mogą to być operacje wprowadzania danych z klawiatury,
wczytywania ich z pliku czy z odczyt z bazy danych. W nowoczesnych aplikacjach
mobilnych często polecenia do aplikacji wydawane są poprzez klikanie określonych
elementów wyświetlanych na ekranie. Wprowadzone dane czy też wybranie określonych
elementów mogą mieć wpływ na działanie aplikacji i powodować różną reakcje aplikacji.
Operacje pobierania danych i ich przekazywania do użytkownika nazywa się operacjami
wejścia wyjścia.
IV.1. Operacje Wejścia - wyjścia
Większość aplikacji musi pobierać dane do przetworzenia – mogą to być dane pobierane np.
z klawiatury, graficznego interfejsu użytkownika, plików czy bazy danych. Przetworzone
dane mogą być przekazywane wyświetlane na ekranie (tzw. urządzenia wyjścia), zapisane
do pliku czy przekazane do bazy danych.
W zależności od języka programowania funkcje związane z odczytywaniem i zapisywaniem
danych dostępne mogą być w zewnętrznych bibliotekach.
IV.1.1 Operacje wejścia wyjścia dla klawiatury i monitora (konsoli) Najczęściej operacje wejścia-wyjścia zapisują dane do zmiennych, aby wykorzystać je w
późniejszym etapie.
Przykładowa operacja wczytywania danych z klawiatury i ich wyświetlenia na monitorze
wygląda w sposób następujący:
26
VAR ZMIENNA: INTEGER; //DEKLARACJA ZMIENNEJ LICZBOWEJ /*UWAGA OD AUTORA: W ZALEŻNOŚCI OD UŻYWANEGO JĘZYKA PROGRAMOWANIA WCZEŚNIEJSZA DEKLARACJA ZMIENNYCH MOŻE
NIE BYĆ WYMAGANA. */ ZMIENNA=READ(); //PRZYPISANIE DO ZMIENNEJ WARTOŚCI ZACZYTANA Z KLAWIATURY PRINT(ZMIENNA); //WYPISANIE WARTOŚCI ZMIENNEJ FUNKCJE WYPISUJĄCE DANE NA EKRAN CZĘSTO POZWALAJĄ ŁĄCZYĆ WIELE ZMIENNYCH, WYŚWIETLAĆ
WYNIKI OPERACJI NA ZMIENNYCH CZY ŁĄCZYĆ JE Z DOWOLNYMI ŁAŃCUCHAMI ZNAKÓW, NP.: VAR LICZBA1, LICZBA2: INTEGER; //DEKLARACJA ZMIENNEJ LICZBOWEJ PRINT(‘TEN PROGRAM OBLICZA SUMĘ DWÓCH LICZB’); PRINT(‘PODAJ PIERWSZĄ LICZBĘ: ’); LICZBA1=READ(); PRINT(‘PODAJ DRUGĄ LICZBĘ: ’); LICZBA2=READ(); PRINT(‘SUMA PODANYCH LICZB WYNOSI’,LICZBA1+LICZBA2); /*UWAGA OD AUTORA: W ZALEŻNOŚCI OD UŻYWANEGO JĘZYKA PROGRAMOWANIA PARAMETRY FUNKCJI WYPISUJĄCEJ ZMIENNE
MOGĄ BYĆ RÓŻNE. */
IV.1.2 Operacje na plikach
Większość języków programowania pozwala na operacje odczytu i zapisu danych do plików.
Dane zapisywane do pliku mogą być danymi tekstowymi, ale również mogą to być pliki
binarne w określonym formacie np. pliki graficzne czy pliki dźwiękowe.
Po wczytaniu danych mogą być one przetworzone w kodzie programu i ponownie zapisane
do pliku. Najczęściej operacja dostępu do pliku wymaga jego otworzenia przy pomocy
odpowiedniej funkcji języka programowania.
27
Podczas otwarcia pliku – jako parametr funkcji otwierającej plik - podajemy tryb dostępu do
pliku – najczęściej spotykane tryby to:
● tryb do odczytu (read) – oznaczany jako R
● tryb do zapisu (write) – oznaczany jako W
● tryb do zapisu i odczytu (read/write)– oznaczany jako RW
● tryb dopisywania do pliku (append)- oznaczany jako A
Kolejnym krokiem jest operacja odczytu lub zapisu do pliku, po której należy zamknąć plik –
spowoduje on odłączenie (zwollnienie) pliku, dzięki czemu będzie mógł być wykorzystywany
przez inne programy działające w systemie operacyjnym.
IV.1.3 Operacje na plikach tekstowych
W zależności od języka programowania operacje czytania z plików tekstowych mogą
dotyczyć:
● odczytu całego pliku
● odczytu kolejnej linii z pliku
● odczyt kolejnego znaku z pliku
● odczyt określonej liczby bajtów z pliku
Niektóre języki programowania w celu ułatwienia sekwencyjnego przetwarzania plików
oferują funkcję bądź zmienną oznaczającą znacznik końca przetwarzanego pliku (ang. END
OF FILE, skrót EOF), dzięki czemu w kodzie można używać pętli do odczytu danych.
Ogólny kod źródłowy odczytu z pliku tekstowego plik.txt zapisanego w katalogu
/home/user/wyglądać będzie następująco:
EOF=FALSE; //PRZYPISANIE WARTOŚCI DO ZMIENNEJ TYPU LOGICZNEGO WYKORZYSTYWANEJ DO
SPRAWDZANIA KOŃCA PLIKU PLIK = OPEN(‘/HOME/USER/PLIK.TXT’,’R’); WHILE (NOT EOF) { LINIA_TEKSTU =READ(PLIK); //PRZYPISANIE DO ZMIENNEJ WARTOŚCI ZCZYTANEJ Z KLAWIATURY IF (LINIA_TEKSTU==’’) EOF=TRUE; //WCZYTANO PUSTĄ LINIĘ, CO OZNACZA KONIEC PLIKU
28
ELSE PRINT(LINIA_TEKSTU); //WYDRUK LINII NA EKRANIE } CLOSE (PLIK);
IV.1.4 Operacje na plikach o zdefiniowanych formatach
Wiele języków programowania oferuje biblioteki zawierające funkcje obsługi popularnych
formatów plików takich jak pliki graficzne, pliki edytorów tekstów czy pliki PDF. Dostęp do
tych plików oraz oferowanych funkcji zależny jest od konkretnej biblioteki. W przypadku
plików graficznych funkcje te mogą dotyczyć np.
● zmiany rozdzielczości obrazu
● zmiany rozmiarów obrazu
● wycięcia fragmentu obrazu
● dodanie znaków wodnych lub innych efektów
● wstawianie tekstu na obraz
Przykładowy kod źródłowy programu do zmiany rozmiaru obrazu zapisanego w katalogu
/home/user w pliku zdjecie.jpg i zapisanie go pod nazwą miniaturka.jpg:
IMPORT IMAGELIBRARY; //DOŁĄCZENIE BIBLIOTEKI OBSŁUGI PLIKÓW GRAFICZNYCH IMAGELIBRARY PLIKGRAFICZNY = NEW IMAGE; //UTWORZENIE OBIEKTU Z KLASY IMAGE ZDEFINIOWANEJ W BIBLIOTECE PLIKGRAFICZNY.OPEN(‘/HOME/USER/ZDJECIE.JPG’); //OTWARCIE OBRAZ ZAPISANEGO W PLIKU PLIKGRAFICZNY.RESIZE(320,240); //ZMIANA ROZMIARU OBRAZU PLIKGRAFICZNY.SAVE(‘/HOME/USER/MINIATURKA.JPG’); //ZAPIS OBRAZU DO PLIKU PLIKGRAFICZNY.DESTROY(); //USUNIĘCIE Z PAMIĘCI OBIEKTU PLIKGRAFICZNY
IV.2 Zapis i odczyt danych z baz danych
Większość współczesnych aplikacji przetwarzających dane korzysta z serwerów baz danych
- jest to usługa (program) działająca na dowolnym serwerze (którym może być również
dowolny komputer w tym również komputer programisty). Serwery baz danych pozwalają na
zapis, odczyt i manipulację danymi w określony – standardowy sposób. Ze względu na
standaryzację dostępu do danych, możliwości zabezpieczenia danych, możliwości dostępu
29
przez wielu użytkowników serwery baz danych są wygodnym narzędziem to zapisywania
danych.
Do najbardziej popularnych serwerów baz danych należą:
● MySql
● PostrgeSQL
● MS Sql
● SQLite
Dostęp do danych zapisanych w bazach danych umożliwia język SQL (ang. Structured
Query Language) – strukturalny język zapytań.
Najczęściej wykonywane operacje dotyczące danych to:
● Tworzenie danych i struktur (ang. create)
● Odczyt danych (ang. read)
● Aktualizacja danych (ang. update)
● Usuwanie – oznacza operacje usuwania danych
IV.2.1 Krótka teoria dotycząca baz danych
W systemach baz danych dane przechowywane są w tabelach o określonej strukturze.
Chcąc zapisać w tabeli dane pracowników należy stworzyć tabelę zawierającą wymagane
pola o określonym typie, np.:
● Imię – pole tekstowe o długości 100 znaków
● Nazwisko – pole tekstowe o długości 100 znaków
● Numer PESEL – pole tekstowe o długości 11 znaków
● Data urodzenia – pole typu data
● Wynagrodzenie – pole typu liczba zmiennoprzecinkowa
● Liczba dzieci – pole typu liczba całkowita
Przy zapisie danych do bazy warto utworzyć dodatkowe pole pozwalające jednoznacznie
zidentyfikować poszczególny wiersz (rekord) w tabeli. Takie pole najczęściej jest polem typu
liczba całkowita, którego wartość przypisywana jest automatycznie przez serwer bazy
danych (w bazie MySql pole autoincrement). Pole, które jednoznacznie określa rekord w
tabeli nazywane jest kluczem głównym (ang. Primary Key), jest ono używane podczas
operacji odczytu i zapisu pojedynczych rekordów w bazie.
Instrukcja utworzenia tabeli danych osobowych pracowników w języku SQL (składnia MySql)
wygląda następująco:
30
Create table Pracownicy
(id int not null autoincrement,
imię varchar(100),
nazwisko varchar(100),
pesel varchar(11),
data_urodzenia date,
wynagrodzenie decimal(10,2),
liczba_dzieci int,
primary key (id));
Aby wstawić dane do tabeli w bazie SQL korzystamy z instrukcji INSERT:
Zwróci wszystkie rekordy pracowników, dla których wartość pola data urodzenia jest
większa niż ‘1979-01-31’ – czyli dane dotyczące osób urodzonych po 31 stycznia 1979. W
celu porównywania danych używane są następujące operatory:
Aby zmienić wartości poszczególnych pól w tabelach należy użyć komendy UPDATE.
Przykładowa składnia polecenia przedstawiona jest poniżej:
db.pracownik.update({},{ $set :{ "wynagrodzenie":1500} }) Polecenie przypisze dla wszystkich pracowników wynagrodzenie w wysokości 1500.
UPDATE pracownicy SET liczba_dzieci=liczba_dzieci+1 where id=1; db.pracownik.update({"_id":1},{ $inc :{ "liczba_dzieci":1} }) Polecenie zwiększy wartość pola liczba_dzieci o jeden dla wpisu oznaczonego
identyfikatorem (kluczem głównym) 1.
Za usuwanie danych w odpowiada polecenie REMOVE.
db.pracownik.remove({}) Usuwa wszystkie rekordy z tabeli pracownicy.
db.pracownik.remove({"nazwisko":"Kowalski"}) Usuwa pracownika o nazwisku Kowalski
Większość nowoczesnych języków programowania zawiera biblioteki obsługujące bazy
noSQL ich obługa najczęściej podobna jest do obsługi baz SQL, z tą różnicą, że dostęp do
danych nie jest zapewniany przez zapytania SQL ale przy pomocy odpowiednich metod
obiektu reprezentującego bazę danych.
Ogólna postać dostępu do bazy noSQL wygląda w sposób następujący:
Import NoSQLLibrary; //dołączenie biblioteki obsługi bazy danych
DBLibrary
37
baza = new NoSQLClass; //utworzenie obiektu z klasy DBClass
zdefiniowanej w bibliotece
baza.open(‘localhost’,2233,’dbname’,’user’,’password123’); //otwarcie połączenia do bazy danych dbname działającej na
serwerze lokalnym (localhost) na porcie 2233 jako użytkownik user
z hasłem password123
var pracownicy=baza.collection(‘pracownicy‘); // przypisanie do
obiektu pracownicy kolekcji pracownicy z bazy danych noSQL.