PiM Predavanje1 KPU2021

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 30

Projektovanje i modelovanje

Prvo predavanje

prof. dr Kristijan Kuk


prof. dr Brankica Popović

Osnovne akademske studije


Informatika i računarstvo
Pristupi razvoju programa

 Proceduralno programiranje
 Program se posmatra kao niza programskih delova
(funkcija,procedura) koje učestvuju u rešavanju zadatka
 Podaci su nezavisni od procedura
 Objektno-orijentisano programiranje
 Osnovna ideja je razbijanje problema na niz zaokruženih celina
(objekata) koje objedinjavaju podatke i operacije
 Operacije objekta deluju nad podacima tog objekta
 Većina današnjih programskih jezika su
 Objektno orijentisani ili
 Omogućuju objektno orijentisani razvoj
Pojava objektno orijentisano programiranja (OOP) olakšala je pravljenje Windows programa.
2 Projektovanje i modelovanje
Pristupi razvoju programa

 Primer 1 – rotiranje geometrijskog oblika u ravni


 Proceduralno
1. Izlistaj sve elemente
2. Odredi vrstu određenog elementa
3. U zavisnosti od vrste oblika pozovi funkciju koja rotira oblik
određene vrste
4. U zavisnosti od vrste oblika ažuriraj koordinate
 Objektno orijentisano
1. Izlistaj sve objekte
2. Zatraži da se određeni objekat rotira

3 Projektovanje i modelovanje
Pristupi razvoju programa

 Primer 2 – pozdravni prikaz učeniku


 Proceduralno
1. Definiši promenjivu ime
2. Definiši promenjivu prezime
3. Učitaj ime
4. Učitaj prezime
5. Pozovi funkciju Pozdravi(ime, prezime)
 Objektno orijentisano
1. Kreiraj objekt Učenik
2. Pozovi metodu Učenik.Učitaj(ime)
3. Pozovi metodu Učenik.Učitaj(prezime)
4. Pozovi metodu Učenik.Pozdravi()

4 Projektovanje i modelovanje
Osnovna načela OOP-a

 Programer apstrakcijom radi MODEL objekta iz stvarnog sveta,


koristi samo bitne detalje.
 Objekti iste vrste poseduju iste osobine ili svojstva (statičke) i iste
postupke, operacije ili metode (dinamičke). Podaci (statičke osobine)
i operacije (dinamičke osobine) sastavni su deo objekta.
 Apstrakcija je proces u kojem na bazi posmatranja pojedinačnih
predstavnika neke vrste iz stvarnog sveta gradimo programski model
koji ih opisuje – KLASU. Ona nam služi za stvaranje (instanciranje)
objekata.
 Instanciranom objektu klasa određuje INTERFEJS (interface) koje
uključuje njegova svojstva i metode, kao i događaje.
 Osnovni OOP koncepti su kontrola pristupa, enkapsulacija,
nasleđivanje i polimorfizam.
5 Projektovanje i modelovanje
Osnovni principi
 Objektno orijentisano programiranje je zasnovano na tri osnovna
principa:
 enkapsulaciji (encapsulation)
 nasleđivanju (inheritance) i
 polimorfizmu (polimorphism).

 Enkapsulacija znači da su sve informacije o objektu (svojstva) i


procesima nad njim (metode) sadržani u definiciji objekta.

 Nasleđivanje znači da se jedan objekat može opisati na osnovu


drugog objekta.

 Polimorfizam znači da mnogi objekti mogu imati istu metodu, a


odgovarajuća akcija se preuzima iz objekta koji poziva tu metodu.

6 Projektovanje i modelovanje
Definicija klase

 Klasa se može shvatiti i kao novi tip – ona određuje koje


vrednosti mogu dobiti promenljive (objekti) tog tipa i
koje operacije se mogu vršiti nad njima

 Dakle, definicija klase može sadržati samo


 atribute
 metode

 Objekat je instanca neke klase

7 Projektovanje i modelovanje
Korišćenje prethodno definisanih
klasa

 U Javi se ništa ne može uraditi bez klasa

 Mogu se kreirati sopstvene klase, ali i koristiti druge klase


(npr. klase koje su deo standardne Java biblioteke, ili klase
koje je neko drugi napisao)

 Prilikom korišćenja primeraka prethodno definisanih klasa,


ne zanima nas implementacija, već samo funkcionalnost
(enkapsulacija)

8 Projektovanje i modelovanje
Konstruktori

 Da bismo koristili objekte (neke klase), najpre ih je


