podrecznik scalony.docx 4
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ł
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/
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;
● znakowe (char, string) - przechowują dowolne znaki np.: "1","r","@";
Pamiętajmy, że deklarując zmienną rezerwujemy dla niej miejsce w pamięci; to, ile tego
miejsca potrzebujemy uzależnione jest od jej typu.
Deklaracja zmiennej wiąże się od razu z rezerwacją miejsca w pamięci operacyjnej, bo to
właśnie tam będą przechowywane wartości. Pamięć możemy porównać do szafy z
szufladami, z których każda ma swój numer, a to jakie w niej będą przechowywane
elementy zależy od właściciela szuflady, a więc zmiennej, która zostanie do niej przypisana.
Wizualizacja pamięci operacyjnej, w której zmienne otrzymują miejsce na przechowywanie
wartości
ile_galek owoce nr
kod imie pieczywo ulica
6
miaso nabiał nazwisko Sma_lodow
I.1.2 Deklaracja zmiennej
Zanim skorzystamy ze zmiennej musimy ją zadeklarować, nadać jej nazwę. Bardzo dobrym
rozwiązaniem jest stosowanie nazw tak, aby od razu było wiadomo, jakie wartości będą w
niej przechowywane np.: "nr_domu" - taka zmienna będzie przechowywać liczbę. Nie
możemy też stosować polskich znaków, ale w nazwie mogą pojawić się również cyfry.
Kompilatory rozróżniają duże i małe litery dlatego zmienna „ABC” jest inną zmienną niż
zmienna „abc”, musimy pamiętać o tym odwołując się do nich. No i jeszcze jedna sprawa -
nie wolno tworzyć nazw zmiennych z wykorzystaniem słów kluczowych. Każdy język ma
własną listę, ale jest kilka, które są uniwersalne i spotykamy je w każdym: break, case,
class, do, else, if, false, for, public, private, protected, switch, true, while.
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
uczeń ma czerwony pasek czy nie.
nr_dziennik = 13
oceny = [ 4,4,4,5,5,5]
srednia = (oceny[0] + oceny[1] + oceny[2] + oceny[3] + oceny[4] + oceny[5])/6
if (srednia >= 4,75 )
pisz ("gratuluję")
else
pisz ("może uda się za rok")
nr_dziennik = 18
oceny = [ 4,4,4,2,5,5]
srednia = (oceny[0] + oceny[1] + oceny[2] + oceny[3] + oceny[4] + oceny[5])/6
if (srednia >= 4,75 )
pisz ("gratuluję")
else
pisz ("może uda się za rok")
Co zauważyliście, dokonując analizy powyższego kodu? Wybierzcie poprawne odpowiedzi
● Kod jest czytelny,
● Kod się powtarza,
● Gdybyśmy chcieli zrobić analizę wszystkich uczniów w klasie, musielibyśmy powtórzyć kod
wiele razy co wymaga sporej pracy,
● Wpisywanie tego kodu byłoby męczące.
Czy można ten powtarzalny kod zapisać raz, a wykonać tyle razy, ile program będzie
potrzebował? To możliwe właśnie dzięki zastosowaniu funkcji. To tak jak w przypadku
funkcji pisz, która wyświetla komunikaty na ekranie.
II.2 Funkcje
Funkcje pozwalają wyodrębnić fragment kodu, nadać mu nazwę, a następnie odwołać się do
niego wszędzie tam, gdzie jest to potrzebne.
20
function nazwa_funkcji () instrukcja funkcji
nazwa_funkcji () // wywołanie funkcji
Definicja funkcji rozpoczyna się od słowa kluczowego function, a następnie jest podawana
nazwa funkcji.
Stworzenie funkcji to tzw. deklaracja funkcji. Cały kod, który należy do danej funkcji – ma
mniejsze znaczenie od samej deklaracji – tak samo jak kod w pętlach i warunkach, dlatego
jest inaczej wyrównany.
Użycie funkcji w kodzie nazywane jest wywołaniem. Wywołanie następuje zawsze na
„zawołanie” użytkownika – kod nie ma prawa wykonać się sam z siebie – nawet w
momencie deklaracji. Aby użyć funkcji trzeba podać jej nazwę. Instrukcje umieszczone w
„ciele” funkcji są wykonywane od góry do dołu tak samo jak każdy inny kod. Różnica polega
na tym, że wykonywane są wyłącznie wtedy, kiedy zostanie wywołana funkcja. Funkcja
może coś zwracać lub nie.
Przykład: Funkcja, która będzie dodawać dwie liczby
funkcja dodaj(A, B)
{
zwróć A + B;
}
Z=1
Y=2
dodaj(z,y); //zwróci 3
W tym przykładzie powinniście zauważyć, że nazwa zmiennych w programie
przekazywanych jako parametr funkcji nie jest ważna.
Zmienne wewnątrz funkcji, czyli zasięg widzenia zmiennych
Zmienne zadeklarowane wewnątrz funkcji są tylko dla niej dostępne. Jeżeli chcesz, żeby
można było ich użyć poza funkcją, to skorzystaj ze zmiennych globalnych, pamiętając, że
takie rozwiązanie, może mieć również wadę, gdyż operacja na tych samych zmiennych w
21
kilku funkcjach może spowodować, że wynik operacji na nich zmieni funkcjonalność
programu.
Deklaracje zmiennych umieszczane wewnątrz funkcji działają dokładnie tak samo jak te
umieszczane poza funkcjami, przynajmniej w tym sensie, że powodują utworzenie zmiennej
i zapisanie w niej początkowej wartości. Jednak różnica pomiędzy zmienną zadeklarowaną
poza funkcją oraz zmienną, która deklarowana jest wewnątrz funkcji zależy od tego, gdzie
będziemy chcieli z nich skorzystać. Te, które znajdują się w funkcji, są zmiennymi lokalnymi
i do nich możemy odwoływać się tylko w obrębie funkcji, a zmienne znajdujące się poza
funkcją są zmiennymi globalnymi. Ma to bardzo duże znaczenie, bo zmienne zadeklarowane
wewnątrz funkcji nie są widoczne dla innych fragmentów kodu.
Rozdział III Programowanie obiektowe i strukturalne, przygotowanie
funkcjonalnych aplikacji, analiza złożoności projektu, optymalizacja
kodu /Paweł Bensel/
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:
Insert into pracownicy (imie, nazwisko,
pesel,data_urodzenia,wynagrodzenie,liczba_dzieci) values
(‘Jan’,’Kowalski’,’79010100234’,’1979-01-01’,1000.00,0);
Insert into pracownicy (imie, nazwisko, pesel,data_urodzenia,wynagrodzenie,liczba_dzieci) values
(‘Anna’,’Nowak’,’79020300234’,’1979-02-03’,2000.00,2 );
Po wykonaniu powyższych instrukcji w bazie danych zostaną dodane dwa rekordy o
podanych wartościach oraz automatycznych przypisanych dla pola ID:
ID Imie Nazwisko Pesel Data_urodzenia Wynagrodzenie Liczba_dzieci
31
ID
imię
nazwisko
PESEL
Data_urodzenia
Wynagrodzeni
e
Liczba_dzie
ci
1
Jan
Kowalski
7901010023
1979-01-01
1000.00
0
2
Anna
Nowak
7902030023
1979-02-03
2000.00
2
Odczyt danych z tabel umożliwia komenda SELECT. Poniżej prezentowane jest kilka
przykładów dotyczących wyświetlania poszczególnych rekordów:
SELECT * FROM pracownicy;
Zwróci wszystkie pola tabeli pracownicy
SELECT imie, nazwisko FROM pracownicy ORDER BY nazwisko,
imie;
Zwróci pola imię oraz nazwisko z tabeli pracownicy posortowane w kolejności alfabetycznej
wg nazwiska oraz imienia
SELECT * FROM pracownicy WHERE id=2;
Zwróci wszystkie pola z rekordu, dla którego wartość pola ID (klucz główny) wynosi 2 z
tabeli pracownicy.
SELECT * FROM pracownicy WHERE data_urodzenia>’1979-01-31’;
32
Zwróci wszystkie rekordy z tabeli pracownicy, dla którego wartość pola data urodzenia jest
większa niż ‘1979-01-31’ – czyli zwróci rekordy dotyczące osób urodzonych po 31 stycznia
1979.
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:
UPDATE pracownicy SET wynagrodzenie=1500.00;
Polecenie przypisze dla wszystkich wierszy w tabeli pracownicy wynagrodzenie w wysokości
1500.
UPDATE pracownicy SET wynagrodzenie=wynagrodzenie*1.2
where liczba_dzieci >=1;
Polecenie zwiększy wynagrodzenie o 20% dla wszystkich wierszy w tabeli pracownicy
wynagrodzenie w wysokości 1500 dla osób posiadających więcej niż jedno dziecko.
UPDATE pracownicy SET liczba_dzieci=liczba_dzieci+1 where id=1;
Polecenie zwiększy wartość pola liczba_dzieci o jeden dla wiersza oznaczonego
identyfikatorem (kluczem głównym) 1.
Za usuwanie danych w bazach danych odpowiada polecenie DELETE.
DELETE from pracownicy;
Usuwa wszystkie rekordy z tabeli pracownicy.
DELETE from pracownicy where nazwisko =’Kowalski’;
Usuwa pracownika o nazwisku Kowalski
33
IV.2.2 Komunikacja z bazą danych
W celu bezpieczeństwa danych przechowywanych w bazach danych dostęp do nich
wymaga autoryzacji przy użyciu nazwy użytkownika oraz hasła – dane te konfigurowane są
przez administratora bazy danych.
Do podłączenia do serwera bazy danych wymagane są następujące parametry:
● Nazwa serwera baz danych
● Port, na którym działa serwer baz danych
● Nazwa bazy danych
● Nazwa użytkownika
● Hasło użytkownika
Najczęściej w językach programowania mechanizmy komunikacji z bazami danych dostępne
są w zewnętrznych bibliotekach.
Niezależnie od języka programowania oraz używanych baz danych komunikacja z serwerem
bazodanowym przebiega podobnie:
Import DBLibrary; //dołączenie biblioteki obsługi bazy danych
DBLibrary
baza = new DBClass; //utworzenie obiektu z klasy DBClass zdefiniowanej w bibliotece
baza.connect(‘localhost’,3306,’dbname’,’user’,’password123’); //otwarcie połączenia do bazy danych dbname działającej na
serwerze lokalnym (localhost) na porcie 3306 jako użytkownik user
z hasłem password123
baza.query(‘SELECT * FROM pracownicy order by nazwisko, imie’);
// zapytanie SELECT …
result=baza.fetchAll(); //pobranie wyniki wykonanego zapytania do
zmiennej tablicowej result;
foreach (result as row) //pętla wykonywana dla wszystkich wierszy zmiennej result oznaczanych w kolejnych iteracjach jako zmienna
row
{
34
print(row[imie], row[nazwisko]); //wydruk na ekranie pól nazwisko
oraz imie kolejnych wierszy zmiennej result
}
baza.disconnect(); //zakończenie połączenia z bazą danych
baza.destroy();//usunięcie obiektu z pamięci
Podobny mechanizm komunikacji z serwerem baz danych ma zastosowanie w przypadku
innego rodzaju zapytań np, dodających czy aktualizujące dane – wówczas zmianie ulega
treść zapytania w języku SQL wysyłana do serwera bazy danych oraz analiza odpowiedzi.
IV.2.3 Bazy danych noSQL
Wraz z rozwojem internetu i nowych technologii zmieniło się również podejście do
przechowywania danych. Dane zapisane w tabelach, kolejne zaindeksowane wiersze w
tabeli nie zawsze są wygodne przy przechowywaniu skomplikowanych i nieregularnych
struktur danych.
Serwery baz danych noSQL zapewniają mechanizm przechowywania i dostępu do danych,
które nie są przechowywane w regularnych tabelach, na których manipulacja jest bardziej
intuicyjna i nie wymaga znajomości języka SQL. Dodatkowym atutem jest brak utrudnień
związanych ze zmianami w strukturze danych dzięki czemu często serwery baz danych
noSQL wykorzystywane są przy przetwarzaniu dużych ilości danych (ang. Big data).
Do najbardziej popularnych serwerów baz danych noSQL należą:
MongoDB
Apache Cassandra
Redis
Solr
W przeciwieństwie do danych zapisanych w tabelach SQL dane w bazach noSQL nie
posiadają określonej struktury – poszczególne rekordy w bazie noSQL (odpowiadające
wierszom) zapisywane są w tzw. Kolekcji mogą różnić się kolejnymi atrybutami
(odpowiadającymi kolumnom w tabeli SQL).
Spróbujmy przeanalizować przykład zapisu i odczytu danych dotyczący pracownika w
bazach noSQL (na przykładzie MongoDB).
35
Jak powiedziano wcześniej bazy noSQL nie wymagają wcześniejszej definicji struktury
danych, wystarczy jedynie deklaracja kolekcji, do której zapisywane będą dane o dowolnie
zdefiniowanych polach.
db.createCollection("pracownik"); Polecenie to stworzy w bazie danych kolekcję o nazwie pracownik.
Aby dodać dane należy użyć komendy insert, której parametrami są nazwy pól i ich
wartości.
db.pracownik.insert({"imie":"Anna","nazwisko":"Nowak","pesel":"’7
9020300234","data_urodzenia":"1979-02-03","wynagrodzenie
":2000.00, "liczba_dzieci":0});
Kolejny wpis do bazy może różnić się definicją danych – nie jest wymagane podanie
wartości poszczególnych pól, które zostały zdefiniowane wcześniej, mogą być wstawiane
zupełnie inne dane.
db.pracownik.insert({"imie":"Jan","nazwisko":"Kowalski","pesel":"’79010100234","data_urodzenia":"1979-01-01","wynagrodzenie
":1000.00, "numer_telefonu":"501 501 501"});
Po dodaniu danych serwer bazy danych automatycznie nada identyfikator wprowadzonemu
rekordowi – będzie on zapisany w polu _id. Automatyczne indeksowanie kolejnych rekordów
może być wyłączone na etapie tworzenia kolekcji.
db.pracownik.find() Zwróci wszystkie pola tabeli pracownicy
db.pracownik.find().sort({"nazwisko":1, "imie":1}) Zwróci dane pracowników posortowane w kolejności alfabetycznej wg nazwiska oraz imienia
db.pracownik.find({_id:2}) Zwróci wszystkie pola z rekordu, dla którego wartość pola _id (klucz główny) wynosi 2 z
tabeli pracownicy.
SELECT * FROM pracownicy WHERE data_urodzenia>’1979-01-31’;
db.pracownik.find({ data_urodzenia: { $gt : 1979-01-31 } })
36
$gt – większe niż
$lt – mniejsze niż
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.
resullt=pracownicy.find({"nazwisko":"Kowalski"}).sort({"nazwisko":
1, "imie":1})
foreach (result as row) //pętla wykonywana dla kolejnych danych w zmiennej result oznaczanych w kolejnych iteracjach jako zmienna
row
{
print(row.imie, row.nazwisko.); //wydruk na ekranie pól nazwisko
oraz imie kolejnych wierszy zmiennej result
}
baza.disconnect(); //zakończenie połączenia z bazą danych
baza.destroy();//usunięcie obiektu z pamięci
Funkcje obsługujące konkretne operacje na danych zależne są od wybranego języka
programowania.
38
Rozdział V Interfejsy graficzne, projektowanie interfejsu graficznego /Paweł Bensel/
Interfejs użytkownika (ang. user interface, UI) to część aplikacji odpowiadająca na
komunikację z użytkownikiem. Użytkownik nie ma możliwości bezpośredniej komunikacji z
systemem komputerowym, komunikacja obsługiwana jest przez stworzony infterfejs
użytkownika, który może przyjmować jedną z nastepujących postaci:
Wiersz poleceń (linia komend) – polecenia wydawane są przy pomocy zdefiniowanych
komend wpisywanych na klawiaturze. Przykładem tego rodzaju interfejsu jest system DOS,
wiersz poleceń systemu Windows, czy Windows PowerShell .
Interfejs/tryb tekstowy – polecenia wydawane są klawiaturą lub myszką, elementy interfejsu
wyświetlane są na ekranie w trybie tekstowym, przy użyciu znaków specjalnych budowane
są prostokąty imitujące okna, przyciski itp. Przykładem użycia interfejsu tekstowego jest
program Midnight commander
Interfejs/tryb graficzny – informacje są prezentowane w formie graficznej, komendy
wykonywane są poprzez wskazanie kliknięcie myszką lub wskazanie elementu na ekranie
dotykowym.
Nowoczesne aplikacje najczęściej pracują w trybach graficznych, dzięki czemu ich wygląd
jest bardziej przyjazny dla użytkownika. Graficzna prezentacja działań aplikacji oraz
39
komunikacji z użytkownikiem nazywana jest interfejsem graficznym. Interfejsy graficzne to
część tzw. User Experience (z ang. doświadczenie użytkowania), które obejmuje całość
wrażeń, jakich doświadcza użytkownik podczas korzystania z danego produktu. O wygodzie
użytkowania z określonego interfejsu decyduje układ poszczególnych elementów na
ekranie, ich ułożenie względem siebie, możliwość szybkiego dostępu do określonych funkcji,
ale również wybrana czcionka czy użyte ikony, ich wielkość czy kolor.
Aplikacje uruchamiane w wierszu poleceń wymagają od użytkownika zaznajomienia się z
dokumentacją lub pomocą określonego polecenia, aby móc uruchomić poszczególne
funkcje.
W trybie tekstowym uruchamiać można również aplikacje, dla których utworzony został
tekstowy interfejs (np. Midnight Commander) - są on bardziej przyjazne od aplikacji
uruchamianych w wierszu poleceń, bardzo często na ekranie wyświetlane są informac je
opisujące poszczególne funkcje, użytkownik nie musi znać określonych komend, ponieważ
polecenia wydawane są poprzez wybór elementów na ekranie (najczęściej określonym
skrótami klawiszowymi lub przy pomocy strzałek na klawiaturze).
Największą popularnością cieszą interfejsy graficzne – są on bardzo intuicyjne, przejrzyste i
przyjazne dla użytkownika. Poszczególne funkcje aplikacji uruchamiane są poprzez
przyciski i ikony, ich wielkość powinna być dopasowana do urządzenia, na którym działa
aplikacja, wpisywanie tekstu z klawiatury używane jest tylko do przekazywania danych
wejściowych.
Zasadami tworzenia doświadczeń użytkownika mówią, że powinny być one pozytywnie
odbierane przez użytkownia i zaprojektowane zgodnie z podejściem zorientowanym na
użytkownika (ang. user-centered design), co oznacza, że użytkownik aplikacji bierze udział
w kolejnych etapach jej tworzenia.
V.1. Projektowanie interfejsu graficznego
użytkownika
W pierwszych latach użytkowania komputerów komunikowały się one z użytkownikami przy
pomocy komunikatów wyświetlanych na ekranie, wprowadzanie danych odbywało się przy
pomocy klawiatury.
Wraz ze wzrostem możliwości sprzętu oraz dostępnością urządzeń wspomagających
obsługę grafiki interfejs tekstowy został zastąpiony przez graficzny interfejs użytkownika.
Obecnie zdecydowana większość aplikacji dostępna jest również na urządzania mobilne,
gdzie komunikacja z użytkownikiem w głównej mierze opiera się o interfejs graficzny.
40
Chcąc stworzyć doby interfejs graficzny aplikacji należy przeanalizować następujące
aspekty jej działania:
● Kim będą użytkownicy aplikacji? – wygląd i interakcja z użytkownikiem będzie inna
dla dzieci, młodzieży czy seniorów, inaczej wyglądają aplikacje kierowane do
nastolatków, inaczej dla klientów biznesowych
● W jaki sposób nasza aplikacja będzie wykorzystywana? Inaczej korzysta się z
aplikacji korzystając z komputera wyposażonego w klawiaturę i myszkę, inaczej na
telefonie z niewielkim dotykowym ekranem. Coś, co jest wygodne na dużym ekranie
nie musi być wygodne i dostępne na mniejszym wyświetlaczu.
● Jakie treści będą prezentowane w naszej aplikacji? Biorąc pod uwagę, jakie dane
nasza aplikacja będzie prezentować użytkownikowi można zastosować różne
metody jej prezentacji – inaczej wyglądać będzie katalog produktów w sklepie
internetowym, a inaczej prezentowane będą dane dotyczące przepływów
finansowych.
Bardzo często interfejs urządzenia czy aplikacji jest kluczowy w jej postrzeganiu przez
odbiorców i może zadecydować o sukcesie lub porażce danego produktu na rynku.
Doskonałym przykładem są projekty systemów obsługujących telefony dotykowe w roku
2007 - czasie premiery przełomowego urządzenia, jakim był telefon iPhone firmy APPLE.
Poniżej prezentowane są interfejsy systemów Windows Mobile oraz iPhone OS (obecnie
iOS). Pierwszy z nich zawiera kilka tekstowych skrótów na pulpicie oraz znana z systemów
Windows Menu Start, drugi komunikuje się z użytkownikiem przy pomocy kolorowych ikon.
Dodatkowo do interfejsu dotykowego telefonu wprowadzono bardzo naturalne gesty
pozwalające na wykonywanie różnych operacji, które bardzo przyspieszyły obsługę
urządzania i poszczególnych aplikacji.
41
Ekran systemu Windows Mobile 6.5
https://en.wikipedia.org/wiki/Windows_Mobile#/media/File:Winmo65.PNG
Ekran systemu iPhone OS (obecnie iOS)
42
W zależności od przyjętej technologii tworzenia aplikacji wykorzystywany może być interfejs
systemu operacyjnego w przypadku aplikacji dedykowanych lub interfejs oparty o język
HTML w przypadku aplikacji www (aplikacji uruchamianych, jako strony internetowe
dostępne przez przeglądarkę internetową).
W przypadku aplikacji www interfejs definiowany jest w języku HTML wraz ze stylami CSS.
Programowanie aplikacji graficznych przeznaczonych dla konkretnego systemu
operacyjnego opiera się na programowaniu obiektowym – poszczególne elementy interfejsu
w kodzie źródłowym posiadają reprezentujące je obiekty, których własności określać mogą
np. wygląd elementu (np. dla przycisku mogą określać jego rozmiar, wyśrodkowanie,
pozycje na ekranie czy napis), natomiast metody określają działanie, które ma zostać
wykonane w przypadku zaistnienia określonego zdarzenia (np. zmiany treści czy naciśnięcia
przycisku).
Pomimo różnic w sposobie generowania interfejsu graficznego podstawowe elementy
interfejsu graficznego są takie same – są używane zarówno w aplikacjach używanych na
komputerach, tabletach oraz telefonach – nie występują w aplikacjach na zegarki (ang.
smartwatch) - ze względu na ograniczenia związane z wielkością ekranu interfejs opiera się
głównie o ikony.
Do najczęściej wykorzystywanych elementów interfejsu graficznego należą:
ETYKIETA TEKSTOWA (ANG. LABEL) – TEKST WYPISANY NA EKRANIE
POLE TEKSTOWE UŻYWANE NA STRONIE WWW
POLE TEKSTOWE W SYSTEMIE MACOS
POLE TEKSTOWE WRAZ Z ETYKIETĄ W SYSTEMIE WINDOWS
43
POLE TEKSTOWE UŻYWANE W SYSTEMIE ANDROID
POLE TEKSTOWE UŻYWANE W SYSTEMIE IOS
Pole tekstowe (ang. Text Box) – najczęściej jednoliniowe pole, w którym można wprowadzać
tekst przetwarzany przez program. W zależności od środowiska programistycznego istnieć
mogą różne rodzaje pól tekstowych, np. zawierające maski wprowadzania danych
pozwalających wprowadzać dane tylko w określonym formacie, pola pozwalające na wybór
dat, pola tekstowe z elementami zwiększania lub zmniejszania wartości czy pola
wprowadzania hasła.
Obszar tekstu używany na stronie www
OBSZAR TEKSTU W SYSTEMIE WINDOWS
OBSZAR TEKSTU W SYSTEMIE IOS
44
OBSZAR TEKSTU W SYSTEMIE ANDROID
Obszar tekstu (ang. Text Area) – pole, w którym można wprowadzać dane tekstowe
zawierające więcej niż jedną linię tekstu
Lista wyboru używana na stronie www
LISTA WYBORU UŻYWANA W SYSTEMIE MAC OS X
LISTA WYBORU UŻYWANA W SYSTEMIE ANDROID
45
LISTA WYBORU UŻYWANA W SYSTEMIE IOS
LISTA WYBORU UŻYWANA W SYSTEMIE WINDOWS
Lista wyboru (ang. Select List) – Lista rozwijana pozwalająca wybrać jedną (lub kilka) z
dostępnych opcji.
Opcje jednokrotnego wyboru używane na stronach WWW
OPCJE JEDNOKROTNEGO WYBORU UŻYWANE W SYSTEMIE MAC OS X
46
OPCJE JEDNOKROTNEGO WYBORU UŻYWANE W SYSTEMIE WINDOWS
OPCJE JEDNOKROTNEGO WYBORU W SYSTEMIE IOS
OPCJE JEDNOKROTNEGO WYBORU W SYSTEMIE ANDROID
Przyciski opcji jednokrotnego wyboru (ang. Radio Button) – przyciski pozwalające wskazać
jedną z dostępnych opcji.
Pola wielokrotnego wyboru na stronach www
47
POLA WIELOKROTNEGO WYBORU W SYSTEMIE WINDOWS
POLA WIELOKROTNEGO WYBORU W SYSTEMIE IOS
POLA WIELOKROTNEGO WYBORU W SYSTEMIE ANDROID
POLA WIELOKROTNEGO WYBORU W SYSTEMIE MAC OS X
Przyciski opcji wielokrotnego wyboru (ang. Check Box) przyciski pozwalające wskazać wiele
z dostępnych opcji.
Przycisk używany na stronach www
PRZYCISK UŻYWANY NA W SYSTEMIE IOS
48
PRZYCISK UŻYWANY NA W SYSTEMIE ANDROID
PRZYCISK UŻYWANY NA W SYSTEMIE WINDOWS
PRZYCISK UŻYWANY NA W SYSTEMIE MACOS
Przycisk (ang. Button) to element uruchamiający akcje po jego kliknięciu.
Obszar obrazu (ang. Canvas) – obszar, w którym można załadować, wyświetlać lub
generować obrazy.
Istnieją też elementy typowe dla aplikacji uruchamianych bezpośrednio w systemie
operacyjnym takie jak:
Okno (ang. Form) – okno aplikacji, na której zamieszczone są inne elementy interfejsu
graficznego.
OKNO W SYSTEMIE WINDOWS
49
OKNO W SYSTEMIE MAC OS X
PRZYCISKI STEROWANIA OKNEM W SYSTEMIE WINDOWS
PRZYCISKI STEROWANIA OKNEM W SYSTEMIE MAC OS X
Przyciski sterujące oknem (ang. Minimize button, maximize buton , close button) przyciski
znajdujące się na górnym pasku okna pozwalające na jego zminimalizowanie,
maksymalizację oraz zamknięcie
50
Paski przewijania (ang. Scroll Bar) – paski pozwalające na przesunięcie zawartości okna,
dzięki czemu użytkownik widzi na ekranie interesujący go fragment przetwarzanych czy
wyświetlanych danych
Większość elementów graficznych potrafi obsługiwać następujące zdarzenia:
Kliknięcie (ang. click) – uruchomienie kodu źródłowego w momencie kliknięcia przycisku
myszy lub naciśnięcia elementu na ekranie dotykowym.
51
Podwójne klikniecie (ang. double Click) - uruchomienie kodu źródłowego w momencie
podwójnego kliknięcia przycisku myszy lub podwójnego naciśnięcia elementu na ekranie
dotykowym.
Zmiana (ang. Change) - uruchomienie kodu źródłowego w momencie zmiany wartości
danego elementu (np. wybrania innej wartości opcji, czy wprowadzenie tekstu do pola
tekstowego).
Otrzymanie kursora tekstowego (ang. Focus) - uruchomienie kodu źródłowego w momencie,
kiedy kursor tekstowy pojawi się wewnątrz danego elementu (np. w momencie
przechodzenia pomiędzy kolejnymi polami tekstowymi).
Opuszczenie kursora tekstowego (ang. Blur) - uruchomienie kodu źródłowego w momencie,
kiedy kursor tekstowy opuszcza dany element (np. w momencie przechodzenia pomiędzy
kolejnymi polami tekstowymi).
Wejście kursora myszy (ang. mouse over) - uruchomienie kodu źródłowego w momencie,
kiedy kursor myszy pojawia się ponad danym elementem.
Wyjście kursora myszy (ang. Mouse out) - uruchomienie kodu źródłowego w momencie,
kiedy kursor myszy przesunie się poza dany element.
Naciśnięcie klawisza (ang. Key down) - uruchomienie kodu źródłowego w momencie, kiedy
naciskany jest klawisz na klawiaturze przed wyświetleniem/przekazaniem określonego
znaku.
Przytrzymanie klawisza (ang. Key press) - uruchomienie kodu źródłowego w momencie,
kiedy naciskany jest klawisz na klawiaturze po wyświetleniu/przekazaniu określonego znaku
Zwolnienie klawisza (ang. Key Up) - uruchomienie kodu źródłowego w momencie, kiedy
klawisz na klawiaturze jest zwalniany.
52
W zależności od używanego środowiska dostępne są różne zdarzenia wywołujące kod
źródłowy, które mogą obsługiwać m.in. zmiany rozmiaru, przesunięcie elementu,
przesunięcie obszaru przy użyciu paska przewijania itp.
Dla okien czy stron kolejnych ekranów aplikacji najczęściej dostępne są zdarzenia
obsługujące załadowanie/wczytanie danego elementu, jego wyświetlenie na ekranie oraz
ukrycie.
Przykładowa aplikacja pozwalająca na operacje matematyczne na dwóch liczbach może
składać się z następujących elementów:
• Pole tekstowe o nazwie Liczba1TextBox
• Pole wyboru o nazwie OperacjaSelect składające się z następujących opcji: +, -, * /
• Pole tekstowe o nazwie Liczba2TextBox
• Przycisk o nazwie ObliczButton
• Etykieta o nazwie WynikLabel
Przykładowe ułożenie elementów może wyglądać następująco:
Tworząc aplikację poza samym obliczeniem wyniku, warto stworzyć dodatkowe
funkcjonalności polegające na sprawdzeniu danych wejściowych (np. aby dopuszczać
wyłączenie wartości tekstowe, czy też w przypadku wybrania działania dzielenia
sprawdzania czy wartość drugiej liczby jest różna od 0).
Przy założeniu, że biblioteka graficzna zawiera obsługę standardowych elementów
graficznych (zdefiniowanych jako klasy bazowe) używając dziedziczenia istnieje możliwość
zdefiniowania własnych klas odpowiedzialnych za wyświetlanie i obsługę konkretnych
elementów graficznych dopasowanych do naszych potrzeb. Przykładowy kod źródłowy
53
takich klas odpowiedzialnych za obsługę powyższego formularza może wyglądać
następująco:
Class Liczba1TextBoxClass : TextBoxClass{ //deklaracja klasy o nazwie Liczba1TextBoxClass jako klasa pochodna od klasy
TextBoxClass
function Liczba1TextBoxClass () //deklaracja konstruktora obiektu – funkcja nazywana tak samo jak klasa, której zadaniem jest
przypisanie własności klasy.
{
this.left =0; //przypisanie właściwości odpowiadającej pozycji X na
ekranie.
this.top =0; //przypisanie właściwości odpowiadającej pozycji Y na
ekranie.
this.height=20; //przypisanie właściwości odpowiadającej wysokości obiektu.
this.width=200; //przypisanie właściwości odpowiadającej
szerokości obiektu
return true;
}
function OnKeyPress() //deklaracja funkcji obsługującej zdarzenia
naciśnięcia klawisza
{
if (this.key<’0’ and this.key>’9’) //sprawdzenie czy naciśnięto klawisze z poza zakresu 0..9
{
54
alert(‘To pole może przyjmować tylko wartości tekstowe’);
//wywołanie funkcji wywołujące okno ostrzeżenia.
return false;
}
return true;
}
}
Class Liczba2TextBoxClass : TextBoxClass{ //deklaracja klasy o
nazwie Liczba2TextBoxClass jako klasa pochodna od klasy
TextBoxClass
function Liczba2TextBoxClass () //deklaracja konstruktora obiektu
– funkcja nazywana tak samo jak klasa, której zadaniem jest przypisanie własności klasy.
{
this.left =320; //przypisanie właściwości odpowiadającej pozycji X na ekranie.
this.top =0; //przypisanie właściwości odpowiadającej pozycji Y na ekranie.
this.height=20; //przypisanie właściwości odpowiadającej
wysokości obiektu.
this.width=200; //przypisanie właściwości odpowiadającej
szerokości obiektu
return true;
}
function OnKeyPress() //deklaracja funkcji obsługującej zdarzenia
naciśnięcia klawisza
55
{
if (this.key<’0’ and this.key>’9’) //sprawdzenie czy naciśnięto
klawisze z poza zakresu 0..9
{
alert(‘To pole może przyjmować tylko wartości tekstowe’);
//wywołanie funkcji wywołujące okno ostrzeżenia.
return false;
}
return true;
}
}
Class OperacjaSelectClass : SelectClass{ //deklaracja klasy o
nazwie OperacjaSelectClass jako klasa pochodna od klasy
SelectClass
function OperacjaSelectClass () //deklaracja konstruktora obiektu –
funkcja nazywana tak samo jak klasa, której zadaniem jest
przypisanie własności klasy.
{
this.left =220; //przypisanie właściwości odpowiadającej pozycji X
na ekranie.
this.top =0; //przypisanie właściwości odpowiadającej pozycji Y na ekranie.
this.height=20; //przypisanie właściwości odpowiadającej
wysokości obiektu.
56
this.width=80; //przypisanie właściwości odpowiadającej
szerokości obiektu
this.options[]=[’+’]; //przypisanie kolejnej wartości wyboru na liście
this.options[]=[’-’]; //przypisanie kolejnej wartości wyboru na liście
this.options[]=[’*’]; //przypisanie kolejnej wartości wyboru na liście
this.options[]=[‘/’]; //przypisanie kolejnej wartości wyboru na liście
return true;
}
}
Class ObliczButtonClass : ButtonClass{ //deklaracja klasy o nazwie
ObliczButton jako klasa pochodna od klasy ButtonClass
function ObliczButtonClass () //deklaracja konstruktora obiektu – funkcja nazywana tak samo jak klasa, której zadaniem jest
przypisanie własności klasy.
{
this.left =440; //przypisanie właściwości odpowiadającej pozycji X
na ekranie.
this.top =0; //przypisanie właściwości odpowiadającej pozycji Y na ekranie.
this.height=20; //przypisanie właściwości odpowiadającej
wysokości obiektu.
this.width=80; //przypisanie właściwości odpowiadającej
szerokości obiektu
this.text=’='; //przypisanie właściwości odpowiadającej napisowi
na przycisku
57
return true;
}
function OnClick () //deklaracja funkcji obsługującej zdarzenia naciśnięcia klawisza
{
if ((OperacjaSelect.GetValue()==’/’)and Liczba2TextBoxClass.GetValue()==0)) //sprawdzenie czy wartość
wybrana w obiekcie OperacjaSelect to dzielenie oraz czy wartość
wprowadzona w obiekcie Liczba2TextBox wynosi 0
{
alert (‘Dzielenie przez 0 nie jest dozwolone’);
return false;
}
else
{
swith (OperacjaSelect.GetValue())
{
case :’+’
wynik= Liczba1TextBoxClass.GetValue()+Liczba2TextBoxClass.GetValue();
break;
case :’-‘
wynik= Liczba1TextBoxClass.GetValue()-
Liczba2TextBoxClass.GetValue();
58
break;
case :’*’
wynik= Liczba1TextBoxClass.GetValue()*Liczba2TextBoxClass.GetValue();
break;
case :’/’
wynik=
Liczba1TextBoxClass.GetValue()/Liczba2TextBoxClass.GetValue();
break;
}
WynikLabel.SetLabel(‘Wynik działania wynosi’+wynik);
return true;
}
}
}
Class WynikLabelClass : LabelClass{ //deklaracja klasy o nazwie WynikLabelClass jako klasa pochodna od klasy LabelClass
function WynikLabelClass () //deklaracja konstruktora obiektu –
funkcja nazywana tak samo jak klasa, której zadaniem jest
przypisanie własności klasy.
{
this.left =540; //przypisanie właściwości odpowiadającej pozycji X
na ekranie
59
this.top =0; //przypisanie właściwości odpowiadającej pozycji Y na
ekranie
this.height=20; //przypisanie właściwości odpowiadającej wysokości obiektu
this.width=80; //przypisanie właściwości odpowiadającej
szerokości obiektu
this.value=’Wynik’; //przypisanie własności odpowiadającej
wyświetlanemu tekstowi
return true;
}
}
Class MainProgramClass : WindowClass{ //deklaracja klasy o nazwie OperacjaSelectClass jako klasa pochodna od klasy
SelectClass
function MainProgramClass () //deklaracja konstruktora obiektu –
funkcja nazywana tak samo jak klasa, której zadaniem jest
przypisanie własności klasy.
{
Liczba1TextBox = new Liczba2TextBoxClass; //utworzenie nowego
obiektu klasy Liczba1TextBoxClass o nazwie Liczba1TextBox
Liczba2TextBox = new Liczba2TextBoxClass; //utworzenie nowego
obiektu klasy Liczba2TextBoxClass o nazwie Liczba2TextBox
OperacjaSelect =new OperacjaSelectClass; //utworzenie nowego obiektu klasy OperacjaSelectClass o nazwie OperacjaSelect
ObliczButton = new ObliczButtonClass; //utworzenie nowego
obiektu klasy ObliczButtonClass o nazwie ObliczButton
60
WynikLabel = new WynikLabelClass; //utworzenie nowego obiektu
klasy WynikLabelClass o nazwie WynikLabel
this.add (Liczba1TextBox); //dodanie do głównego okna programu obiektu Liczba1TextBox
this.add (OperacjaSelect); //dodanie do głównego okna programu
obiektu OperacjaSelect
this.add (Liczba2TextBox); //dodanie do głównego okna programu
obiektu Liczba2TextBox
this.add (ObliczButton); //dodanie do głównego okna programu
obiektu ObliczButton
this.add (WynikLabel); //dodanie do głównego okna programu obiektu WynikLabel
return true;
}
}
Program główny obsługujący obsługę wszystkich elementów interfejsu graficznego będzie
działał, jako obiekt MainProgram, który w funkcji inicjującej (konstruktorze) utworzy kolejne
obiekty odpowiedzialne za wyświetlanie i obsługę pól tekstowych, listy wybieralnej oraz
przycisku.
Rozdział VI Zarządzanie projektem -
przeprowadzenie projektu przez procesy związane z
zarządzaniem
/prof. Marlena Plebańska/
Przystępując do pracy nad pierwszym projektem warto dobrze zaplanować realizację
wszystkich zadań, dobry plan oraz metodyczne podejście do pracy nad projektem pozwoli
na uniknięcie wielu trudności w jego realizacji. Stworzenie aplikacji to projekt, który może
przybierać w zależności od stopnia złożoności oraz zaawansowania aplikacji różnorodne
61
rozmiary i formy. Niezależnie jednak od tego jak duża i złożona aplikacja będzie efektem
projektu jej powstawanie powinno zostać zaplanowane, zrealizowane oraz zewaluowane
zgodnie z wybraną metodyką zarządzania projektem. Dlaczego?
Podstawą do stworzenia ciekawej, potrzebnej, również sprzedającej się aplikacji jest dobra
koncepcja. Koncepcja ta powinna zostać przedyskutowana w zespole projektowym,
zweryfikowana z rynkiem, a potrzeba, cele jej realizacji oraz zakres funkcjonalny powinny
zostać poparte badaniem potrzeb. Jeżeli aplikacja jest tworzona przez uczniów mini badanie
potrzeb może zostać przeprowadzone w szkole, wśród rówieśników i nauczycieli. Projekt
aplikacji to praca zespołowa wymagająca współpracy uczniów specjalizujących się w
różnych dziedzinach informatyki: programistów, grafików, testerów itp. Każdy z uczniów w
projekcie „pierwsza aplikacja“ odpowiedzialny jest za inną grupę zadań, a koordynacja pracy
bez zastosowania odpowiednich zasad zarządzania projektem może okazać się bardzo
trudna. Każdy zespół projektowy również zespół projektowy w projekcie „pierwsza
aplikacja“ potrzebuje lidera, który zorganizuje wszelkie działania projektowe, stworzy zespół
projektowy, zaplanuje prace, dopilnuje aby zadania zostały wykonane w terminie zgodnie z
harmonogramem, z należytą jakością, zadba o komunikację pomiędzy członkami zespołu
projektowego, zapewni przestrzeń do dyskusji, zadba o testowanie prototypu projektu ect.
Aby działania te były możliwe, efektywne warto korzystać ze sprawdzonych metodyk
zarządzania projektami. Podobnie jak wielkie przedsiębiorstwa, uczniowie w swoich
projektach muszą zadbać o odpowiednie warunki prowadzenia projektów oraz
przestrzeganie zasad prowadzenia projektów w przeciwnym razie nawet najciekawsze,
innowacyjne pomysły mogą zostać błędnie zrealizowane lub ich realizacja może nie zostać
doprowadzona do końca. Warto pamiętać, iż projekt podlega stałej zmianie, ewoluuje,
dotyczy to wszystkich projektów zwłaszcza informatycznych. Często efekty realizacji
poszczególnych etapów wymuszają modyfikację kolejnych etapów, czy też poszczególnych
funkcjonalności, założeń, specyfikacji projektowych, właśnie w takich sytuacjach
harmonogram projektu, dokładny plan działań , metodyka prowadzenia projektu pomogą
sprawnie opanować sytuację i doprowadzić projekt do końca z sukcesem.
Stosowanie metodyk, zasad zarządzania projektem przez uczniów w projektach szkolnych
wprowadza uczniów również w warunki rynkowe. Każda firma informatyczna kreuje bowiem
produkty i usługi w oparciu o profesjonalne, uporządkowane metodyki. Uczniowie stosujący
metodyki zarządzania projektami już w szkole będą zatem lepiej przygotowani do pracy
zawodowej, zdobędą dodatkowe kompetencje, które pomogą im uzyskać przewagę
konkurencyjną na rynku pracy.
62
VI.1. Czym jest projekt?
Projekt możemy rozumieć bardzo różnorodnie, jako zbiór różnorodnych zasobów
zorganizowany w celu osiągnięcia pewnego określonego celu/celów w założonym wcześniej
harmonogramie, jako zbiór chronologicznych działań, dążących do realizacji określonego
zadania. Jedną z popularnych definicji projektu przedstawia James P. Lewis w publikacji
Project Planning, Scheduling & Control: Projekt to jednorazowe zadanie, które posiada
określony termin rozpoczęcia i termin zakończenia, jasno określone cele, zakres działania i
(z reguły) określony budżet1. Z kolei Prince 2 definiuje projekt w następujący sposób: Projekt
to organizacja powołana na pewien czas w celu wytworzenia – w przyjętym czasie oraz przy
wykorzystaniu uprzednio określonych zasobów – niepowtarzalnych, a wcześniej określonych
wyników czy rezultatu."2
PMBOK określa projekt jako: złożone, niepowtarzalne i zarazem tymczasowe
przedsięwzięcie, polegające na zorganizowaniu takiego ciągu działań-zadań, które
najczęściej realizowane są zespołowo i mają na celu doprowadzenie do zamierzonego
osiągnięcia, rezultatu poprzez wytworzenie unikatowego wyrobu-produktu lub dostarczenia
unikatowej usługi3.
Nie sposób wymienić wszystkich definicji projektu, jednak niezależnie od przyjętej definicji
można wymienić kilka charakterystycznych cech projektu, a mianowicie:
● Projekt ma charakter czasowy, określonym początkiem i terminem zakończenia,
● Projekt ma ściśle okresowy cel/ cele (rezultatem projektu jest jakaś określona
zmiana)
● Projekty kończą się z chwilą osiągnięcia celu lub gdy okaże się, że nie da się ich
osiągnąć w określonym czasie, przy założonych ograniczeniach czasowych lub
budżetu,
● Projekt ma określony podział zadań i obowiązków
● Projekt ma określony zakres finansowy- budżet
● Projekty są przedsięwzięciem jednorazowym w rezultacie których powstaje produkt
lub usługa,
● Działania w projekcie zachodzą w określonej sekwencji
● Działania w projekcie nie są powtarzalne, ale są złożone i zachodzi między nimi
logiczna lub techniczna zależność
● Projekt angażuje określone zasoby (ludzkie, rzeczowe, finansowe, informacyjne), a
zmiany ich wykorzystania są możliwe jedynie przy udziale kierownika projektu
63
● Końcowy efekt projektu powinien spełniać wymagania stawiane wcześniej, a zatem
zrealizować cel w odpowiednim zakresie, z wymaganą jakością, po określonych
kosztach, w wyznaczonym czasie, przy zużyciu określonych zasobów
Istnieje też grupa projektów, które mają tzw. charakter organizacyjny, czyli ukierunkowany
na zmianę organizacyjną np. zmianę procedury, realizację projektu szkoleniowego, działanie
o charakterze badawczym.
Podsumowując projekt to uprzednio zaplanowane przedsięwzięcie, realizowane aby
osiągnąć określony cel. Podsumowanie cechy projektu prezentuje schemat poniżej.
Uwaga czy jest możliwość wykonania podobnego rysunku-ten jest z internetu i jest tylko
inspiracją dla grafika. Optymalnie byłoby zrobić to interaktywnie, aby po kliknięciu na
poszczególne cechy pojawiał się opis. Jeśli nie to chociaz grafika, jeśli jest to niemozliwe to
usówamy podsumowanie i zostaną tylko wymienione powyżej cechy.
2. Główne metodyki zarządzania projektami
Aby poprawnie zrozumieć i prawidłowo analizować zagadnienia i kwestie związane z
prowadzeniem projektów, a także odpowiednio rozpoznawać sposoby prowadzenia
projektów należy zrozumieć nie tylko to, czym jest sam projekt, ale również to, czym jest
szeroko rozumiane i często spotykane określenie zarządzanie projektami. Zarządzanie
64
projektami to dyscyplina z obszaru zarządzania, zajmująca się wiedzą, umiejętnościami i
technikami związanymi z prowadzeniem projektów. Zarządzanie projektami jako dziedzina
wiedzy nie jest dziedziną nową. Jej początki sięgają czasów II wojny światowej. Jednak to
ostatnie lata są okresem istotnego rozwoju, o czym świadczą liczne publikacje, badania
naukowe i konferencje, rozwój organizacji zawodowych oraz rozwój oprogramowania
wspomagającego zarządzanie projektami. Zarządzanie projektami również definiuje się w
bardzo różnorodny sposób najczęściej jako asortyment wszystkich narzędzi, technik,
procesów określania i planowania, organizowania, kontroli i prowadzenia tych
chronologicznie ułożonych, określonych w czasie działań prowadzących do określonego
wcześniej rezultatu, aż do czasu, kiedy właśnie ten nadany cel zostaje ostatecznie
osiągnięty. Jedną z najbardziej obszernych, ale jednocześnie uniwersalnych definicji
zarządzania projektami podaje PMBOK, zgodnie z którym projekt jest przedsięwzięciem
tymczasowym, który zobowiązany jest do stworzenia unikalnego produktu, usługi (lub
osiągnięcia innego, określonego celu). Czas trwania projektu określa się jego początek (datę
startu) oraz zakończenie (datę końca). Jednak koniec projektu może zostać ogłoszony w
kilku różnych okolicznościach np.: zakończenie z sukcesem, realizacja celu, zakończenie
bez sukcesu, ponieważ niemożliwe okazuje się zrealizowanie celu czy np. zakończenie bez
sukcesu, ponieważ potrzeba projektu już nie istnieje lub zakończenie bez sukcesu,
ponieważ taka decyzja zapada w ciele zarządczym (często finansującym, sponsorującym
przedsięwzięcie).
Metodyka zarządzania projektami to ogół zasad, które określają w jaki sposób wykonać
określone czynności w projekcie. Metodyki zarządzania projektami wynikają z praktyki
prowadzenia różnych typów projektów, miały na celu uporządkowanie doświadczeń oraz
dobrych praktyk w tym obszarze. Metodyki projektowe zwykle posiadają własne definicje
projektu, które uwzględniają specyfikę projektu oraz kładą nacisk na te elementy, które są
istotne z punktu widzenia danej metodyki. Metodyka zarządzania projektami to zbiór metod
stanowiący spójne pojęciowo podejście do zarządzania projektem, zbiór zasad dotyczących
sposobów wykonywania zadań projektowych oraz trybu postępowania prowadzącego do
określonego celu.
W 1969 roku powstał Project Management Institute (PMI). Nadrzędnym celem tej instytucji
jest gromadzenie, analiza doświadczeń z prowadzenia różnych typów projektów, by
następnie je wykorzystać do rozpowszechniania sprawdzonych metod odnośnie realizacji
projektów. Następnie powstał zbiór reguł z zakresu zarządzania projektami. Ujęto je w
przewodniku MPBok najbardziej popularnej książce - tzw. biblii zarządzania projektami.
Równolegle w Wielkiej Brytanii powstała metodyka Prince w oparciu o zasady PROMPT .
65
Początkowo metodykę tę stosował rząd Wielkiej Brytanii, jednak dość szybko pojawiła się
wersja Prince2, która zyskała popularność na świecie oraz szerokie zastosowanie w różnych
typach projektów. Obecnie PMI oraz Prince to dwie najpopularniejsze metodyki zarządzania
projektami. Popularność w ostatnich latach zdobyły jednak również inne metodyki takie jak
zwinne metodyki zarządzania projektami np. SCRUM czy Ten Step , przyjrzyjmy się bliżej
głównym metodyką zarządzania projektami.
VI.2.1 PMI PMI czyli Project Management Institute powstał w 1969 roku jako ogólnoświatowa
międzynarodowa organizacja skupiająca rożnego typu firmy oraz indywidualne osoby
zajmujące się prowadzeniem projektów. Następnie dynamicznie się rozwijała wraz z
rozwojem praktyki oraz teorii zarządzania. Obecnie jest ona organizacją non-profit, zrzesza
ok. 300000 członków, jest również organizacją certyfikującą profesjonalnych kierowników
projektów, a sygnowane przez nią certyfikaty należą do najbardziej uznanych na świecie.
Głównym celem PMI jest doskonalenie praktycznego zarządzania projektami, stały rozwój
wszelkich metod, technik i narzędzi wspomagających współczesne zarządzanie projektami.
PMI to najpopularniejsza metodyka zarządzania projektami technologicznymi głównie w
zakresie: projekty informatyczne, inżynieria oprogramowania, projektowanie systemów
teleinformatycznych. Metodyka ta powstała na bazie praktycznych doświadczeń w celu
podniesienia jakości oraz efektywności realizacji projektów. Konieczność
usystematyzowania praktycznych doświadczeń z realizacji projektów oraz teoretycznej
wiedzy na ten temat zaowocowała powstaniem metodyki adekwatnej do złożoności oraz
skali realizacji współczesnych projektów. PMI jako organizacja stale zbiera, analizuje, a
następnie systematyzuje doświadczenia projektowe w celu ciągłego doskonalenia metod
zarządzania projektami. Stała aktualizacja metodyki wymaga ciągłego gromadzenia
doświadczeń z realizacji rożnych typów projektów, analizowania sposobów ich prowadzenia,
słabych oraz mocnych stron, a następnie uaktualniania metodyki.
Biblią zarządzania projektami zgodnie z metodyką PMI jest tzw. PMBOK (A Guide to the
Project Management Body of Knowledge). Jest to zbiór standardów oraz wytycznych ich
realizacji stanowiących podstawy metodyki. PMBOK to zbiór praktyk zarządzania projektami
rekomendowanych przez PMI które znajdują zastosowanie w praktyce zarządzania
projektami.
PMBOK opisuje procesy zarządzania projektem pogrupowane w 5 grup oraz 9 obszarów
wiedzy. Pięć podstawowych procesów to:
66
1.Procesy rozpoczęcia - procesy, które mają na celu zdefiniowaniu projektu oraz powołanie
go w organizacji.
2.Procesy planowania – procesy, które definiują sposób realizacji celów projektu,
wykorzystania środków finansowych na jego realizację, terminów realizacji projektu,
kolejności realizacji poszczególnych działań, odpowiedzialności za ich realizację.
3.Procesy realizacji – procesy, które grupują działania realizowane w projekcie, koordynują
wykorzystaniem zasobów projektowych w celu realizacji założeń oraz planów projektu.
4.Procesy kontroli – procesy, które monitorują postępy realizacji działań w projekcie,
pomagają zidentyfikować ewentualne odchylenia w planie realizacji projektu, a następnie
podjąć działania zaradcze, naprawcze
5. Procesy zakończenia– procesy, które przygotowują formalną akceptację zakończenia
projektu, akceptację realizacji jego celów.
PMBOK definiuje następujące obszary zarządzania projektem:
1. Zarządzanie integralnością projektu
2. Zarządzanie zakresem
3. Zarządzanie czasem
4. Zarządzanie kosztami
5. Zarządzanie jakością _
6. Zarządzanie zasobami ludzkimi
7. Zarządzanie komunikacją
8. Zarządzanie ryzykiem _
9. Zarządzanie zaopatrzeniem
Projektem zgodnie z metodyką PMI zarządza kierownik projektu. Każdy projekt jest inny,
jeśli nawet w jego ramach realizujemy podobny produkt czy usługę, zawsze działamy w
zróżnicowanych okolicznościach oraz z ryzykiem co do kształtu osiągnięcia ostatecznych
wyników. Dlatego właśnie warto stosować metodyki zarządzania projektami, dzielą one
bowiem projekt na etapy, fazy co pozwala lepiej zapanować nad realizacją celów, dokładniej
analizować wszelkie zamierzone działania. Poszczególne fazy projektu składają się na tzw.
cykl życia projektu. Każda z faz dostarcza określonych rezultatów końcowych będących
podstawą prac w kolejnej fazie. Cykl życia projektu określa działania podejmowane na
początku każdej fazy oraz efekty jej zakończenia, nazywamy to podejściem procesowym.
Podejście procesowe jest charakterystyczne w metodyce PMI.
67
Jeśli chcesz dowiedzieć się więcej na temat metodyki odwiedź stronę:
http://www.pmi.org.pl/
VI.2.2 Prince
PRINCE2 (PRojects IN a Controlled Environment) kolejna bardzo popularna metodyka
zarządzania projektami. Powstała ona w Wielkiej Brytanii w 1989 roku w jednej z rządowych
agend Central Computer and Telecommunications Agency (CCTA) jako dokument pod
nazwą PRINCE. Już w pierwotnej formie był to dokument opisujący zbiór najlepszych
praktyk zarządzania projektami zebranych w czasie realizacji różnego rodzaju projektów,
lecz w znacznej mierze projektów informatycznych. W 1996 roku opublikowana została
kolejna wersja dokumentu pod nazwą PRINCE2 jako ogólna metodyka zarządzania
projektami we wszystkich dziedzinach. Bardzo szybko zyskała ona popularność, a wręcz
stała się standardem zarządzania projektami w Wielkiej Brytanii. Obok PMI stała się drugą
najpopularniejszą metodyką zarządzania projektami na świecie.
PRINCE2 stawia na tzw. ustrukturyzowane zrządzanie projektem z zastosowaniem
logicznych etapów, zasad, wykonywania określonych działań w określonej kolejności.
Metodyka ta jako kluczowy cel realizacji projektu definiuje potrzebę biznesową realizacji
projektu, sam projekt jest środowiskiem zarządzania stworzonym na potrzeby realizacji tej
potrzeby biznesowej. Potrzebę biznesową stanowi realizacja produktu lub usługi, a jej
realizacja związana jest ze specyficznymi potrzebami biznesowymi danej organizacji.
Projekt realizowany zgodnie z metodyką Prince 2 posiada określony czas realizacji
(określony początek i koniec), określone wyniki realizacji projektu (zdefiniowane i mierzalne),
określony system działań realizacji projektu (określony przebieg realizacji projektu),
określone zasoby (ludzkie, rzeczowe, finansowe, informacyjne), określoną strukturę
organizacyjną projektu ( w tym strukturę zarządzająca). Metodykę PRINCE2 wyróżnia
siedem obszarów zarządzania projektem: uzasadnienie biznesowe, organizacja, jakość,
plany, ryzyko, zmiana, postępy. Projektem zgodnie z metodyką Prince 2 zarządza kierownik
projektu oraz komitet sterujący ( grupa w skład której wchodzą przedstawicie 3 stron
inwestora, dostawcy i użytkownika). Metodyka Prince 2 to metodyka procesowa, precyzyjnie
definiuje ona 8 głównych procesów realizacji projektu co stanowi szczegółowy model
zarządzania projektem. Metodyka ta opisuje cykl życia projektu z dokładnym określeniem
jego faz oraz realizowanych działań. Osiem głównych procesów metodyki Pince 2 to:
1. Strategiczne zarządzanie projektem - proces nadrzędny, określa obowiązki i
odpowiedzialność komitetu sterującego.
68
2. Planowanie - procesy definiujące sposób realizacji projektu, określenie rezultatów
końcowych projektu (kształtu produktów/usług będących rezultatem projektu),
określanie działań projektowych, szacowanie pracochłonności działań
projektowych, harmonogramowanie działań, dokonanie oceny ryzyka, tworzenie
planów projektowych.
3. Uruchamianie Projektu/Przygotowanie Założeń Projektu – grupa procesów
poprzedzająca projekt. Procesy te przygotowują projekt to uruchomienia
(powołanie zespołu zarządzającego projektem, określenie celu/celów projektu,
definiowanie metody, analiza zasadności ekonomicznej realizacji projektu,
planowanie prac planistycznych, określenie elementy sterowania projektem,
uzyskanie zgody na inicjację projektu.
4. Inicjowanie projektu – procesy definiujące Dokument Inicjującego Projekt (DIP).
Akceptacja DIP przez Komitet Sterujący jest równoznaczna z uruchomieniem
projektu.
5. Sterowanie Etapem - procesy w ramach których na bieżąco monitorowany jest
poziom realizacji danego etapu zgodnie z przyjętym planem realizacji danego etapu,
a w razie niezgodności podejmowane są stosowne działania.
6. Zarządzanie Wytwarzaniem Produktów-procesy w ramach których wytwarzane są
produkty będące efektem projektu. W ramach tego etapu ustalany jest zakres prac
z kierownikiem projektu, planowane orz nadzorowane prace zespołu projektowego,
opracowywane raporty z postępu prac oraz jakości produktu, zatwierdzane
poszczególne etapy realizacji produktu.
7. Zarządzanie Zakresem Etapu – procesy mające na celu ukończenie prac na
poziomie każdego etapu oraz uzyskanie akceptacji poziomu ich realizacji na
każdym poziomie przez Komitet Sterujący.
8. Zamykanie Projektu - procesy mające na celu zamkniecie projektu w sposób
uporządkowany i kontrolowany oraz mające na celu wytworzenie dokumentów
podsumowujących prace projektowe.
Każdy wymienionych powyżej proces składa się z podprocesów, które są wzajemnie
powiązane. Określają one dokładnie sposób zarządzania projektem, postępowania w
konkretnych sytuacjach projektowych.
Jeśli chcesz dowiedzieć się więcej na temat metodyki odwiedź stronę:
www.ogc.gov.uk/prince2
69
VI.2.3 SCRUM
Od kilku lat na popularności zyskują tzw. zwinne (adaptacyjne) metodyki zarządzania tzw.
Agile Project Management, wśród których najpopularniejszy jest SCRUM. Jest to zbiór
zasad, reguł pozwalających na stworzenie swojego własnego procesu zarządzania
projektem. Często można spotkać się z opinia iż SCRUM to nie metodologia ale proces o
niepowtarzalnym przebiegu, konstruowany indywidualnie na potrzeby realizacji projektu lub
usługi przez organizację lub osobę indywidualną. Autorami SCRUM są dwaj Japończycy ,
„ojcowie” zakresie zarządzania wiedzą - Hirotaka Takeuchi i Ikujiro Nonaka. Następnie
został on opisany przez Kena Schwabera oraz Jeffa Sutherlanda i po raz pierwszy został
zaprezentowany w Texasie w 1995 roku podczas konferencji OOPSLA (obecnie -Splash).
SCRUM tworzy podstawę działania w zarządzaniu projektem zgodną z koncepcją zwinności
-metodyk agile, które powstały na fali niezadowolenia wobec sztywnych i silnie
sformalizowanych metodyk wytwarzania oprogramowania oraz zarządzania projektami jak
np. omawiany wcześniej PMI czy Prince 2. Według twórców zwinnych metodyk zarządzania
projektami metodyki sztywne, nie były już adekwatne do aktualnych możliwości technik
programistycznych, a stosowanie ich było mało efektywne, zwłaszcza w wykorzystaniu
zasobów. W związku z czym SCRUM stał się bardzo popularną metodyką zarządzania
projektem w przypadku realizacji projektów bazujących na tworzeniu produktów opartych o
prace programistyczne m.in. tworzenie aplikacji, tworzenie oprogramowanie czy systemów
informatycznych.
Szczególną role w metodyce SCRUM odgrywają relacje między członkami zespołu
projektowego, często mówi się o tzw. samo zarządzającym/ samoorganizującym się w celu
zwiększenia efektywności pracy zespole (najczęściej bez ról i hierarchii). Zespołem
scramowym zarządza Scrum master, osoba odpowiedzialna za ciągłość realizacji oraz stałe
udoskonalania procesów, jak również o zewnętrzne problemy zespołu. Cel projektu oraz
cele danego sprintu(etapu realizacji projektu w metodyce SCRUM) wyznacza Product
Owner (właściciel produktu). Zespół projektowy to Team są to osoby o zróżnicowanych
kompetencjach, sami decydują, ile są w stanie wykonać w danym sprincie oraz jak dane
prace wykonać - w jakiej technologii, z użyciem jakich narzędzi, dlatego tylko najlepsi
specjaliści o bardzo wysokich kompetencjach oraz ogromnej odpowiedzialności i dojrzałości
mogą wejść w skład zespołu.
70
SCRUM bazuje na empirycznej kontroli procesu, której trzy główne filary realizacji projektu
to przejrzystość, kontrola i akceptacja. Wszystkie działania w projekcie realizowane zgodnie
z metodyka SCRUM bazują na ściśle określonych kryteriach czasu.
1. Sprint - podstawową jednostką czasu w SCRUMIE jest Sprint czyli etap projektu
trwający od tygodnia do czterech tygodni, w czasie którego trwa jedna iteracja pracy
nad produktem. Długość Sprintu ustalana na cały czas trwania projektu i nie zmienia
się. Każdy Sprint ma ściśle określony cel tzw Cel Sprintu, nad osiągnięciem którego
pracuje zespół czyli Team. W czasie trwania Sprintu cel nie może ulec
zmianie, nie może też zmienić się zespół pracujący nad jego realizacją.
2. Planowanie - kolejne Sprinty planowane są w czasie spotkań zespołu z Srum
Masterem oraz właścicielem produktu. Spotkania odbywają się cyklicznie w stałe
ustalonych terminach np. każdy poniedziałek, każdy pierwszy dzień miesiąca itp.
Czas spotkania nie powinien trwać więcej niż 8 godzin, podzielony jest równomiernie
na dwie części, 1. Określenie celów nowego sprintu (Co konkretnie ma być zrobione
w kolejnym sprincie?), 2. Określenie jak praca będzie wykonana ( W jaki sposób, z
użyciem jakich technologii, jakich narzędzi).
3. Codzienny Scrum - jest to 15 min codzienne spotkanie całego zespołu. W czasie
spotkania członkowie zespołu podsumowują miniony dzień, aktualizują swoją wiedzę
na temat aktualnego stanu projektu, trwającego Sprintu. Spotkanie takie odbywa
się każdego dnia o tej samej porze, najczęściej w tym samym miejscu np.
codziennie rano o 9.00 kiedy zespół zaczyna pracę. W codziennych Scumach
najczęściej uczestniczy Scrum Master, ale nie jest to konieczne. W czasie spotkania
każdy z członków zespołu ustala następujące kwestie: Co zrobiłem poprzedniego
dnia dla realizacji Celu Sprintu?, Co dziś zrobię dla realizacji Celu Sprintu?, Czy
napotkałem jakieś trudności? Jakie? Członkowie zespołu podsumowuję efekty swojej
pracy oraz aktualizują swoją wiedzę na temat tego co udało się osiągnąć pozostałym
członkom zespołu.
4. Przegląd Sprintu – spotkanie członków zespołu, Scrum Mastera, Właściciela
Produktu, jak również wszystkich interesariuszy zainteresowani przebiegiem
projektu. Spotkanie takie odbywa się w ostatnim tygodniu sprintu, trwa kilka godzin-
max4.
W czasie spotkania analizowane są efekty ukończenia funkcjonalności projektu
zaplanowane do realizacji w danym sprincie, omawiane są zarówno pozytywne jak i
negatywne działania zaistniałe w danym Sprintcie, w przypadku działań negatywnych
71
omawiane sa również sposoby ich rozwiązania, prognozowane jest tempo
zakończenia całego projektu i ustalenie dalszych kroków realizacji projektu.
1. Retrospektywa Sprintu – spotkanie podsumowujące maksymalnie 3 godzinne. Odbywa
się po zakończeniu Przeglądu, uczestniczy w niej tylko zespół scrumowy. W czasie tego
spotkania analizuje się ostatni Sprint efekty pracy ludzi, procecy, efektywność użytych
narzędzi. W czasie takiego spotkania zbiera się również dobre praktyki, które mogą być
rekomendacją dla kolejnych sprintów. Retrospektywa kończy Sprint, następny dzień
roboczy zaczyna się od Planowania nowego Sprintu.
Jeśli chcesz dowiedzieć się więcej na temat metodyki odwiedź stronę:
http://www.scrum.org/
VI.3.Specyfika projektów
Z projektami mamy do czynienia w zasadzie w każdej dziedzinie funkcjonowanie
gospodarki. Projekty mogą mieć różny rozmiar, mogą być duże lub małe, organizacyjne lub
prowadzone przez indywidualne osoby, w ramach projektu firma może realizować kolejny
produkt z grupy produktów które już realizuje do lat lub produkt może stanowić innowacje.
Projekty możemy klasyfikować w różnorodny sposób, najpopularniejszy podział dzieli
projekty na 9 grup.
1. Klasyfikacja projektów poprzez dziedzinę – projekty mogą być realizowane w
różnych dziedzinach, w różnych branżach i gałęziach biznesu np. IT, edukacja,
telekomunikacja
2. Klasyfikacja projektów poprzez specyfikę - projekty mogą mieć różnorodną
specyfikę uzależnioną od tego co jest efektem finalnym projektu np. projekty
naukowo-badawczye, inwestycyjne, organizacyjnym, społeczne,
3. Klasyfikacja projektów poprzez ich znaczenie – projekty mogą mieć dla organizacji
różne znaczenie np. mogą to być projekty strategiczne lub projekty taktyczne.
4. Klasyfikacja projektów poprzez zakres – projekty przyjmują różny zakres,
możemy wyróżnić np. projekty koncepcyjne czy projekty kompleksowe,
5. Klasyfikacja projektów poprzez pochodzenie – zlecenie na realizację
projektów może pochodzić z wewnątrz lub z zewnątrz organizacji. Projekty mogą być
realizowane na zlecenie wewnętrzne organizacji tzw. zlecenie klienta wewnętrznego
72
lub zewnętrzne realizowane na zlecenie klientów zewnętrznych –najczęściej innych
organizacji.
6. Klasyfikacja projektów poprzez rezultaty- projekty poprzez realizację swoich celów
prowadzą do rożnych typów rezultatów. Dwa główne typy rezultatów to rezultaty
materialne i rezultaty niematerialne.
7. Klasyfikacja projektów poprzez innowacyjności – projektu mogą przyjmować
różny stopieni innowacyjności. Stopnie innowacyjności projektów są różnorodnie
definiowane.
8. Klasyfikacja projektów poprzez zasięg – projekty przyjmują różny zakres w
zależności od skali ich realizacji oraz zasięgu oddziaływania rezultatów projektu np.
projekty wewnątrz organizacyjne, projekty gminne, projekty krajowe, projekty
europejskie ect
9. Klasyfikacja projektów poprzez rozmiar – rozmiar projektu definiowany jest
poprzez skalę wykorzystywanych zasobów głównie budżet projektu. Projekty
dzielimy na małe, małe, średnie, duże. etc
Profil projektu
Bez względu na sposób przyjętej klasyfikacji rozpoczynając realizację projektu należy
zwrócić uwagę na kilka kluczowych dla realizacji projektu czynników, które definiują tzw.
profil projektu. Po pierwsze należy ustalić stopień ryzyka realizacji projektu, określić jakie
ono jest, po drugie przed rozpoczęciem realizacji projektu musimy określić jego wartość
ekonomiczną, oszacować czas realizacji-datę rozpoczęcia i zakończenie, a następnie
opracować ramowy a następnie szczegółowy harmonogram realizacji projektu. Bardzo
istotne jest również określenie stopnia złożoności projektu, musimy dokładnie wiedzieć jak
złożony jest projekt, aby móc to zdiagnozować jak złożone jest wewnętrzne oraz zewnętrzne
środowisko realizacji projektu. Niezmiernie istotne zwłaszcza przy projektach
informatycznych jest określenie parametrów wyboru odpowiedniej technologii, a następnie
jej wybór, stając przed wyborem technologii kierując się określonymi kryteriami np.
technologia znana sprawdzona, a technologia innowacyjna ect. Określenie profilu projektu
pozwala na zakwalifikowanie projektu do odpowiedniej kategorii projektów. Na podstawie
określenie profilu projektu menedżer projektu może zdecydować o wyborze metodologii
zarządzania projektem najskuteczniejszej dla danego projektu.
73
4. Jak zaplanować i przeprowadzić pierwszy
projekt?
Każdy projekt stanowi złożone przedsięwzięcie, szczególnym wyzwaniem pozostaje jednak
zaplanowanie oraz realizacja pierwszego projektu. Każdy projekt jest indywidualnym
przedsięwzięciem, ponieważ spełnia specyficzne cele oraz potrzeby, każdy projekt ma
zatem swój indywidualny „cykl życia” składa się z faz, etapów, zadań i działań specyficznych
dla danego projektu. Rozpoczynając projekt zaraz na początku jeszcze przed podjęciem
konkretnych działań projektowych należy dokładnie rozpoznać potrzeby realizacji projektu, a
następnie na tej podstawie ustalić cel projektu. Kolejnym krokiem jest zaplanowanie założeń
projektu niezbędnych do osiągnięcia celów projektu. Z założeń wynikają konkretne zadania
oraz działania projektowe. Na początku realizacji projektu szczególnie istotne pozostaje
określenie skutecznej koncepcji realizacji projektu. Podstawą tworzenia koncepcji projektu
jest faza idei, która obejmuje okres przed oficjalną decyzją o powołaniu projektu.. W fazie
idei określane są podstawowe idee projektu, dokonywana jest analiza możliwości realizacji
projektu oraz szacunek potencjalnych problemów, które mogą wystąpić w projekcie, a także
potencjalnych możliwości ich rozwiązania lub minimalizacji. Na tej podstawie opracowywana
jest koncepcja realizacji projektu.
Następny faza działań projektowych to zdefiniowanie projektu. W ramach tej fazy
opracowywana zostaje wstępna struktura projektu, określone zostają kompetencje
poszczególnych pracowników projektu oraz zależności pomiędzy nimi. Na tym etapie
realizowana zostaje również ocenę wykonalności realizacji projektu oraz wstępne
szacowanie kosztów. Na podstawie tych ustaleń opracowywany jest początkowo ramowy, a
następnie szczegółowy harmonogram realizacji projektu. W skutecznym zarządzaniu
projektem bardzo istotnym pozostaje również określenie parametrów jakości efektów
projektu co również realizowane jest w fazie definiowania. Etap definiowania podsumowany
zostaje opisem projektu zawierającym wszelkie wymienione powyżej składowe.
Trzeci etap realizacji projektu to tzw. sporządzenie projektu. W ramach etapu trzeciego
dokładnie określane są wszelkie zadania oraz działanie/czynności projektowe niezbędne do
realizacji całego procesu projektu. Na tej podstawie przygotowywany jest plan prac w
projekcie. Następnie na podstawie planu pracy następuje podział obowiązków projektowych.
Zatwierdzana jest również struktura zarządzania projektem, a szczegółowe
odpowiedzialności i obowiązki przyporządkowywane poszczególnym członkom zespołu
projektowego. Na etapie sporządzania projektu następuje uszczegółowienie harmonogramu
realizacji projektu, budżetu projektu oraz jakości efektów końcowych projektu. Mając gotowe
harmonogramy oraz budżet możemy określić sposób oraz plan kontroli realizacji projektu
74
oraz tzw. punkty kontrolne projektu – czyli momenty realizacji projektu w których projekt
kontrolujemy. W opracowywaniu planu kontroli projektu bardzo istotna jest również
znajomość ograniczeń projektowych. Całość etapu trzeciego podsumowane jest
sporządzeniem dokumentacji zawierającej ocenę ryzyka oraz planu zarządzania projektem.
Czwarty etap to realizacja projektu. W ramach tego etapu prowadzona jest realizacjia
projektu zgodnie z wcześniej założonym planem, harmonogramem oraz budżetem. Przez
całą realizację projekt musi być monitorowany, a rezultaty realizacji poszczególnych zadań,
działań/ czynności projektu analizowane i raportowane. Projekt jest „żywym organizmem”
może zmieniać się po już rozpoczętej realizacji, zmieniają się bowiem jego założenia,
warunki prowadzenia czy członkowie zespołu projektowego. W związku z tym projekt
wymaga wprowadzania niezbędnych poprawek na bieżąco w celu realizacji projektu zgodnie
z jego założeniami. Poprawki mogą być wprowadzane w zakresie projektu, harmonogramie,
budżecie oraz kryteriach jakości projektu.
Ostatni etap to zakończenie zakończeniem projektu. Obejmuje on oficjalne zakończenie, z
także szereg czynności sprawozdawczych związanych z zakończeniem projektu takich jak
opracowanie raportu z realizacji projektu , dokonanie oceny podsumowującej projektu,
wyciągniecie najlepszych praktyk z realizacji projektu w celu przeniesienia na grunt realizacji
nowych projektów oraz archiwizacja wszelkich dokumentów projektowych.
Ogólny opis procesu zarządzania projektami przedstawia również J. Kisielnicki, którego na
proces ten składają się cztery podstawowe grupy działań, a są to: zaplanowanie,
organizowanie, motywowanie i kierowanie oraz kontrola wykonania, co wskazano na
Schemacie nr 1.
I etap plan realizacji – w ramach tego etapu identyfikowane są potrzeby realizacji projektu
oraz wymagania stawiane wobec projektu, następnie definiowane są konkretne cele
projektu, których realizacji ma zapewnić osiągnięcie pożądanej jakości rezultatów projektu
(realizacją określonego produktu lub usługi). Etap pierwszy kończy się wyborem najlepszego
sposobu osiągnięcia celu projektu, odzwierciedlonym w opracowanym w budżecie i
harmonogramie.
II etap organizacja procesu – w ramach etapu drugiego realizowane są wszelkie działania
koordynacyjne projektu takie jak koordynacja wykorzystania wszelkich zasobów
projektowych ze szczególnym uwzględnieniem zasobów ludzkich, które w każdym projekcie
stanowią zarazem najmocniejszą i najsłabszą stronę.
75
III etap kierowanie i motywowanie – w ramach realizacji etapu trzeciego prowadzone są
wszelkie prace związane z kierowaniem zespołem projektowym , motywowaniem go do
efektywnych działań, realizacji celów projektowych, a w efekcie uzyskania odpowiednich
rezultatów określonych w celach projektu.
IV etap kontrola wykonania – w ramach etapu czwartego weryfikowane są założone cele
projektowe. Kontroli podlega satysfakcja klientów, dotrzymanie terminów, założenia
budżetowe.
Szczególnie istotna w zarządzaniu projektem jest rola kierownika projektu. Musi on posiadać
szereg umiejętności pozwalających mu na skuteczną realizację projektu. Należy o tym
pamiętać już przy realizacjach pierwszych projektów. Do kluczowych cech kierownika
projektu zaliczyć należy:
● Znajomość wszelkich etapów realizacji projektów
● Znajomość metodyk zarządzania projektami
● Znajomość technik oraz narzędzi prowadzenia projektów
● Umiejętność definiowania projektu, jego zakresu, harmonogramu, budżetu
● Umiejętność zarządzania wszelkim zasobami projektu ( finansowymi, ludzkimi,
rzeczowymi, informacyjnymi)
● Umiejętność prognozowania ryzyk projektowych i zarządzania nimi przed
uruchomieniem projektu , jak również w czasie jego realizacji oraz
ewaluacji.
● Umiejętność kontrolowania realizacji projektu na wszelkich jego etapach.
● Umiejętność efektywnego komunikowania z wewnętrznym oraz zewnętrznym
środowiskiem projektu
Niezwykle istotne jest doświadczenie kierownika oraz umiejętność przewidywania skutków
podejmowanych decyzji, przy jednoczesnej szybkości, prawności i trafności w ich
podejmowaniu, szczególnie w przypadku pojawienia się trudności w projekcie. Mistrzostwo
kierownika projektów możemy poznać podobnie jak w przypadku mistrza szachowego po
umiejętności przewidywania kilu kroków w przód konsekwencji podejmowanych decyzji.
Zarządzania projektami znacząco optymalizuje działanie wielu organizacji, jednak projekty
obciążone są również niepowodzeniami. Szczególnie wiele napięć odczuwa kierownik
projektu który jest katalizatorem pomiędzy otoczeniem zewnętrznym projektu ,a zespołem
projektowym. W zarządzaniu projektami niepowodzenia najczęściej wynikają z:
● nieprecyzyjnego zaplanowania i przygotowania projektu,
● nierealistycznych oczekiwań wobec projektu,
76
● zbyt często wprowadzanych zmian,
● niedopasowania produktu do potrzeb beneficjentów,
● niewystarczającego uwzględniania zagrożeń,
● ignorowania czynników wpływających na trwałości korzyści projektów,
● brak wsparcia ze strony kierownictwa,
● zbyt słabego zaangażowania się użytkowników,
● nieprofesjonalnego planowania realizacji projektu,
● nie wykorzystania zdobytych doświadczeń,
● nieadekwatnego zespół pracowników, zasobów materialnych i finansowych,
● przekroczenia terminu4.
Aby uniknąć niepowodzeń projektowych należy zarządzać projektem metodycznie. Zacząć
przygodę z zarządzaniem projektami od małych projektów, lecz prowadzić je metodycznie, a
następnie krok po kroku wraz ze zdobytym doświadczenie- krok po kroku podejmować się
realizacji coraz większych projektów.
VII Bibliografia
1. P. Charette, A. Mitchell, S. Mazur (red.), E. McSweeney, Poradnik dla samorządów
terytorialnych, Kraków 2004, s. 11.
2. „PRINCE2 – skuteczne zarządzanie projektami”, praca zbiorowa, 2009, wydanie
elektroniczne
3. A Guide to the Project Management Body of Knowledge (PMBOK® Guide) −
Fourth Edition, wydanie polskie, Warszawa 2009, s. 5.
4. Por. Podręcznik − Zarządzanie Cyklem Projektu, Ministerstwo Gospodarki i Pracy, 2004,
s. 6; Red. nauk. M. Trocki, Nowoczesne zarządzanie projektami, Polskie Wydawnictwo
Ekonomiczne, Warszawa 2013, s. 53
77
5. Programowanie w JavaScript. Rusz głową!, Eric T. Freeman, Elisabeth Robson,
O’REILLY
6. Analiza i projektowanie obiektowe. Rusz głową!, Brett D. McLaughlin, Gary Pollice, David
West, O’REILLY
7. http://matblog.pl/jak-pisac-pseudokod-czy-jest-to-komus-potrzebne/
8. http://kursjs.pl
9. https://pl.wikipedia.org/
Polecana literatura
1. Project Management Institute (PMI) -A Guide to the Project Management Body of
Knowledge (PMBOK ® Guide) 4th Edition,
2. TSO. Prince 2 TM – Skuteczne zarządzanie projektami, Norwich, UK, 2009.
Wydanie polskie Centrum Rozwiązań Menadżerskich.
3. M. Chrapko- SCRUM.O zwinnym zarządzaniu projektami, Wydawnictwo Helion
4. Robert K. Wysocki, Ruud McGary. Efektywne zarządzanie projektami,
wyd. III, Helion, Gliwice, 2005
5. Michał Trocki, Bartosz Grucza, Krzysztof Ogonek. Zarządzanie projektami.
PWE. Warszawa, 2003.
6. Nancy Mingus. Zarządzanie projektami. Helion. Gliwice. 2002.
7. J. Davidson Frame. Zarządzanie projektami w organizacjach. MT&DC.
Warszawa, 2001.
8. Zdzisław Szyjewski. Zarządzanie projektami informatycznymi. Placet.
Warszawa, 2001.
9. Joseph Phillips. Zarządzanie projektami IT. Helion. Gliwice, 2010.
10. „UX i analiza ruchu w sieci. Praktyczny poradnik” Michael Beasley, Wydawnictwo Helion,
2014
1. „Funkcjonalność aplikacji mobilnych. Nowoczesne standardy UX i UI”, Jakob Nielsen, Raluca
Budiu, Wydawnictwo Helion, 2013
2. „Magia interfejsu. Praktyczne metody projektowania aplikacji internetowych”, Robert
Hoekman jr, Wydawnictwo Helion, 2010
3. „Projektowanie nawigacji strony WWW. Optymalizacja funkcjonalności witryny”, James
Kalbach , Wydawnictwo Helion, 2012