Programowanie. Teoria i praktyka z wykorzystaniem C++

Programowanie. Teoria i praktyka z wykorzystaniem C++ Programowanie. Teoria i praktyka z wykorzystaniem C++

pdf.helion.pl
from pdf.helion.pl More from this publisher
16.07.2014 Views

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

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!