270 likes | 476 Views
Objektno programiranje. Tudi: objektno/predmetno usmerjeno programiranje Osnovni pojmi. 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
E N D
Objektno programiranje Tudi: objektno/predmetno usmerjeno programiranje Osnovni pojmi
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.
Znani objekti • Nekaj primerov objektov iz standardnega razvojnega okolja za javo: • Objekt tipa BufferedReader predstavlja vhodni kanal. Kadar želimo brati s tipkovnice ali z datoteke, naredimo tak objekt in kličemo njegovo metodo readLine 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.
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, ...
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, …
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.
Princip črne škatle 92 Koliko je tvoj IQ ? • Imamo objekt obj, ki hrani podatke o neki osebi. • Zanima nas inteligenčni količnik te osebe. • obj.kolikoJeIQ() • 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 … )
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)
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.
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();
Od kje razredi? • Veliko vgrajenih (oziroma v standardnih knjižnicah) v javo • Math, String, System, BufferedReader, Applet, JFrame, … • Drugi viri • Naši “stari” razredi • Drugi programerji • Potrebujemo ustrezno class datoteko (prevedena java datoteka)
Moj prvi razred Definicija razreda Oznaka objekta naredimo objekt ukazujemo objektu Oglejmo si naslednji program: public class MojR{ private String mojNiz; public MojR(String nekNiz) { this.mojNiz = nekNiz; } public void izpisi() { System.out.println(this.mojNiz); } } public class Pozdrav { public static void main(String[] arg) { MojR prvi; prvi = new MojR("Pozdravljen, moj prvi objekt v javi!"); prvi.izpisi(); } }
Objekt in ime spremenljivke • NekiObjekt a; • a je naslov, kjer bo objekt (referenca na objekt) • new NekiObjekt(); • V pomnilniku se je naredil objekt tipa NekiObjekt() po pravilih, ki so določena z opisom razreda NekiObjekt • a = new NekiObjekt(); • V pomnilniku se je naredil objekt tipa NekiObjekt() in a kaže na ta novo ustvarjeni objekt
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 • NekiObjekt a; • Objekt NE obstaja • a je IME objekta • natančneje • a je ime spremenljivke, kjer hranimo NASLOV objekta vrste NekiObjekt
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 {… 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);
Ustvarjanje objektov • Ulomek ime; • ime = new Ulomek(3, 4); ime: ________ 2h11b11 2h11b11: ¾
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; …
Š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
Povečaj ulomek "klasično" import javax.swing.*; public class Program { public static void main(String[] args) { // vnos podatkov String beri = JOptionPane.showInputDialog( "Števec ulomka: "); int stevec = Integer.parseInt(beri); beri = JOptionPane.showInputDialog( "Imenovalec ulomka: "); int imenovalec = Integer.parseInt(beri); // "delo" stevec = stevec + 1; imenovalec = imenovalec + 2; // izpis System.out.println("Nov ulomek je: " + stevec + " / " + imenovalec); } } }
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
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 ProgramUlomek { public static void main(String[] args) { // vnos podatkov
Ulomki - objektno Naredimo ulomek "Ukazujemo " ulomku // vnos podatkov String beri = JOptionPane.showInputDialog( "Števec ulomka: "); int stevec = Integer.parseInt(beri); beri = JOptionPane.showInputDialog( "Imenovalec ulomka: "); int imenovalec = Integer.parseInt(beri); Ulomek moj = new Ulomek(stevec, imenovalec); // "delo" Ulomek polovica = new Ulomek(1, 2); moj.pristej(polovica); // izpis Systrem.out.println("Nov ulomek je: " + moj.stevec + " / " + moj.imenovalec);
Primerjava "klasično" // "delo" stevec = stevec + 1; imenovalec = imenovalec + 2; objektno Ulomek polovica = new Ulomek(1, 2); moj.pristej(polovica);
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