potrebno konstruisati, navođenjem njihovog početnog
stanja

 U Javi, za izradu novog primerka neke klase koristi se


konstruktor
 specijalna metoda čija je namena da konstruiše i inicijalizuje
objekte neke klase

9 Projektovanje i modelovanje
Konstruktori i klasa Date

Ime promenjive Sandardni konstruktor

 Konstruktori uvek imaju isto ime kao i klasa


 npr. konstruktor za klasu Date naziva se Date

 Za konstrukciju nekog objekta


koristi se kombinacija konstruktora i operatora new
Date birthday; //ne referencira
birthday = new Date(); //referencira
10 Projektovanje i modelovanje
Kreiranje sopstvenih klasa

 Prilikom pisanja jednostavnih klasa u NetBeansu možemo


da primetimo da one imaju metodu main

 Gotovo svaka aplikacija se sastoji od većeg broja klasa


koje nemaju metodu main (“radne klase”) i sve one se
kombinuju u okviru aplikacije, a samo jedna klasa sadrži
main metodu

11 Projektovanje i modelovanje
Klasa Zaposleni

 Najjednostavniji oblik definisanja klasa u Javi je na sledeći


način:
class Zaposleni{

konstruktor1;
konstruktor2;

metod1;
metod2;
...
atribut1;
atribut2;

}

12 Projektovanje i modelovanje
Konstruktori

 Ime konstruktora je jednako imenu klase i oni daju


objektima početno stanje
 Klasa može imati više konstruktora
 Konstruktor može imati nula, jedan ili više parametra
 Konstruktor ne vraća nikakvu vrednost
 Konstruktor se uvek poziva operatorom new
 Pojam “kopi konstruktora”
 konstruktor koji kao argument prima objekat istog tipa

13 Projektovanje i modelovanje
Grafička interpretacija klasa

14 Projektovanje i modelovanje
Klasa java.lang.Object

 Sve klase nasljeđuju metode iz klase java.lang.Object.

 Ako za klasu ne piše eksplicitno koju klasu proširuje, ona


proširuje klasu java.lang.Object.

15 Projektovanje i modelovanje
Klasa java.lang.Object

16 Projektovanje i modelovanje
Dijagram klasa

 Osnovni element dijagrama klasa je ikona koja predstavlja


klasu
 Ikona klase je pravougaonik podeljen horizontalnim linijama i
sastoji se iz tri dela

 Gornji deo prikazuje ime klase, u srednjem delu je lista


atributa, a u donjem delu su operacije (metode)
 U mnogim dijagramima poslednja dva dela se zanemaruju.
 Cilj je da se prikažu samo oni atributi i operacije koji su korisni
za određeni dijagram

17 Projektovanje i modelovanje
Metode pristupa i mutacione metode

 Uobičajena praksa (i preporuka) da se atributi označavaju


kao private
 Postoje situacije kada je potrebno da tim atributima
pristupimo iz drugih klasa
 U tom slučaju koristmo tzv. metode pristupa i mutacione
metode
 metode pristupa - omogućavaju pristup tim elementima (čitanje)
 mutacione metode - omogućavaju njihovu izmenu

18 Projektovanje i modelovanje
“Geteri i seteri”
class Zaposleni {
private String ime;
private double plata;

//geteri i seteri
public String getIme(){
return this.ime;
}

public void setIme(String ime){


this.ime = ime;
}
}
19 Projektovanje i modelovanje
Metoda main

 Statičke metode se mogu pozivati, a da pri tome nije


instanciran nijedan objekat

 Metoda main se ne izvršava ni na jednom objektu – kada


se program pokrene, još uvek ne postoji nijedan objekat

 Iz tog razloga je main statička metoda – njen zadatak je da


konstruiše potrebne objekte

20 Projektovanje i modelovanje
Prametri metoda

 U računarstvu, dva osnovna tipa kako se parametri mogu


prenositi su
 poziv po vrednosti – metoda dobija samo vrednost
promenljive
 poziv po referenci – metoda dobija lokaciju promenljive
 U Javi, poziv se uvek vrši po vrednosti!
 razlikuje se prosleđivanje primitivnih tipova i objekata
 objekti zapravo predstavljaju reference i te reference se
prenose po vrednosti

21 Projektovanje i modelovanje
Parametri metoda

 Rezime:

 metoda ne može da modifikuje atribute primitivnog tipa

 metoda može da promeni stanje atributa objekta

 metoda ne može da obezbedi da se instance objekta odnose na


drugi objekat

