Lijepo vam je @mmx govori al necete ga slusati
Ja ne radim u PHPu nego u C# al cu malo rec neke osnove o OOPu.
OOP koristi sljedece --> naslijedivanje, enkapsulacija (ucahurivanje), polimorfizam (viseoblicje), nadjacavanje (override)
Za pocetak je potrebno shvatiti ove pojmove da bi uopce pricali o OOPu.
Principi:
1) Minimizirati dostupnost članskih varijabli i metoda klase
npr. private string ime;
2) Češće koristiti sadržavanje, manje nasljedivanje
Naslijedivanje:
- ponovno iskorištavanje postojeće funkcionalnosti
- postojeća funkcionalnost se proširuje kako bi se dobila nova
- osnovna klasa - nju se nasljeduje
- sadrži zajedničku funkcionalnost
Loše strane --> Mogući problemi kod učahurivanja (enkapsulacije) - implementacijski detalji osnovne klase vidljivi izvedenoj klasi
- izmjene osnovne klase utječu na izvedenu klasu
Sadrzavanje (agregacija ili kompozicija):
- ponovno iskorištavanje postojeće funkcionalnosti (eng. reuse)
- postojeća funkcionalnost se grupira i koristi u ostvarenju nove funkcionalnosti
- nova funkcionalnost se ostvaruje tako da se dijelovi posla delegiraju sastavnim elementima grupirane funkcionalnosti
Lose strane --> Puno objekata
Sučelja objekata moraju biti dobro definirana kako bi ih se moglo dobro iskoristiti prilikom grupiranja
3) Programirati u odnosu na sučelje, ne implementaciju
Sucelje --> Grupa metoda/svojstava koje klasa implementira
Druge klase znaju da mogu pozvati bilo koju metodu implementiranog sučelja neovisno o klasi koja je implementirala sučelje
Klasa može implementirati po volji mnogo sučelja
Metode sučelja predstavljaju pravi podskup svih metoda koje neka klasa implementira
Implementacija sucelja --> Klasa implementira metode sučelja
Klasa se na taj način obvezuje da će davati usluge (metode) implementiranog sučelja
Korisnici sučelja se ne oslanjaju na konkretne klase već na samo sučelje
4) Open/Closed Principle
- klase bi trebale biti otvorene za proširivanje, a zatvorene za modifikaciju
- trebalo bi težiti dizajnu klasa koji se neće morati mijenjati kada dodu zahtjevi za novom funkcionalnošću
- najbolji način za proširenje sustava je dodavanje nove funkcionalnosti, a ne mijenjanje postojeće funkcionalnosti
- postiže se uz pomoć apstrakcije, polimorfizma, nasljedivanja i sučelja
5) Liskov Substitution Principle
- funkcije koje koriste osnovnu klasu moraju raditi s izvedenim klasama bez da znaju o kojim se točno izvedenim klasama radi
6) Dependency Inversion Principle
- klase više razine ne smiju direktno ovisiti o klasama niže razine već i jedne i druge moraju ovisiti o apstrakcijama
- apstrakcije ne smiju ovisiti o detaljima
- detalji smiju ovisiti o apstrakcijama
7) Interface Segregation Principle
- klase ne bi smjele ovisiti o sučelju kojeg u potpunosti ne koriste
Nisam stavio primjere pa ce neke stvari biti teze shvatit ali ih mozete naci na netu. Ovo su u pricipu osnove OOPa.
Na ovo jos treba dodati oblikovne obrasce (design patterns) + aspektno orijentirano programiranje