algoritmi i strukture_podataka_2016-02_v01
TRANSCRIPT
Algoritmi i strukture podataka
Uvod u objektno orijentirano programiranje
Leonardo Miljko
www.ckm.ba - Leonardo Miljko
Prezentacija nastala na osnovu knjige:
Brano Markić i Dražena Tomić,
Uvod u algoritme i strukture, Ekonomski fakultet , Mostar,2008.
Objektno orijentirano programiranje Objektno orijentirano programiranje je razvijeno zato što su
proceduralni jezici, kao što su C, Pascal, Basic, Fortran i dr. postali neodgovarajući za velike i složene programe.
Svi se proceduralni jezici temelje na ideji podjele programskog koda na funkcije ili procedure.
Skupine funkcija oblikuju novu veću jedinicu nazvanu modul.
Funkcije su mogle pristupiti podacima unutar te funkcije (lokalne varijable) ili su istim podacima mogle pristupiti sve funkcije (globalne varijable).
Da bi više funkcija moglo pristupiti istim podacima oni se moraju deklarirati kao globalni, a globalnim je podacima mogla pristupiti svaka funkcija. To je iniciralo i stvaralo česte programerske pogreške.
Rješenje osiguravaju objektno orijentirani programski jezici.
www.ckm.ba - Leonardo Miljko
Objektno orijentirano programiranje Objektno orijentirano programiranje je metodologija koja program
organizira kao skup objekata, pri čemu objekti sadrže podatke i operacije.
Potrebno je odrediti klase, objekte i operacije (metode) koje pripadaju klasama.
Ključni pojmovi i ideje objektnog pristupa su:
- objekt,
- tip objekta,
- klasa,
- inkapsulizacija (učahurivanje),
- nasljeđivanje,
- metoda,
- poruka.
www.ckm.ba - Leonardo Miljko
Elementi objektnog dizajna
Općenito, objektno orijentirano dizajniranje primjenjivo je na one sustave (načelno složene) koji se ponašaju kao objekti u stvarnosti.
Opća metoda kojom se služi objektno orijentirani dizajn je apstrakcija. Apstrakcija je način razmišljanja koji se koncentrira na najvažnije elemente nekog objekta, pojave, događaja, procesa i sl. Čovjekov način razmišljanja o svijetu je temeljen na načelima objektne orijentacije.
Čovjek spoznaje objekte analizirajući njihova obilježja i njihovo ponašanje.
www.ckm.ba - Leonardo Miljko
Elementi objektnog dizajna • U strukturiranom dizajnu funkcija je temeljna jedinica apstrakcije .
Programer se koncentrira na pisanje funkcija i procedura. Funkcije i procedure se grupiraju u računalni program. Podaci nisu u središtu pozornosti. U središtu su akcije kojima se ulazni podaci transformiraju u izlaze.
• U objektnom dizajnu temeljna jedinica apstrakcije je klasa sa svojim atributima i metodama. Objektni pristup povećava razinu našeg razmišljanja o problemu, povećava razinu apstrakcije.
Za objektni dizajn objekt je svaki predmet, pojava, događaj, osoba. Objekti mogu biti realni ili apstraktni (stvarni ili zamišljeni). Svaki objekt pripada nekom tipu. Tip označava sve objekte koji imaju jednaka svojstva. Pojedinačni objekt je instanca (jedna pojava) određenog tipa.
www.ckm.ba - Leonardo Miljko
Elementi objektnog dizajna Npr. Bicikl ima
određena stanja: trenutnu brzinu kretanja, dva kotača, broj brzina
i ponašanje: ubrzavanje, usporavanje, promjena brzine, parkiran, zakočen.
Softver objekte modelira prema njihovu stanju i ponašanju u realnom svijetu. Odražava stanje objekta u varijablama, a implementira ponašanje s metodama. Objekt tako čini skup varijabli i metoda.
Realni objekti se onda prikazuju kao softverski, programski objekti, a softverski se mogu prikazati i apstraktni, konceptualni objekti.
Događaj uzroči ponašanje objekata na određeni način (npr. ispis teksta u nekom upravljaču na zaslonu ili izračunavanje prosječne ocjene određenog studenta, prosječne ocjene na ispitu iz jednog predmeta i sl.).
www.ckm.ba - Leonardo Miljko
Elementi objektnog dizajna • Programski objekt koji modelira stvarni, realni objekt kao što je
zaposlenik, služi se varijablama koje čuvaju podatke o stanju toga realnog objekta: ime: Marin, prezime: Soldo, mjesto rođenja: Mostar, godina rođenja: 1995.
• Te varijable često se zovu instancirane varijable (instance variables), a metode instancirane metode (instance methods) da bi se razlikovale od varijabli klase i metoda klase.
www.ckm.ba - Leonardo Miljko
Elementi objektnog dizajna • Svojstva objekta izražena varijablama. Vrijednosti varijabli su u
središtu, nukleusu objekta.
• Metode okružuju i skrivaju središte objekta od drugih objekata u programu.
• Pakiranje varijabli objekta i njihova zaštita metodama objekta zove se učahurivanje (inkapsulizacija). Učahurivanje služi za skrivanje detalja implementacije jednog objekta od drugih objekata. Upravo se metode nekog objekta ponašaju kao zaštitne membrane. Učahurivanje se može promatrati kao nastavak apstrakcije kojom se objekti i metode vezuju u jednu cjelinu.
• Koncept inkapsulizacije i skrivanja informacija potiče od pojma apstraktnog tipa podatka koji je u softversko inženjerstvo uveden ranije.
www.ckm.ba - Leonardo Miljko
Elementi objektnog dizajna • Svojstva objekta izražena varijablama. Vrijednosti varijabli su u
središtu, nukleusu objekta.
• Metode okružuju i skrivaju središte objekta od drugih objekata u programu.
• Pakiranje varijabli objekta i njihova zaštita metodama objekta zove se učahurivanje (inkapsulizacija). Učahurivanje služi za skrivanje detalja implementacije jednog objekta od drugih objekata. Upravo se metode nekog objekta ponašaju kao zaštitne membrane. Učahurivanje se može promatrati kao nastavak apstrakcije kojom se objekti i metode vezuju u jednu cjelinu.
• Koncept inkapsulizacije (učahurivanje) i skrivanja informacija potiče od pojma apstraktnog tipa podatka koji je u softversko inženjerstvo uveden ranije. Time se izražava ideja pakiranja informacija istog tipa u jednu cjelinu.
www.ckm.ba - Leonardo Miljko
Elementi objektnog dizajna Ideja učahurivanja osigurava dvije važne činjenice koje koriste
izgradnji programa:
• Skrivanje informacija. Objekt može održavati vlastite (private) podatke i metode, može ih mijenjati, modificirati. Pristupati objektu mogu i metode drugih objekata ako je taj pristup otvoren pomoću javnog sučelja (public interface).
• Modularnost. Izvorni kod za jedan objekt može se pisati i održavati neovisno o izvornom (source) kodu za druge objekte.
Metoda je način rukovanja svojstvima objekta. Vezana je samo za jedan tip objekta, te se njome ne može pristupiti objektu drugog tipa.
www.ckm.ba - Leonardo Miljko
klasa Rabeći terminologiju
objektno orijentiranog
pristupa, ispravno je kazati da je
konkretni, određeni zaposlenik objekt,
jedna instanca, jedan primjerak klase
objekata koja se naziva zaposlenici.
Svaki zaposlenik ima neke opće osobine, zajedničke atribute koji povezuju sve zaposlenike u klasu. To su ime, prezime, mjesto rođenja, godina rođenja i druge osobine bitne u analizi i dizajnu. Isto tako svakom zaposleniku se može izračunati radni staž, pronaći ime ili izračunati plaća.
U rječniku objektno orijentirane analize i dizajna kaže se da objekt ima ponašanje koje je zajedničko ponašanju ostalih primjeraka, instanci ili jednostavno ostalih objekata.
www.ckm.ba - Leonardo Miljko
klasa • Klasu čini skup sličnih objekata. Opisujući klasu, opisujemo i sve
njezine objekte. Klasa je zato predložak na temelju koga se može kreirati novi objekt. Klasa zato opisuje internu strukturu objekta, njegova svojstva (atribute) i veze kao i operacije nad tim atributima.
• Klasom se upravo naziva takav opći predložak ili prototip koji definira varijable i metode zajedničke svim objektima istog tipa. Drugim riječima, svaka klasa ima svoje metode i svoje varijable.
• Varijablama klase pridružuju se određene vrijednosti. Kaže se da se varijable instanciraju. Pridruživanjem vrijednosti varijablama klase kreira se pojedinačni objekt klase i njemu se dodjeljuje i odgovarajući prostor u memoriji.
www.ckm.ba - Leonardo Miljko
klasa • Prvo slovo u imenu objekta je malo dok je ime klase zapisano
velikim slovom.
• Tako npr. stol: Uredska oprema
označava objekt stol koji pripada klasi Uredska oprema.
www.ckm.ba - Leonardo Miljko
atributi • Atributi opisuju svojstva klase. Objekti jedne klase se međusobno
razlikuju po vrijednostima atributa.
• Npr. atributi klase Uredska oprema su: Nabavna vrijednost, Sadašnja vrijednost, Datum nabavke.
• Za prikaz klase poslužit ćemo se UML (Unified Modeling Language). Notacija UML za klasu rezervira pravokutnik s tri dijela. Prvi dio sadrži deklaraciju naziva klase (ime klase), drugi dio nazive atributa i treći dio operacije (metode) koje definiraju ponašanje svih objekata klase. Slika 24. prikazuje primjere deklaracije klasa, njihovih atributa i metoda.
• Naziv atributa je jedinstven samo unutar klase. Zato klase Profesor i Student mogu imati atribute prezime, ime, idBroj. Naziv atributa se piše malim početnim slovo. Ako ima više riječi u nazivu onda
svaka riječ počinje prvim velikim slovom osim početne.
www.ckm.ba - Leonardo Miljko
asocijacija Dva su glavna tipa odnosa između objekata, odnosno klasa:
asocijacija i generalizacija.
Asocijacija se prikazuje punom crtom. Ta crta povezuje klase. Asocijacija nije jednosmjerna nego dvosmjerna veza.
Primjera asocijacije je mnogo. Između klase student i klase fakultet, između klase radnik i klase odjel, između klase država i klase glavni grad, između klase oprema i uredska oprema, klase profesor i klase predmet i sl.
www.ckm.ba - Leonardo Miljko
asocijacija Broj nas informira koliko objekata jedne klase sudjeluje u toj relaciji.
U danom primjeru jedan profesor može predavati jedan ili dva predmeta. Jedan ili dva predmeta može predavati isti profesor. Jedan ili više predmeta pripadaju jednom studentu i jedan student polaže 1 ili više predmeta. Asocijacije je teže riječima opisati nego ih vizualno razumjeti i prikazati. Brojevi koji se nalaze uz crtu označavaju kardinalnost veze.
www.ckm.ba - Leonardo Miljko
kardinalnost Kardinalnost (brojnost) je
broj koji označava koliko
objekata jedne klase
sudjeluje u vezi.
www.ckm.ba - Leonardo Miljko
nasljeđivanje U tijeku izgradnje modela podataka (faza dizajna) često se nailazi na
objekte koji su isti u gotovo svim dimenzijama, osim u nekima. To je temeljna ideja nasljeđivanja.
Npr. oblikuje se klasa Osoba. Logično je razmišljati da su zaposlenici osobe pa zato nasljeđuju sve osobine klase Osoba, ali imaju i neke specifične (posebne) osobine različite od drugih osoba.
Zato bi se objektnom programiranju definirala klasa Osoba koja reprezentira svaku pojedinačnu, konkretnu osobu, a onda klasa Zaposlenik koja reprezentira svakog pojedinačnog, konkretnog zaposlenika.
To svojstvo objektno orijentiranog dizajna zove se nasljeđivanje (inheritance).
www.ckm.ba - Leonardo Miljko
nasljeđivanje Bitno je razlikovati klasu od objekta. Objekt je primjer klase. On je
„dinamički“ jer ima specifične vrijednosti atributa koji su vidljivi korisniku, za razliku od klase koja opisuje strukturu podataka jednog tipa objekta. Ta ideja ima bitnu posljedicu, a ona je nasljeđivanje svojstava klase i operacija (metoda). Atribute i operacije klase mogu rabiti svi objekti koji pripadaju istoj klasi.
Npr. bilo koji objekt klase Osoba nasljeđuje atribute i operacije te klase.
Nasljeđivanje je jedan od najvažnijih koncepata u objektno orijentiranom programiranju.
Često klase imaju iste osobine (atribute i operacije) i razumno je zajednička svojstva objekata različitih klasa objediniti i prikazati jednom klasom. Sve klase mogu naslijediti te zajedničke atribute. Generalizacija je tip odnosa između klasa koji to omogućuje.
www.ckm.ba - Leonardo Miljko
nasljeđivanje • Klasa u kojoj su objedinjena zajednička svojstva naziva se
nadklasa, a klase koje nasleđuju svojstva nadklase i sadrže neka specifična svojstva (atribute) nazivaju se podklase.
• Klase na nižoj razini hijerarhije, kaže se, nasljeđuju osobine klasa na višoj razini hijerarhije.
www.ckm.ba - Leonardo Miljko
KORACI U OBJEKTNO ORIJENTIRANOM DIZAJNU Objektno orijentirani dizajn uključuje nekoliko koraka:
• identificiranje klasa sustava i analiza njihove strukture (identificiranje atributa)
• analiza ponašanja klasa (treba utvrditi koje se operacije mogu obaviti nad pojedinim objektima klase)
• na temelju provedenih analiza strukture sustava i njegova ponašanja oblikovati strukture objekata i njihova ponašanja
• definiranje korisničkih sučelja za svaki objekt.
www.ckm.ba - Leonardo Miljko
KORACI U OBJEKTNO ORIJENTIRANOM DIZAJNU Klase često imaju ista svojstva (atribute) i ista ponašanja (metode).
Npr. sva osnovna sredstva u poduzeću imaju nabavnu vrijednost i sadašnju vrijednost i svako osnovno sredstvo se tijekom vremena amortizira.
Odnos klasa koji to omogućuje naziva se generalizacija.
Generalizacija se prikazuje trokutom čija je osnovica okrenuta prema podklasama, a vrh prema nadklasi. Pored trokuta se može upisati “diskriminator”. To je atribut koji omogućuje specijalizaciju. Generalizacija pokazuje istodobno pojavljivanje podklase i nadklase. Generalizacija i specijalizacija su dva pogleda na iste veze između klasa.
• Objekti komuniciraju porukama. Objekt može, u gornjem primjeru, odgovoriti na poruke: amortizacija, zarada putnik/km (putnik po kilometru) što je naslijedio od vlastitih nadklasa i klase kojoj pripada.
www.ckm.ba - Leonardo Miljko
Metode i poruke • Bitna ideja objektno orijentiranih pristupa je povezivanje
podataka u poseban objekt. Podacima unutar objekta mogu pristupiti samo metode (operacije) kojima objekt dopusti. Bitna su sljedeća svojstva objekta:
• objekt ima jedinstveni identifikator
• objekt se pohranjuje u posebnom dijelu memorije zajedno s operacijama koje se mogu primijeniti na objekte u memoriji
• jedini način pristupa objektu i njegovu modificiranju je pomoću operacija (metoda) koje objekt podržava. Operacije nad objektom zovu se metode. Sve metode nisu vidljive. Neke od njih su interne. Struktura i sadržaj memorije za pohranjivanje objekta skrivene su od vanjskih pogleda.
• Metode vidljive svima zovu se javne (public) metode.
www.ckm.ba - Leonardo Miljko
Metode i poruke Objekt s nazivom Ana (jedinstveni identifikator objekta je Ana) predstavlja
jednog kupca kome je rezerviran memorijski prostor. U njemu se čuvaju sve vrijednosti (podaci) koji se odnose na samo tog kupca. Tim se podacima objekta (vrijednostima) pristupa putem sučelja.
www.ckm.ba - Leonardo Miljko
Metode i poruke Objekt s nazivom Ana (jedinstveni identifikator objekta je Ana) predstavlja
jednog kupca kome je rezerviran memorijski prostor. U njemu se čuvaju sve vrijednosti (podaci) koji se odnose na samo tog kupca. Tim se podacima objekta (vrijednostima) pristupa putem sučelja.
www.ckm.ba - Leonardo Miljko
Metode i poruke • Poruka Pronaći ime pozvat će odgovarajuću metodu koja pronalazi
i prikazuje promet kupca Ana. Neka druga poruka, npr. Dodati, ponovno će pozvati odgovarajuću metodu koja će zabilježiti vrijednosti prometa u memoriji za kupca Ana.
• Korisnika ne zanima struktura objekta pohranjena u memoriji niti mu je potrebno znanje o toj strukturi (koje atribute sadrži klasa Kupac).
• Ono što korisnika zanima je sučelje (public interface) prema objektima klase Kupac. Upravo u tome je snaga i kvaliteta objektno orijentiranog pristupa. Korisnik ne mora znati kako je organizirana i strukturirana memorija za pohranjivanje objekata.
• Metode objekata su operacije na objektima koji su pohranjeni u memoriji. One su odgovori na poruke.
www.ckm.ba - Leonardo Miljko
Metode i poruke • Poruka aktivira metodu B.
• Metoda B aktivira objekte u memoriji koji daju odgovore.
• Potom metoda B sve odgovore komponira u jedan odgovor i upućuje pošiljatelju poruke.
www.ckm.ba - Leonardo Miljko
Metode i poruke • Poruka se mora strukturirati na odgovarajući način i ona nije
potpuno jednaka pozivu procedure ili funkcije u konvencionalnim programskim jezicima. Poruka mora imati sljedeće sastavnice:
• ime metode koja će odgovoriti na poslanu poruku (često se ta sastavnica poruke zove selektor)
• objekt kojem je upućena poruka (najčešće se zove cilj ili primatelj poruke)
• parametre.
www.ckm.ba - Leonardo Miljko
Metode i poruke Npr. Strukturu poruke koja unosi prosječnu ocjenu postignutu
tijekom studiranja, za objekt Ana.
www.ckm.ba - Leonardo Miljko
Metoda može, ali ne mora, vratiti neku vrijednost kao odgovor
na primljenu poruku. To ovisi o dizajnu metode.
Važno je primijetiti da je odgovor na poruku ponovno objekt koji
može biti cilj druge poruke.