
Lesley Fowler
0
3952
505
Objektno orijentirano nije samo slučajna glasina koju čujete u programskim krugovima. Postoji razlog iza imena - ali što? Pridružite mi se dok istražujem neke osnove programskih koncepcija i objasnim samo zašto objektno orijentirano programiranje pokreće tehnologiju koja stoji iza bilo kojeg modernog softvera i uspoređujem je s procesnim i logičkim programiranjem.
Povijest proceduralnog programiranja
Kad su računala prvi put izumljena, trebalo ih je izričito programirati pomoću jednostavnih uputa - i “softver” bila je samo zbirka ovih krajnje jednostavnih naredbi koje su se motale zajedno u nizu.
U početku ovi potrebni strojni kod za pisanje - pomaknite to “bit” iz ove memorije na ovo mjesto i izvesti logično “i” rad na njemu s ovim bitom, itd. - ali ubrzo su bili apstrahirani na višu razinu pomoću BASIC-a.
Pretpostavljam da je većina vas u školi naišla na BASIC (All-Purpose Symbolic Instruction Code). To je savršen primjer proceduralnog programskog jezika. Čak je i moj prvi programski korak koristio BASIC na Amstrad CPC-64. Svaki redak započinje brojem retka, nakon čega slijedi jednostavna uputa na ljudskom razumljivom jeziku.
Budući da proceduralni jezici slijede naredbe jednu za drugom, ljudima je općenito lako slijediti ono što se događa u programu. Međutim, također je teško napraviti išta izvan jednostavne vježbe učenja - što nas dovodi do stvaranja objektno orijentiranog programiranja.
Objektno orijentirano?
S objektno orijentiranim programiranjem ideja je grupirati povezane varijable i funkcionalnosti u jedan objekt, što predstavlja neku vrstu složene strukture podataka. Taj se objekt potom može više puta upotrijebiti ili proširiti kao nešto još složenije.
Na primjer, igra može imati objekt igrača. Svaki igrač u igri predstavlja jedinstven igrač u stvarnom životu u našoj imaginarnoj multiplayer online igri. Svaki objekt igrača ima nadimak, trenutnu lokaciju, inventar i brzinu kretanja. Iako je svaki igrač jedinstven, i dalje želimo da dijele istu funkcionalnost na osnovnoj razini. Svaki igrač može imati svoj pomicati funkcija koja uzrokuje da igrač pomakne naprijed X broj kvadrata. Svaki igrač može imati različitu brzinu pomicanja, ali kad kažemo igraču da se kreće u jednoj naredbi, on će znati kako reagirati u skladu s vlastitom internetskom mehanikom.
Zašto je ovo korisno? Uzimajući primjer iz stvarnog života - jer bi suvremena grafička korisnička sučelja bila nemoguća bez objekata - svi operativni sustavi nude objekt Window. Stoga je lako imati novo “prozor” zajedno s gumbima za zatvaranje i na cijelom zaslonu i mogućnostima da se krećete - bez da to sami programirate. Sve što trebate je reći stvoriti prozor.
U stvari, suvremeni softver sastoji se od tisuća do tisuća objekata - ne samo prozora, već i gumba i polja obrasca, i okvira upozorenja (koji su i sami posebna vrsta prozorskog objekta) - i to je samo način na koji su raspoređeni i logika interakcije među njima koja ovaj softver razlikuje od drugih. To znači da su programeri i softverski dizajneri slobodni usredotočiti se na izradu jezgra mehanike svog programa, a da ne moraju svaki put izmisliti točak..
Još jedna prednost objektno orijentiranog dizajna je ta da su funkcionalnosti međusobno odvojene i nevidljive. Kada igrač pritisne tipku za naprijed u našoj igri, to pozivi funkcija pomicanja u objekt igrača. Ako učinimo malu promjenu u načinu na koji se ta poteza izvodi unutar predmeta igrača - poput skakanja umjesto hodanja - tada nam ne treba prilagođavati slušatelja tipkovnice. Još uvijek zove “pomicati” bez obzira na to što se interno događa u uređaju uređaja, tako da možemo promijeniti funkcionalnost bez narušavanja svega ostalog.
Isto je i u operativnim sustavima - ako korisnik iznenada odluči promijeniti boju prozora u crvenu, tada to ne trebate otkrivati i prozor učiniti crvenim - sve je to ugrađeno u objekt prozora.
baština
Nakon što imamo objekte, možemo ih proširiti i naslijediti kako bismo proizveli korisnije predmete različitog ponašanja ili dodatne funkcije. Vas limenka ponovno izmislite kotač - ako želite. U našem primjeru igrača možda želimo stvoriti “nadčovjek” objekt. Superman je još uvijek igrač, isti kao i svi ostali - i on želi nadimak i želi biti naveden na istim pločama lidera igrača - ali umjesto u standardnoj akciji pomicanja kojom igrač X objekt hoda prema naprijed, mi ga želimo letite umjesto toga - pomičite 10 kvadrata istodobno preko vrha bilo kojeg predmeta na putu. Proširenjem osnovnog objekta igrača možemo “nasljediti” svu korisnu funkcionalnost bez ponovnog prepisivanja - ali još uvijek to možemo “nadglasati” funkcija pokreta s našim posebnim supermanovim potezom koji leti!
Objektno orijentirano programiranje apsolutno je otkriće ako ste ikada iskusili samo proceduralno programiranje, a ja osobno mislim da je šteta što se u mlađoj srednjoj školi ne uči jednostavna vrsta OOP jezika.
Posljednja stvar: jezici programiranja na temelju logike
Mene to posebno zanimaju jer su općenito najkorisnije za sve što se tiče umjetne inteligencije. Programski jezici temeljeni na logici, kao što je Prolog, ne koriste naredbe i upute u tradicionalnom smislu. Umjesto toga, oni će riješiti problem s obzirom na skup pravila i uvjeta.
Zamislite večeru na kojoj večeras organizujete obitelj. Tvoja teta ne može sjediti pored ujaka jer će se svađati; ne želite da dvoje djece sjede zajedno jer će biti mali prevaranti; sigurno ne želite sjediti između dvoje djece. To je točno tamo - to je vaš program Prolog napisan. Sada mu samo dodajte popis djece i odraslih koji dolaze na zabavu, a ona će vam dati popis mogućih prijedloga za sjedenje!
Nadam se da ste uživali u ovom uvodu početničke razine u programske koncepte. Žao mi je što nisam mogao detaljnije objasniti i naravno da ima milijun stvari koje nisam dotaknuo. Ako želite saznati više, javite mi u komentarima. Možda bismo mogli napraviti niz početnih objektno usmjerenih programiranja za razne jezike ako postoji dovoljno interesa? Provjerite i naše arhive povezane s programiranjem s različitim alatima i web lokacijama za programiranje.
Kreditna slika: ShutterStock