22 Projektovanje i modelovanje
Konstrukcija objekata

 Preklapanje
 klasa može imati više konstruktora i metoda istog naziva – uz
različite atribute koji se prosleđuju
 Inicijalizacija podrazumevanih polja
 ukoliko se u konstruktoru neko polje eksplicitno ne podesi,
ono se automatski podešava na podrazumevanu vrednost –
boolean na false, brojevi na 0, a referenca objekta na null
 Podrazumevani konstruktor
 konstruktor bez parametara – ukoliko se eksplicitno ne navede
nijedan konstruktor, on je obezbeđen i postavlja vrednosti
atributa na podrazumevane
23 Projektovanje i modelovanje
Konstrukcija objekata

 Eksplicitna inicijalizacija polja


 uvek je dobro podesiti početna stanja (vrednosti) atributa, bez
obzira na konstruktor

class Zaposleni{
private String ime = “”;
...
}

 ovakva inicijalizacija se obavlja pre poziva konstruktora i dobra


je posebno u situacijama kada hoćemo da svaki konstruktor na
neki način inicijalizuje atribute

24 Projektovanje i modelovanje
Konstrukcija objekata

 Poziv još jednog konstruktora


 ključna reč this može imati i drugo značenje – u okviru
konstruktora neke klase se može pozivati drugi konstruktor
iste klase
 ovo je moguće samo ukoliko prvi izraz u konstruktoru ima
oblik this(…)
class Zaposleni{
public Zaposleni(String ime, double br){
this(ime);

}
}

25 Projektovanje i modelovanje
Napomene za projektovanje klasa

 Uvek čuvajte atribute kao privatne


 u suprotnom, narušavate enkapsulaciju
 za pristup njima pisati metode pristupa – manja verovatnoća da
će doći do greške

 Podacima uvek delite inicijalne vrednosti


 ne treba se oslanjati na podrazumevane vrednosti, a posebno
što Java neće inicijalizovati primitivne promenljive

26 Projektovanje i modelovanje
Napomene za projektovanje klasa

 Nemojte koristiti previše osnovnih tipova u klasi


 ideja je da se višestruko povezano korišćenje prostih tipova
zameni drugom klasom, što rezultuje jasnijim kodom i
jednostavnijim potencijalnim izmenama
 npr. ako klasa Musterija ima atribute ulica, broj, drzava..., bolje je
te atribute smestiti u posebnu klasu – Adresa

 Nisu svim poljima potrebne pojedinačne metode pristupa


 npr. klasa Zaposleni sadrži atribut datumZaposljenja – nema
smisla menjati jednom definisanu ovu vrednost

27 Projektovanje i modelovanje
Napomene za projektovanje klasa

 Koristite standardne oblike za definiciju klase:

 postoji više načina da se definišu klase


 poželjno je opredeliti se za jedan, pa ostati dosledan
 npr. uvek na početku klase navesti javne karakteristike (korisnici
klasa su najviše zainteresovani za javni interfejs), potom
karakteristike koje važe u opsegu paketa, a onda privatnke
karakteristike
 ne postoji univerzalni stil programiranja, mada vodič za stilove
kompanije Sun preporučuje da se najpre navode atributi, a
potom metode

28 Projektovanje i modelovanje
Napomene za projektovanje klasa

 Razbijanje klasa koje su odgovorne za previše stvari:

 ako postoji očigledan način da se od jedne komplikovane klase


naprave dve, iskoristite tu mogućnost, ali ne treba
preterivati
 npr. ako imamo klasu Spil (karata) sa metodama promesati,
podeliti, vratiti vrednost i znak sa vrha... – to bi bio primer lošeg
dizajna, jer prikazuje dva koncepta: sa jedne strane špil karata
(sa metodama podeliti i promešati) i, sa druge strane, kartu, sa
metodom vraćanja vrednosti i znaka. Dakle, bolje je napisati
dve klase Spil (mešanje, deljenje) i Karta (vrednost i znak)

29 Projektovanje i modelovanje
Napomene za projektovanje klasa

 Učinite da nazivi vaših klasa i metoda oslikavaju njihove


odgovornosti:

 usvojena konvencija je da ime klase treba da bude imenica ili


imenica ispred koje se nalazi pridev ili glagolska imenica
 što se metoda tiče, po standardnoj konvenciji metode pristupa
i mutacione metoda (“geteri i seteri”) počinju rečima get,
odnosno set, za kojim sledi ime atributa

30 Projektovanje i modelovanje

You might also like