Strukture podataka i algoritmi |
2. Strategija programiranja |
Neophodno je imati neki formalan nacin za konstruisanje programa tako da on moze da bude efikasan i pouzdan. Istrazivanja su pokazala da se ovo moze najbolje uraditi razlaganjem programa u odgovarajuce male module, koji sami za sebe mogu da budu napisani i testirani pre nego sto se ugrade u vece module, koji se onda odmah testiraju. Alternativno se moze kreirati tzv. "spageti kod", koji se tako zove zbog svojih zamrsenih komandi i skokova. Mnogi skupi, neuspeli projekti su pokazali da, koliko god voleli da jedete spagete, nije dobro koristiti ih kao model za pisanje programa!
Prilicno je ocigledno, ako bilo koji zadatak podelimo na veci broj manjih zadataka koji se mogu zasebno zavrsiti, da tada resavanje veceg zadatka postaje jednostavnije. Medjutim, nama je potrebna formalna osnova za podelu naseg velikog zadatka na manje. Pojam apstrakcije je ovde ekstremno koristan. Apstrakcije predstavljaju pogled na objekte ili funkcije sa jednog viseg nivoa, koji nam omogucava da zaboravimo na sitne detalje i da se koncentrisemo na sustinu problema.
Kao ilustracija moze da posluzi primer proizvodjaca kamiona koji koristi racunar za kontrolu rada motora - podesavanje dovoda goriva ili vazduha u zavisnosti od tereta. Racunar je konstruisan od silikonskih cipova, njihovih veza i programa. Ovi detalji su nebitni za proizvodjaca - racunar je za njega crna kutija na koju su privezani razni senzori (za broj obrtaja motora, poziciju papucice gasa, temperaturu vazduha, itd). Racunar ocitava ove senzore i upravlja radom motora na odgovarajuci nacin (podesavajuci dovod vazduha, dovod goriva, vreme otvaranja ventila, itd). Prema tome, proizvodjac ima pogled sa viseg nivoa, odnosno apstraktni pogled na racunar. On specificira njegovo ponasanje pomocu komandi kao sto je:
"Kada je papucica gasa pritisnuta 50%,
dovod vazduha i ventili za gorivo treba da budu otvoreni
dok broj obrtaja motora ne dostigne 2500rpm".
Proizvodjac ne brine kako racunar nalazi optimalna podesavanja ventila - racunar bi, na primer, mogao da koristi bilo celobrojnu bilo aritmetiku u pokretnom zarezu - medjutim, proizvodjaca interesuje samo ponasanje koje odgovara njegovim specifikacijama.
S druge strane, upravnik transportnog preduzeca ima pogled sa jos viseg nivoa, odnosno jos apstraktniji pogled na kamion. Za njega je kamion jednostavno nacin da se preveze roba od tacke A do tacke B za sto krace vreme u skladu sa saobracajnim propisima. Njegova specifikacija sadrzi komande kao sto je
"Kamion, opterecen sa 10 tona, ne bi trebao da trosi vise od 20l goriva na 100km, kada ide brzine od 110 km/sat."
Kako ce se ova specifikacija postici za njega je potpuno nebitno: njega ne zanima da li u kamionu postoji kontrolni racunar ili neko mehanicko cudo sastavljeno od zupcanika, lanaca, sipki itd.
Postoje dva vazna oblika apstrakcije: funkcionalna apstrakcija i strukturna apstrakcija. U funkcionalnoj apstrakciji, mi navodimo funkciju modula, npr.
"Ovaj modul sortira objekte sa ulaza u rastuci poredak, u skladu sa pravilom za poredjenje, i zatim ih salje na izlaz."
Kao sto cemo kasnije videti, postoje mnogi nacini za sortiranje objekata - neki efikasniji od drugih. Na ovom nivou, nas ne zanima nacin sortiranja objekata, vec jednostavno cinjenica da su na izlazu objekti sortirani u skladu sa nasim pravilom za poredjenje.
Drugi tip apstrakcije - strukturna apstrakcija - bolje je poznata kao objektno-orijentisani pristup. Po ovom pristupu, mi konstruisemo softverske modele ponasanja realnih objekata, tj. nas proizvodjac kamiona bi, za analiziranje performansi njegovog vozila, uposlio softverski model kontrolnog racunara. Za njega, ovaj model je apstraktan - on bi mogao da oponasa realni racunar obezbedjujuci model ponasanja pomocu komandi kao sto je: |
if ( poz_papucice > 50.0 ) { postavi_dovod_vazduha( 0.78*poz_papucice); postavi_ventile( 0.12 + 0.32*poz_papucice); } |
Medjutim, njega to ne zanima: racunar je za njega "crna kutija" i on je jedino zainteresovan za njegovo spoljno ponasanje. Da bi pojednostavio kompleksnost svog modela (vozila kao celine), on ne zeli da se zamara unutrasnjim radom kontrolnog racunara; on zeli da pretpostavi da je neko drugi za njega ispravno konstruisao pouzdan model kontrolnog racunara.
Kljucni pojmovi |
Dalje na Objekte i apstraktne tipove podataka |
Nazad na Sadrzaj |