podrecznik scalony.docx 4

78
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/

Upload: kamil-mrozek

Post on 30-Jan-2016

242 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Podrecznik Scalony.docx 4

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/

Page 2: Podrecznik Scalony.docx 4

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.

Page 3: Podrecznik Scalony.docx 4

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

Page 4: Podrecznik Scalony.docx 4

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.

Page 5: Podrecznik Scalony.docx 4

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.

Page 6: Podrecznik Scalony.docx 4

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

Page 7: Podrecznik Scalony.docx 4

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.

Page 8: Podrecznik Scalony.docx 4

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.

Page 9: Podrecznik Scalony.docx 4

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”

Page 10: Podrecznik Scalony.docx 4

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.:

Page 11: Podrecznik Scalony.docx 4

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

Page 12: Podrecznik Scalony.docx 4

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.

Page 13: Podrecznik Scalony.docx 4

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

Page 14: Podrecznik Scalony.docx 4

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.

Page 15: Podrecznik Scalony.docx 4

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.

Page 16: Podrecznik Scalony.docx 4

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.

Page 17: Podrecznik Scalony.docx 4

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

Page 18: Podrecznik Scalony.docx 4

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)

Page 19: Podrecznik Scalony.docx 4

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:

Page 20: Podrecznik Scalony.docx 4

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.

Page 21: Podrecznik Scalony.docx 4

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

Page 22: Podrecznik Scalony.docx 4

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

Page 23: Podrecznik Scalony.docx 4

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; }

Page 24: Podrecznik Scalony.docx 4

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.

Page 25: Podrecznik Scalony.docx 4

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

Page 26: Podrecznik Scalony.docx 4

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:

Page 27: Podrecznik Scalony.docx 4

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.

Page 28: Podrecznik Scalony.docx 4

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

Page 29: Podrecznik Scalony.docx 4

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

Page 30: Podrecznik Scalony.docx 4

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:

Page 31: Podrecznik Scalony.docx 4

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

Page 32: Podrecznik Scalony.docx 4

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’;

Page 33: Podrecznik Scalony.docx 4

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

Page 34: Podrecznik Scalony.docx 4

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

{

Page 35: Podrecznik Scalony.docx 4

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).

Page 36: Podrecznik Scalony.docx 4

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 } })

Page 37: Podrecznik Scalony.docx 4

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

Page 38: Podrecznik Scalony.docx 4

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.

Page 39: Podrecznik Scalony.docx 4

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

Page 40: Podrecznik Scalony.docx 4

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.

Page 41: Podrecznik Scalony.docx 4

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.

Page 42: Podrecznik Scalony.docx 4

41

Ekran systemu Windows Mobile 6.5

https://en.wikipedia.org/wiki/Windows_Mobile#/media/File:Winmo65.PNG

Ekran systemu iPhone OS (obecnie iOS)

Page 43: Podrecznik Scalony.docx 4

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

Page 44: Podrecznik Scalony.docx 4

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

Page 45: Podrecznik Scalony.docx 4

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

Page 46: Podrecznik Scalony.docx 4

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

Page 47: Podrecznik Scalony.docx 4

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

Page 48: Podrecznik Scalony.docx 4

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

Page 49: Podrecznik Scalony.docx 4

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

Page 50: Podrecznik Scalony.docx 4

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

Page 51: Podrecznik Scalony.docx 4

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.

Page 52: Podrecznik Scalony.docx 4

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.

Page 53: Podrecznik Scalony.docx 4

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

Page 54: Podrecznik Scalony.docx 4

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

{

Page 55: Podrecznik Scalony.docx 4

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

Page 56: Podrecznik Scalony.docx 4

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.

Page 57: Podrecznik Scalony.docx 4

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

Page 58: Podrecznik Scalony.docx 4

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();

Page 59: Podrecznik Scalony.docx 4

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

Page 60: Podrecznik Scalony.docx 4

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

Page 61: Podrecznik Scalony.docx 4

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

Page 62: Podrecznik Scalony.docx 4

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.

Page 63: Podrecznik Scalony.docx 4

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

Page 64: Podrecznik Scalony.docx 4

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

Page 65: Podrecznik Scalony.docx 4

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 .

Page 66: Podrecznik Scalony.docx 4

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:

Page 67: Podrecznik Scalony.docx 4

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.

Page 68: Podrecznik Scalony.docx 4

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.

Page 69: Podrecznik Scalony.docx 4

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

Page 70: Podrecznik Scalony.docx 4

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.

Page 71: Podrecznik Scalony.docx 4

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

Page 72: Podrecznik Scalony.docx 4

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

Page 73: Podrecznik Scalony.docx 4

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.

Page 74: Podrecznik Scalony.docx 4

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

Page 75: Podrecznik Scalony.docx 4

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ę.

Page 76: Podrecznik Scalony.docx 4

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,

Page 77: Podrecznik Scalony.docx 4

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

Page 78: Podrecznik Scalony.docx 4

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