Programowanie. Teoria i praktyka z wykorzystaniem C++
Programowanie. Teoria i praktyka z wykorzystaniem C++ Programowanie. Teoria i praktyka z wykorzystaniem C++
6.2. PRZEMYLENIE PROBLEMU 177 nawet lepszym ni napisanie ich. Papier (lub komputer) nie bdzie z Tob dyskutowa i krytycznie ocenia Twoich pogldów. Idealny etap projektowania to taki, który przeprowadza si w towarzystwie. Niestety nie ma takiej ogólnej strategii rozwizywania problemów, która odpowiadaaby wszystkim ludziom i pozwalaa rozwiza kady problem. Istnieje mnóstwo ksiek, których autorzy twierdz, e pomog Ci efektywniej rozwizywa problemy, oraz caa masa publikacji na temat projektowania programów. Nasza droga nie wiedzie poprzez nie. W zamian opiszemy gar ogólnych wskazówek, które mog by pomocne w rozwizywaniu mniejszych problemów. Nastpnie szybko przejdziemy do wypróbowywania tych sugestii na naszym maym kalkulatorze. Czytajc tre naszych rozwaa na temat kalkulatora, oceniaj to, co widzisz, bardzo sceptycznym okiem. Aby zachowa realizm, przedstawimy ewolucj naszego programu poprzez szereg wersji. Opiszemy argumenty, które doprowadziy nas do powstania kadej z nich. Oczywicie znaczna cz tej argumentacji musi by niekompletna lub bdna, inaczej szybko bymy skoczyli ten rozdzia. Naszym celem jest pokazanie przykadowych problemów i procesów mylowych charakterystycznych dla procesu projektowania i implementowania programu. Wersja, z której jestemy ostatecznie zadowoleni, zostanie przedstawiona dopiero na kocu nastpnego rozdziau. Pamitaj, e w tym i nastpnym rozdziale proces dochodzenia do finalnej wersji programu — droga wiodca przez niepene rozwizania, pomysy i bdy — jest co najmniej tak samo wany, jak wersja ostateczna i waniejszy ni narzdzia techniczne jzyka programowania, których bdziemy uywa (wrócimy do nich póniej). 6.2.1. Etapy rozwoju oprogramowania Poniej przedstawimy nieco terminologii zwizanej z tworzeniem oprogramowania. Pracujc nad rozwizaniem problemu, wielokrotnie powtarza si nastpujce fazy: Analiza — przemyl, co masz zrobi, i opisz, jak to aktualnie rozumiesz. Taki opis nazywa si zestawem wymaga lub specyfikacj. Nie bdziemy szczegóowo opisywa technik opracowywania i opisywania takich wymogów. Temat tej ksiki tego nie obejmuje, ale naley pamita, e w miar zwikszania si rozmiaru problemu techniki te nabieraj wagi. Projektowanie — utworzenie ogólnej struktury systemu i podjcie decyzji, na jakie czci podzieli implementacj oraz jak powinny si one ze sob komunikowa. W ramach projektowania zastanów si jakie narzdzia — np. biblioteki — moesz wykorzysta do opracowania struktury programu. Implementacja — napisz kod, usu bdy oraz sprawd za pomoc testów, czy robi to, co powinien. 6.2.2. Strategia Oto gar wskazówek, które — jeli zostan zastosowane z rozwag i wyobrani — bd pomocne w wielu projektach programistycznych: Jaki problem jest do rozwizania? Przede wszystkim naley stara si dokadnie opisa, co chce si zrobi. Najczciej oznacza to sporzdzenie opisu problemu lub, jeli kto
178 ROZDZIA 6 • PISANIE PROGRAMU inny da nam zadanie do wykonania, prób odszyfrowania, co dokadnie to oznacza. W tym momencie naley przyj punkt widzenia uytkownika (nie programisty czy implementatora). To znaczy, zamiast zastanawia si, jak rozwiza problem, pomyl, co program ma w ogóle robi. Zadawaj pytania typu: „Co ten program moe dla mnie zrobi?” albo „W jaki sposób chciabym komunikowa si z tym programem?”. Pamitaj, e wikszo z nas moe korzysta z wasnego bogatego dowiadczenia jako uytkownika komputerów. Czy problem zosta jasno nakrelony? W realnym wiecie nigdy nie jest. Nawet w takim wiczeniu trudno jest opisa go wystarczajco precyzyjnie. Dlatego staramy si wszystko wyjani. Szkoda by byo, gdybymy rozwizali nie ten problem, co trzeba. Inna puapka to wygórowane wymagania. Obmylajc, co bymy chcieli, atwo moemy ulec chciwoci lub nadmiernym ambicjom. Zawsze lepiej jest obniy wymagania, aby uatwi napisanie specyfikacji programu, jego zrozumienie, uytkowanie oraz (tak trzeba mie nadziej) implementacj. Gdy zadziaa, zawsze mona napisa wzbogacon wersj 2.0. Czy problem wydaje si moliwy do rozwizania w przewidzianym czasie oraz przy okrelonym zasobie umiejtnoci i dostpnych narzdziach? Nie ma sensu rozpoczyna projektu, którego nie mamy szans ukoczy. Jeli jest za mao czasu na implementacj (wcznie z testowaniem) wszystkich wymaganych funkcji programu, zazwyczaj lepiej jest go w ogóle nie zaczyna. Lepiej zamiast tego zdoby wicej zasobów (zwaszcza czasu) lub (idealnie) zmieni wymagania, aby uatwi zadanie. Spróbuj podzieli program na dajce si ogarn mylami czci. Nawet najmniejszy program rozwizujcy realny problem mona podzieli na czci. Znasz jakie narzdzia, biblioteki itp., które mog by pomocne? Odpowied prawie zawsze brzmi: tak. Od samego pocztku nauki programowania masz do dyspozycji zawarto standardowej biblioteki C++. Póniej poznasz znaczn jej cz i dowiesz si, jak poszukiwa jeszcze wicej. Bdziesz korzysta z bibliotek graficznych, macierzy itp. Majc odrobin dowiadczenia, bdziesz w stanie znale tysice bibliotek w internecie. Pamitaj — nie ma sensu wywaa otwartych drzwi, jeli tworzy si oprogramowanie do realnego uytku. Co innego w czasie nauki programowania. Wówczas takie dziaania w celu sprawdzenia, jak to zrobili inni, maj gboki sens. Cay czas, który oszczdzisz dziki wykorzystaniu istniejcych bibliotek, moesz powici na prac nad innymi czciami problemu albo na odpoczynek. Skd wiadomo, czy dana biblioteka spenia nasze wymagania i prezentuje odpowiedni jako? To trudne pytanie. Mona spyta znajomych, popyta na grupach dyskusyjnych i wypróbowa kilka krótkich przykadów, zanim si zdecydujemy. Wyodrbnij takie czci rozwizania, które mona opisa oddzielnie od reszty (i potencjalnie wykorzysta w kilku miejscach programu, a nawet w innych programach). Umiejtno znajdowania takich czci przychodzi z dowiadczeniem, dlatego w ksice tej przedstawiamy wiele takich przykadów. Uywalimy ju wektorów, acuchów i strumieni (cin i cout). W tym rozdziale po raz pierwszy przedstawimy przykady projektów, implementacji i wykorzystania czci programów dostpnych jako typy
- Page 1 and 2: Programowanie. Teoria i praktyka z
- Page 3 and 4: 4 SPIS TRECI Rozdzia 1. Komputery,
- Page 5 and 6: 6 SPIS TRECI Rozdzia 6. Pisanie pro
- Page 7 and 8: 8 SPIS TRECI Cz II Wejcie i wyjcie
- Page 9 and 10: 10 SPIS TRECI 14.2. Klasa Shape 448
- Page 11 and 12: 12 SPIS TRECI 18.5.3. Inicjowanie t
- Page 13 and 14: 14 SPIS TRECI 22.2. Krótka histori
- Page 15 and 16: 16 SPIS TRECI 26.3.3. Algorytmy i n
- Page 17 and 18: 18 SPIS TRECI Dodatek D Instalowani
- Page 19: 176 ROZDZIA 6 • PISANIE PROGRAMU
- Page 23 and 24: 180 ROZDZIA 6 • PISANIE PROGRAMU
- Page 25 and 26: 182 ROZDZIA 6 • PISANIE PROGRAMU
- Page 27 and 28: 184 ROZDZIA 6 • PISANIE PROGRAMU
- Page 29 and 30: 186 ROZDZIA 6 • PISANIE PROGRAMU
- Page 31 and 32: 188 ROZDZIA 6 • PISANIE PROGRAMU
- Page 33 and 34: 190 ROZDZIA 6 • PISANIE PROGRAMU
- Page 35 and 36: 192 ROZDZIA 6 • PISANIE PROGRAMU
- Page 37 and 38: 194 ROZDZIA 6 • PISANIE PROGRAMU
- Page 39 and 40: 196 ROZDZIA 6 • PISANIE PROGRAMU
- Page 41 and 42: 198 ROZDZIA 6 • PISANIE PROGRAMU
- Page 43 and 44: 200 ROZDZIA 6 • PISANIE PROGRAMU
- Page 45 and 46: 202 ROZDZIA 6 • PISANIE PROGRAMU
- Page 47 and 48: 204 ROZDZIA 6 • PISANIE PROGRAMU
- Page 49 and 50: 206 ROZDZIA 6 • PISANIE PROGRAMU
- Page 51 and 52: 208 ROZDZIA 6 • PISANIE PROGRAMU
- Page 53 and 54: 210 ROZDZIA 6 • PISANIE PROGRAMU
- Page 55 and 56: w i c z e n i a 212 ROZDZIA 6 • P
- Page 57 and 58: 214 ROZDZIA 6 • PISANIE PROGRAMU
178 ROZDZIA 6 • PISANIE PROGRAMU<br />
inny da nam zadanie do wykonania, prób odszyfrowania, co dokadnie to oznacza.<br />
W tym momencie naley przyj punkt widzenia uytkownika (nie programisty czy<br />
implementatora). To znaczy, zamiast zastanawia si, jak rozwiza problem, pomyl, co<br />
program ma w ogóle robi. Zadawaj pytania typu: „Co ten program moe dla mnie zrobi?”<br />
albo „W jaki sposób chciabym komunikowa si z tym programem?”. Pamitaj, e<br />
wikszo z nas moe korzysta z wasnego bogatego dowiadczenia jako uytkownika<br />
komputerów.<br />
Czy problem zosta jasno nakrelony? W realnym wiecie nigdy nie jest. Nawet<br />
w takim wiczeniu trudno jest opisa go wystarczajco precyzyjnie. Dlatego staramy si<br />
wszystko wyjani. Szkoda by byo, gdybymy rozwizali nie ten problem, co trzeba.<br />
Inna puapka to wygórowane wymagania. Obmylajc, co bymy chcieli, atwo moemy<br />
ulec chciwoci lub nadmiernym ambicjom. Zawsze lepiej jest obniy wymagania,<br />
aby uatwi napisanie specyfikacji programu, jego zrozumienie, uytkowanie oraz<br />
(tak trzeba mie nadziej) implementacj. Gdy zadziaa, zawsze mona napisa<br />
wzbogacon wersj 2.0.<br />
Czy problem wydaje si moliwy do rozwizania w przewidzianym czasie oraz przy<br />
okrelonym zasobie umiejtnoci i dostpnych narzdziach? Nie ma sensu rozpoczyna<br />
projektu, którego nie mamy szans ukoczy. Jeli jest za mao czasu na implementacj<br />
(wcznie z testowaniem) wszystkich wymaganych funkcji programu,<br />
zazwyczaj lepiej jest go w ogóle nie zaczyna. Lepiej zamiast tego zdoby wicej<br />
zasobów (zwaszcza czasu) lub (idealnie) zmieni wymagania, aby uatwi zadanie.<br />
Spróbuj podzieli program na dajce si ogarn mylami czci. Nawet najmniejszy<br />
program rozwizujcy realny problem mona podzieli na czci.<br />
Znasz jakie narzdzia, biblioteki itp., które mog by pomocne? Odpowied prawie<br />
zawsze brzmi: tak. Od samego pocztku nauki programowania masz do dyspozycji<br />
zawarto standardowej biblioteki <strong>C++</strong>. Póniej poznasz znaczn jej cz<br />
i dowiesz si, jak poszukiwa jeszcze wicej. Bdziesz korzysta z bibliotek graficznych,<br />
macierzy itp. Majc odrobin dowiadczenia, bdziesz w stanie znale tysice<br />
bibliotek w internecie. Pamitaj — nie ma sensu wywaa otwartych drzwi, jeli<br />
tworzy si oprogramowanie do realnego uytku. Co innego w czasie nauki programowania.<br />
Wówczas takie dziaania w celu sprawdzenia, jak to zrobili inni, maj<br />
gboki sens. Cay czas, który oszczdzisz dziki wykorzystaniu istniejcych bibliotek,<br />
moesz powici na prac nad innymi czciami problemu albo na odpoczynek.<br />
Skd wiadomo, czy dana biblioteka spenia nasze wymagania i prezentuje<br />
odpowiedni jako? To trudne pytanie. Mona spyta znajomych, popyta na<br />
grupach dyskusyjnych i wypróbowa kilka krótkich przykadów, zanim si zdecydujemy.<br />
Wyodrbnij takie czci rozwizania, które mona opisa oddzielnie od reszty (i potencjalnie<br />
wykorzysta w kilku miejscach programu, a nawet w innych programach).<br />
Umiejtno znajdowania takich czci przychodzi z dowiadczeniem, dlatego w ksice<br />
tej przedstawiamy wiele takich przykadów. Uywalimy ju wektorów, acuchów<br />
i strumieni (cin i cout). W tym rozdziale po raz pierwszy przedstawimy przykady<br />
projektów, implementacji i wykorzystania czci programów dostpnych jako typy