Prof.nadzw.dr hab.inż. Władysław Brzozowski Cz*stochowa-Gliwice, 15.02.1999 r.
Politechnika Częstochowska
Instytut Elektroenergetyki
Wykłady z przedmiotu:
TECHNIKA PROGRAMOWANIA
studia magisterskie, kierunek Elektrotechnika,
specjalno** Informatyka w Elektroenergetyce, sem.VI
Wyk*ad 2. Informatyka. Software. Klasyfikacja oprogramowania. Zasady techniki programowania. Fazy procesu programowania
2.1. Informatyka
Informatyk* og*lnie dekomponuje si* na nast*puj*ce dziedziny:
Informatyka
| - hardware (urzadzenia, aparatura)
| - software (oprogramowanie)
| - firmware (zintegrowane systemy urz*dze* i oprogramowania, np.
wielkie sieci komputerowe rezerwacji bilet*w lotniczych)
| - orgware (indywidualne systemy organizacyjne u*ytkownik*w)
Zajmujemy si* software'em czyli oprogramowaniem, i to tylko od strony techniki, tj. g**wnie jezyk*w programowania.
2.2. Software. Klasyfikacja oprogramowania
Oprogramowanie
| - systemy operacyjne mikrokomputer*w (DOS, Unix, QNX)
| - programy pomocnicze nak*adkowe na system operacyjny (NC)
| - pakiet programowy *rodowiska Windows
| - programy lub pakiety programowe j*zyk*w programowania (np.
| Turbo Pascal)
| - pakiety programowe system*w u*ytkowych
| | - pakiety zintegrowane (Framework, Symphony, Applause,
| | Works)
| | - edytory tekstowe (Chi Writer, Word, Word Perfect)
| | - arkusze kalkulacyjne (Lotus 1-2-3, Excel)
| | - bazy danych (DBase, Clipper, Oracle)
| | - systemy typu CAD/CAM
| | - systemy grafiki i poligrafii (Ventura, CorelDraw)
| | - systemy sieciowe (Novell)
| | - systemy zarz*dzania biurami i firmami (Office)
| | - systemy organizacji pracy (Microsoft Project)
| | - inne systemy u*ytkowe
| - programy i pakiety programowe indywidualnych programist*w
lub firm software'owych
2.3. Klasyfikacja j*zyk*w programowania
2.3.1. Klasyfikacja ze wzgl*du na przeznaczenie j*zyka
J*zyki programowania
| - j*zyki niskiego poziomu
| | - j*zyk wewn*trzny mikrokomputera (rozkazy mikroproceso-
| | ra w postaci binarnej; adresy o numerach bezpo*rednich;
| | aktualnie nie pisze si* program*w w j*zyku wewn*trz- | | nym; stosuje si* go jako wstawki programowe w j*zyku | | wysokiego poziomu oraz przy programowaniu | | mikroprocesor*w i ma*ych mikrokomputer*w jedno- | | uk*adowych)
| | - assembler (rozkazy mikroprocesora w postaci tzw. | | mnemonik*w; adresy pami*ci w postaci symbolicznej; w | | j*z. Turbo Pascal wbudowany jest wewn*trzny | | assembler; programy napisane w assemblerze cechuj* si* | | du** szybko*ci* i oszcz*dno*ci* pami*ci)
| - j*zyki wysokiego poziomu (symboliczne)
| - j*zyki uniwersalne (Algol, Fortran, Basic, C, Pascal, Turbo | Pascal)
| - j*zyki specjalistyczne
| | - j*zyki system*w zintegrowanych (np. w Framework)
| | - j*zyki edytor*w (np. WordBasic w Word)
| | - j*zyki arkuszy kalkulacyjnych (np. w Excel)
| | - j*zyki baz danych (np. DBase IV, Clipper, Oracle)
| | - j*zyki symulacyjne (Simula, Simscript, GPSS)
| | - j*zyki system*w przetwarzania danych (Cobol)
| | - j*zyki sztucznej inteligencji (Prolog, LISP)
| - j*zyki programisty (pseudo-j*zyki).
2.3.2. Klasyfikacja ze wzgl*du na strukturyzacj* problemu
J*zyki programowania
| - j*zyki strukturalne (takie, kt*re odwzorowuj* z*o*on* struktur* | problemu obliczeniowego lub obiektu modelowanego - Algol, | Pascal, Turbo Pascal, Simula, Prolog, LISP)
| - j*zyki niestrukturalne (wszystkie j*zyki niskiego poziomu oraz j*zyki wysokiego poziomu, niewymienione powy*ej np. C)
2.3.3. Klasyfikacja ze wzgl*du na matematyczn* i logiczn* prezentowalno** algorytm*w
J*zyki programowania
| - j*zyki algorytmiczne (Algol, Pascal, Turbo Pascal)
| - j*zyki niealgorytmiczne (wszystkie pr*cz wy*ej wymienionych)
2.3.4. Klasyfikacja ze wzgl*du na realizacj* program*w wykonawczych
J*zyki programowania
| - j*zyki interpretowane (takie, *e program w nich napisany | wyst*puje tylko w postaci zbioru *r*d*owego; w momencie | realizacji takiego programu jest on t*umaczony instrukcja po | instrukcji na j*zyk wewn*trzny mikrokomputera i wykonywa- | ny. To t*umaczenie nazywa si* interpretacj* i realizowane jest | przez program -interpretator j*zyka. Interpretator musi by* | wczytany do pami*ci operacyjnej i dzia*a* stale podczas | wykonywania programu. Cech* j*zyk*w interpretowa- | nych jest w zwi*zku z tym powolno**, du*a zaj*to** pami*ci | operacyjnej; zalet* -wi*ksza elastyczno**, mo*liwo** korekt w | trakcie realizacji programu. J*zykami interpretowanymi s* | Basic, DBase
| - j*zyki kompilowane (takie, *e program napisany w tych jezykach, przed pierwszym wykonaniem jest jednorazowo t*umaczony na j*zyk wewn*trzny mikrokomputera. To t*umaczenie nazywa si* kompilacj* i realizowane jest przez program j*zyka - kompilator. P**niej wykonywany jest ju* wielokrotnie tylko gotowy program wykonawczy bez potrzeby wczytywania kompilatora. Taki tryb post*powania by* w*a*ciwy dla starszych j*zyk*w takich jak Algol, Fortran. W nowszych (C, Turbo Pascal) jest nadal taka mo*liwo** (nazywa si* to wykorzystaniem zewn*trznego kompilatora - w Turbo Pascalu ma on nazw* tpc.exe); wykorzystuje si* j* przy pisaniu bardzo du*ych program*w. W przypadku program*w mniejszych, uruchamia si* je wewn*trz systemu j*zyka. Jest to korzystne szczeg*lnie w trakcie pisania i uruchamiania programu; mo*na korzysta* w*wczas z edytora oraz programu debuggera (usuwania b**d*w), kt*re s* wbudowane w system. J*zykami kompilowanymi s* wszystkie inne, opr*cz powy*ej wymienio- nych.
2.4. Zasady techniki programowania. Wyb*r j*zyka programowania
G**wnym problemem, kt*ry stoi przed informatykiem - programist* jest decyzja: czy wybra* jeden z gotowych pakiet*w u*ytkowych czy te* opracowywa* w*asne programy, systemy i pakiety.
Taniej i szybciej jest wybra* gotowy pakiet. Maj* one cz*sto wiele udogodnie* formalnych, systemy okien, w*asne edytory itd., ale niestety wi*kszo** takich pakiet*w reprezentuje cz*sto niski poziom merytoryczny (matematyczny). Pierwszym krokiem jest wi*c zawsze gruntowne przetestowanie pakiet*w dost*pnych na rynku. Nale*y im zada* jaki* z*o*ony problem obliczeniowy, kt*rego optymalne rozwi*zanie jest wcze*niej przygotowane i znane, i zbada* jak zostanie ono przez badany pakiet potraktowane. Wad* gotowych pakiet*w jest te* to, *e s* najcz**ciej niekompatybilne z innymi systemami i niedost*pne adaptacyjnie. Systemy zachodnie zw*aszcza z zakresu zarz*dzania zwykle nadal jeszcze nie odpowiadaj* warunkom krajowym.
Nie b*dziemy zajmowa* si* pakietami gotowymi. Zak*adamy, *e podj*li*my decyzj* o samodzielnym opracowaniu programu lub pakietu programowego. W takim razie nast*pn* decyzj* jest wyb*r j*zyka programowania, a szczeg*lnie czy wybra* j*zyk uniwersalny (Turbo Pascal, C, Borland Delphi), czy jeden z j*zyk*w specjalistycznych.
Decyzja ta zale*y od rozmiaru problemu projektowego. Przyk*adowo: je*li ma si* stworzy* du** baz* danych np. dla remont*w du*ego zak*adu przemys*owego, to bezwzgl*dnie nale*y u*y* specjalizowanego i nowoczesnego j*zyka baz danych (np. Oracle). Je*li ma to by* baza niewielka (do 1000 rekord*w) i lokalna jakiego* dzia*u, to wygodniej i taniej jest j* napisa* w j*zyku uniwersalnym (np. Turbo Pascalu). To samo dotyczy system*w symulacyjnych.
Aktualnie zaleca si* programowa* w j*zyku Borland Delphi (kt*ry staje si* standardem). Jest to j*zyk programowania obiektowego z wykorzystaniem gotowych bibliotek metod (tak nazywamy podprogramy i funkcje wchodz*ce w sk*ad obiekt*w). J*zyk ten uwalnia nas od konieczno*ci pisania tzw. program*w i podprogram*w narz*dziowych. Zaleta jego jest te* to, *e programy wykonawcze, czyli aplikacje zyskuj* ujednolicon* standardow* posta* do kt*rej zwykle przyzwyczajaj* si* u*ytkownicy.
Borland Delphi opiera si* o j*zyk Borland Pascal. Konieczne jest, przed pisaniem program*w w tym j*zyku, dobrze opanowa* klasyczn* technik* programowania, w tym zrozumie* dobrze nie*atw* filozofi* programowania obiektowego, aby moc przej** potem na wy*szy poziom techniki programowania.
2.5. Fazy procesu programowania
Wyr**nia si* nast*puj*ce fazy procesu programowania:
Analiza obliczeniowego problemu technicznego. Sformu*owanie celu oblicze*. Jakiego typu rozwi*zania oczekujemy od procesu obliczeniowego.
Dob*r odpowiedniej metody matematycznej. Metoda powinna by* jak najprostsza. Nale*y wykorzysta* du** szybko** oblicze* mikrokomputera. Przyk*adowo: rozwi*zuj*c problem optymalizacji nale*y preferowa* prost* metod* przeliczania wszystkich mo*liwych wariant*w rozwi*zania, nawet je*li komputer liczy*by ten problem kilka godzin a mo*e nawet dni. Dopiero gdy problem jest tak du*y, *e komputer nie policzy go w rozs*dnym czasie, trzeba uciec si* do bardziej z*o*onych metod matematycznych np. analitycznych z zakresu tzw. bada* operacyjnych. Cz*sto warto skorzysta* z metod tzw. heurystycznych, kt*re na*laduj* mechanizmy my*lenia m*zgu ludzkiego. Metody te nie s* tak *cis*e jak analityczne, ale na og** znacznie efektywniejsze.
Dekompozycja problemu, czyli podzia* na niezale*ne systemy mikrokomputerowe; w ramach jednego systemu na pakiety mikrokomputerowe; w ramach pakietu na programy; w ramach programow na modu*y. Okre*lenie architektury oraz funkcji poszczeg*lnych sk*adowych problemu.
Opracowanie algorytmu - do programu lub w przypadku du*ego programu - do poszczeg*lnych modu**w. Algorytmem nazywamy ci*g wzor*w matematycznych rozwi*zuj*cy dany problem, obejmuj*cy i funkcje matematyczne i kompletne funkcje logiczne. Je*li problem nie jest bardzo skomplikowany, to algorytm tworzy si* automatycznie w trakcie pisania programu. Je*li jednak problem jest z*o*ony, to algorytm nale*y sporz*dzi* wcze*niej na papierze. Warto taki algorytm opracowa* w postaci tabelarycznej, w uk*adzie kolumn: - numer bloku obliczeniowego algorytmu; - nazwa bloku obliczeniowego; - co wyliczamy w danym bloku; - wzory matematyczne i logiczne; - symbole matematyczne zmiennych; - jednostki; - symbole programowe zmiennych; - typy zmiennych programowych; - formaty zmiennych programowych; - pochodzenie zmiennych programowych (gdzie czytane lub gdzie wcze*niej obliczone); - uwagi. Bardzo pomocna jest tu tak*e forma schematu blokowego oblicze*. Niekiedy schemat taki rysuje si* na roboczo dla rozpracowania jakiego* jednego podprogramu a nawet jednej instrukcji, np. szczeg*lnie z*o*onej instrukcji logicznej. Je*li pisze si* niezbyt du*y program, to wszystkie powy*sze dane: wzory, zmienne, typy, formaty, pochodzenie zmiennych itd. mo*na zamie*ci* wprost w programie w postaci komentarzy. Generalnie w programie *r*d*owym warto pisa* jak najwi*cej komentarzy, gdy* wracaj*c do programu po jakim* czasie cz*sto ju* si* nie pami*ta o co w nim chodzi*o.
Zaprojektowanie dokument*w *rod*owych oraz wydawnictw, czyli wej*cia-wyj*cia z programu.
Napisanie tekstu programu, pod wewn*trznym edytorem systemu programowania, z zapisem na dysk.
Uruchamianie programu. Faza usuwania b**d*w sk*adniowych w trakcie kompilacji. B**dy sk*adniowe wy*apuje sam kompilator.
Uruchamianie programu. Faza usuwania b**d*w formalnych, np. postaci wydawnictw, format*w liczb itp. Bl*d*w tych kompilator nie jest w stanie wykry*, ale s* one dobrze zwykle widoczne przy pr*bnych obliczeniach.
Je*li stwierdza si*, w trakcie wst*pnych prac uruchomieniowych, *e program jest powolny, nie mie*ci si* w pami*ci, zajmuje za du*o miejsca na dysku lub w pami*ci operacyjnej, to po fazie wst*pnego testowania programu nast*puje faza jego optymalizacji.
Uruchamianie programu. Faza usuwania b**d*w merytorycznych. B**dy te s* cz*sto niewidoczne, cho* gro*ne, bo powoduj* zafa*szowanie wynik*w oblicze*. Obowi*zuje generalna zasada, *e nie wolno oddawa* u*ytkownikowi programu, kt*ry nie zosta*by gruntownie przetestowany. To testowanie musi odbywa* si* na drodze r*wnoleg*ych oblicze* kontrolnych realizowanych na kalkulatorze lub, je*li to wyj*tkowo jest mo*liwe, przez por*wnanie z wynikami z innego podobnego programu, co do poprawno*ci ktorego ma si* zaufanie. Obliczenia kontrolne powinny by* wielowariantowe. Dane do tych oblicze* nale*y przygotowa* w nast*puj*cy spos*b: - ka*dy program mo*na przedstawi* w postaci drzewa rozga*eziaj*cych si* *cie*ek. Takie rozga**zienia w jez. Turbo Pascal wynikaj* np. z instrukcji wyboru "Case nazwa_zmiennej of", z instrukcji warunkowej "if warunek then else", z instrukcji skoku itp. W trakcie oblicze* kontrolnych sterowanie powinno przej** cho*by raz po ka*dej *cie*ce rozga**zie*; - nale*y tak przygotowa* dane kontrolne, by przetestowany zosta* ka*dy cho*by najmniejszy podprogram lub funkcja, a tak*e ka*da opcja wszystkich menu programu; - warto*ci wej*ciowych danych kontrolnych dobra* tak zw*aszcza, *eby wypada*y na: granicy przedzia**w deklaracji zmiennych i granicach wyra*e* logicznych w instrukcjach warunkowych, w punktach nieci*g*o*ci r**nych zmiennych i charakterystyk. Do*wiadczenie uczy, *e b**dy najcze*ciej pope*nia si* na r**nych tego typu granicach.
Przedostatnia faza jest to tzw. kosmetyka programu, czyli drobne poprawki i upi*kszenia programu.
Ostatni* faz* jest wydanie dokumentacji programu, tj. obowi*zkowo instrukcji dla u*ytkownika. Zwykle u*ytkownikowi nie udost*pnia si* program*w *r*d*owych, ale teksty tych program*w warto wydrukowa* na papierze i z*o*y* we w*asnym archiwum, niezale*nie od zabezpieczenia tekst*w tych program*w na no*nikach magnetycznych lub CD w kilku kopiach.
2.6. Wytyczne pisania programu
Dobry program:
ma struktur* modu*ow* i nak*adkow*. Chodzi o to by zajmowa* jak najmniej miejsca w pami*ci operacyjnej;
zawiera du*o procedur i funkcji. Powt*rzenie jakiego* fragmentu tekstu jest b**dem w sztuce programowania - nale*y fragment ten zorganizowa* w postaci podprogramu lub funkcji;
uwzgl*dnia ka*d* sytuacj* obliczeniowa (np. koincydencj* danych), jaka mo*e si* zdarzy* w przysz*o*ci i ma z g*ry okre*lone procedury dzia*ania w tych sytuacjach;
ma z*o*on* cho* maksymalnie uporz*dkowan* struktur*. Sprawdzianem, *e program jest dobrze napisany jest brak w nim (lub jest minimalna liczba) instrukcji skoku "goto etykieta". Dobry program wykorzystuje wiele wzajemnie zagnie*d*onych instrukcji "Case zmienna of";
jest w maksymalnym stopniu przyjazny u*ytkownikowi tzw. user friendly, tzn. ma zorganizowane rozwijaj*ce si* menu sterowane klawiszami kursora lub mysz*, ma wewn*trzny w*asny edytor u*atwiaj*cy wprowadzanie danych, w ka*dym momencie a przynajmniej w w*z*ach decyzyjnych oferuje u*ytkownikowi pomoc tzn. help, uwzgl*dnia wszystkie mo*liwe warianty konfiguracji komputera np. systemy polskich liter, wydaje cz*sto komunikaty informuj*ce u*ytkownika o stanie i post*pie oblicze*, oraz o r**nych sytuacjach awaryjnych, w maksymalny sposob prowadzi u*ytkownika za r*k* zw*aszcza tam gdzie ma on podja* jak** decyzj*;
nie dopuszcza do wyst*pienia b**du sygnalizowanego przez DOS, tzn. zawczasu przechwytuje kontrol* nad b**dami, wydaje komunikat i instruuje u*ytkownika jak wyj** w spos*b kontrolowany z sytuacji awaryjnej;
jest tzw. „idiotoodporny”, tzn. kontroluje ka*d* liczb* lub inn* dan* wprowadzan* przez u*ytkownika, reaguje na przyciskanie b**dnych klawiszy, nie pozwala na zniszczenie danych w spos*b przypadkowy (**da potwierdzenia wyboru niebezpiecznych opcji), obejmuje helpy dostosowane do r**nych u*ytkownik*w od pocz*tkujacych do zaawansowanych, umo*liwia zawsze kontrolowane wyj*cie z ka*dej opcji menu (przez ESC), je*li u*ytkownik wszed* w t* opcj* bezmy*lnie.
Koniec wyk*adu 2
Plik W2TEPR99.DOC
Edytor WORD 6.0 PL