Objektno programiranje Tudi objektnopredmetno usmerjeno programiranje Osnovni pojmi
Objektno programiranje Tudi: objektno/predmetno usmerjeno programiranje Osnovni pojmi Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Objekti • Objekt je skupek podatkov, s katerim želimo upravljati kot s celoto. • Ima – Podatke Ø kaj o objektu vemo/hranimo – Metode Ø Kaj objekt zna Ø Kakšne metode lahko izvajamo nad njim • Vsak objekt pripada nekemu razredu. Če pripada objekt x razredu C, potem pravimo tudi, da je x objekt tipa C. Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Znani objekti • Nekaj primerov objektov iz standardnega razvojnega okolja za javo: – Objekt tipa Buffered. Reader predstavlja vhodni kanal. Kadar želimo brati s tipkovnice ali z datoteke, naredimo tak objekt in kličemo njegovo metodo read. Line za branje ene vrstice. – Objekt System. out predstavlja standardni izhod. Kadar želimo kaj izpisati na zaslon, pokličemo metodo println na objektu System. out. – Objekt tipa Color predstavlja barvo na zaslonu. – Objekt tipa Applet je grafična aplikacija, ki jo lahko vstavimo v spletno stran ali poženemo samostojno. • Seveda pa so objekti uporabni predvsem zato, ker lahko programer definira nove razrede in objekte. Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Objekti • stanja: – Lastnosti, podatki, komponente • “znanje” – Odzivanje na dogodke • Združeno v celoto – Podatki in metode, ki opisujejo neko stvar/objekt – Žoga: Ø Podatki: velikost, barva, položaj v prostoru, … Ø Metode: sprememba velikosti, sprememba položaja, … – Ulomek: Ø Podatki: števec, imenovalec Ø Metode: spremeni števec, spremeni imenovalec, prištej drug ulomek, obratna vrednost, lepo izpiši, . . . Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Programiranje v javi • Sestavljanje razredov – Opis lastnosti objektov – Opis metod (“znanja” objektov) Ø Ustvarjanje objektov in njihova uporaba Ø "Ukazovanje" objektom, kaj naj počnejo Ø Objekt za izpolnitev določene naloge potrebuje druge objekte in njihove metode • Začetek – Glavni razred (ki ima metodo main) – Izvajanje metode main – ustvarjanje objektov, ukazovanje objektom, spremljanje reakcij objektov, … Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Objekti • Objekt je kakršenkoli skupek podatkov, s katerimi želimo upravljati. • Osnovni pristop objektnega programiranja – objekt = podatki + metode za delo s podatki. • Ko želimo kak podatek (objekt) obdelati, objektu (podatku) signaliziramo, kaj naj se zgodi. – Pokličemo ustrezno metodo v objektu. • Objekt je "črna škatla“, ki sprejema in pošilja sporočila. Jedro objekta sestavljajo njegove spremenljivke, okrog katerih se nahajajo njegove metode. Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Princip črne škatle • • Imamo objekt obj, ki hrani podatke o neki osebi. Zanima nas inteligenčni količnik te osebe. – obj. koliko. Je. IQ() Ko tvo liko j IQ je ? • • • 92 Objekt se odzove z odgovorom Uporabnika ne zanima, kako je objekt prišel do odgovora, le kaj ga lahko vpraša in v kakšni obliki bo dobil odgovor! Za uporabnika (tistega, ki objektu naroči izvajanje metode) ni važno, kako je objekt odgovoril – kako je prišel do IQ (je to podatek, ki je zapisan nekje v objektu, je to rezultat nekega preračunavanja … ) Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Prednosti "črne škatle" • Če kasneje spremenimo notranjost "črne škatle" (razreda) • Spremembe v programih, ki razred uporabljajo, niso potrebne – Seveda, če je način spraševanja in odgovarjanja ostal nespremenjen – Če so metode ostale enake (imajo enaka imena, nabor parametrov in tip rezultata) Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Klasično programiranje • Klasično programiranje: program = metode • Ko želimo kak podatek obdelati v klasičnem programiranju, – pokličemo ustrezno metodo z argumenti – argumenti: podatki, ki naj jih obdela. Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Klasično/objektno progr. • metoda f na podatku x: • Klasično: – izvedi statično metodo f na podatku x – f(x); • Objektno: – podatku/objektu x signaliziraj, da naj izvede metodo f – x. f(); Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Od kje razredi? • Veliko vgrajenih (oziroma v standardnih knjižnicah) v javo – Math, String, System, Buffered. Reader, Applet, JFrame, … • Drugi viri – Naši “stari” razredi – Drugi programerji • Potrebujemo ustrezno class datoteko (prevedena java datoteka) Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Moj prvi razred Oglejmo si naslednji program: public class Moj. R{ private String moj. Niz; Definicija razreda public Moj. R(String nek. Niz) { this. moj. Niz = nek. Niz; } public void izpisi() { System. out. println(this. moj. Niz); } Oznaka objekta } public class Pozdrav { public static void main(String[] arg) Moj. R prvi; { naredimo objekt prvi = new Moj. R("Pozdravljen, moj prvi objekt v javi!"); prvi. izpisi(); } ukazujemo objektu } Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Objekt in ime spremenljivke • Neki. Objekt a; – a je naslov, kjer bo objekt (referenca na objekt) • new Neki. Objekt(); – V pomnilniku se je naredil objekt tipa Neki. Objekt() po pravilih, ki so določena z opisom razreda Neki. Objekt • a = new Neki. Objekt(); – V pomnilniku se je naredil objekt tipa Neki. Objekt() in a kaže na ta novo ustvarjeni objekt Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Ustvarjanje objektov • Razred je šablona, ki definira spremenljivke in metode skupne vsem objektom iste vrste. • class – Načrt objekta, šablona • Primerek razreda (grdo temu rečemo instanca) – konkretni objekt – Ustvarimo ga z new – Brez tega objekta NE MOREMO uporabiti – Neki. Objekt a; Ø Objekt NE obstaja Ø a je IME objekta Ø natančneje – a je ime spremenljivke, kjer hranimo NASLOV objekta vrste Neki. Objekt Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Java in objekti • • Razred (class) je opis vrste objekta (načrt, kako naj bo objekt videti) – opis ideje objekta Primerek razreda (instanca) – konkretni objekt class Neki {… Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport. new Neki(12, 89, 24, “red”, …
Ustvarjanje objektov – Ulomek ime = new Ulomek(3, 4); – Rečemo: Ø V objektu ime je shranjen ulomek ¾; – Točneje Ø V spremenljivki ime je naslov nekega objekta tipa Ulomek, ki predstavlja ulomek ¾. Ø Spremenljivka ime kaže na objekt tipa Ulomek, ki … – Prvi ukaz je dejansko spoj dveh stavkov: Ø deklaracija Ø prireditev – Ulomek ime; – ime = new Ulomek(3, 4); Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Ustvarjanje objektov – Ulomek ime; – ime = new Ulomek(3, 4); ime: ____ 2 h 11 b 11: ¾ Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Ustvarjanje objektov – Brez new objekta še NI – včasih “skrito” Ø Nizi – String a = "bla"; – String a = new String("bla"); Ø Tabele – int[] tabela = {1, 2, 3}; – int[] tabela = new int[3]; – tabela[0] = 1; … Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Še en zgled • Poglejmo si še en zgled. Denimo, da bi radi napisali program, ki bo prebral nek ulomek in mu prištel 1/2. • "klasično" se bomo tega lotili takole Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Povečaj ulomek "klasično" import javax. swing. *; public class Program { public static void main(String[] args) { // vnos podatkov String beri = JOption. Pane. show. Input. Dialog( "Števec ulomka: "); int stevec = Integer. parse. Int(beri); beri = JOption. Pane. show. Input. Dialog( "Imenovalec ulomka: "); int imenovalec = Integer. parse. Int(beri); // "delo" stevec = stevec + 1; imenovalec = imenovalec + 2; // izpis System. out. println("Nov ulomek je: " + stevec + " / " + imenovalec); } } } Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Povečaj ulomek - objektno • Razred Ulomek • Hrani podatke o svojem števcu in imenovalcu • "se zna" povečati za drug ulomek – Vsebuje metodo, ki ta ulomek poveča za drug ulomek Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Ulomki - objektno public class Ulomek { public int stevec; public int imenovalec; public Ulomek(int st, int im) { this. stevec = st; this. imenovalec = im; } public void pristej(Ulomek a) { this. stevec = this. stevec + a. stevec; this. imenovalec = this. imenovalec + a. imenovalec; } } public class Program. Ulomek { public static void main(String[] args) { // vnos podatkov Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Ulomki - objektno // vnos podatkov String beri = JOption. Pane. show. Input. Dialog( "Števec ulomka: "); int stevec = Integer. parse. Int(beri); beri = JOption. Pane. show. Input. Dialog( "Imenovalec ulomka: "); int imenovalec = Integer. parse. Int(beri); Ulomek moj = new Ulomek(stevec, imenovalec); Naredimo ulomek // "delo" Ulomek polovica = new Ulomek(1, 2); moj. pristej(polovica); "Ukazujemo " ulomku // izpis Systrem. out. println("Nov ulomek je: " + moj. stevec + " / " + moj. imenovalec); Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Primerjava • • "klasično" // "delo" stevec = stevec + 1; imenovalec = imenovalec + 2; Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si objektno Ulomek polovica = new Ulomek(1, 2); moj. pristej(polovica); Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
Objektno programiranje • Problem – Z analizo ugotovimo, kakšne objekte potrebujemo za reševanje – Pregledamo, ali že imamo na voljo ustrezne razrede Ø Standardna knjižnica Ø Druge knjižnice Ø Naši stari razredi – Sestavimo ustrezne manjkajoče razrede – Sestavimo “glavni” program, kjer s pomočjo objektov rešimo problem Fakulteta za matematiko in fiziko http: //up. fmf. uni-lj. si Izvedbo projekta je omogočilo sofinanciranje Evropskega socialnega sklada Evropske unije in Ministrstva za šolstvo in šport.
- Slides: 25