2. UVOD – Ukratko o OOP
•Feksibilnost, brzina kodiranja, brzina rada aplikacije,
organizacija koda za buduce izmene I dorade.
•Ne moze se zamisliti velika I kompleksna aplikacija bez
OOP pristupa izrade.
•Laksa vizualizacija citave aplikacijeclass Automobil {
public $marka;
public $cena;
public function vozi($gde){
return ‘Auto ’.$this->$marka.’ koji je cene ’.$this->$cena.’ RSD vozim ’.$gde;
}
}
//upotreba $auto = new Automobil;
$auto->marka = ‘Trabant’;
$auto->cena = ‘100’;
$auto->vozi(‘na otpad’);
//odgovor: Auto Trabant koji je cene 100RSD vozim na otpad
4. Klasa
•Templejt, okvir jednog objekta
Npr.: Voce je klasa, dok su limuni, jabuke
objekti klase Voce.
•class Website {
public function add_website($params = array()){
//checking and inserting into db
}
}
Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’));
5. Konstruktor
•Poziva se prilikom kreiranja objekta klase
•Moze se iskoristiti za skladistenje globalnih
vrednosti za klasu
•class Website {
function __construct(){
print ‘Dodjoh u klasu’;
}
public function add_website($params = array()){
//checking and inserting into db
}
}
Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’));
Rezultat: Dodjoh u klasu
6. Konstanta klase
•Vrednosti koje mozemo da koristimo bilo
gde unutar klase
•class Website {
const verzija = ‘3.2’;
function __construct(){
print ‘Dodjoh u klasu’;
}
public function add_website($params = array()){
echo ‘<br />Website mora biti u verziji ’.self::verzija.’ +’;
//checking and inserting into db
}
}
Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’));
Rezultat: Dodjoh u klasu
Website mora biti u verziji 3.2 +
7. Nasledjena klasa
Dobija se vise fleksibilnosti u programiranju
S druge strane ne treba ih koristiti kad
imamo samo razlicite vrednosti izmedju
klasa, treba da ih koristimo samo kad je
struktura I ponasanje klasa drugacije. Treba
preferirati objektnu kompoziciju, naspram
nasledjivanja klasa.
8. Mutacije
•Koristi se za promeni vrednosti privatnih
metoda iz public funkcije
•class Website {
private $verzija;
public function change_version($arg){
$this->verzija = $arg;
}
public function add_website($params = array()){
echo ‘<br />Website mora biti u verziji ’.$this->verzija.’ +’;
//checking and inserting into db
}
}
Website::change_version(‘3.2.5’);
Website::add_website(array(‘url’=>’http://www.nekisajtovo.ono’, ‘user’ => ‘admin’));
Rezultat:
Website mora biti u verziji 3.2.5
9. Autoloaderi
Olaksava posao inkludovanja fajlova
Jednim funkcija moze da hendluje sve
includes
function _autoload($classname){
require_once($classname.’.php’);
}
$classname = ‘lib/mailchimp.api.class’;
$mailhimp = new $classname();
10. Staticne varijable I metode
Staticne varijable I metode se koriste kada
imamo neki sadrzaj ili metodu koju hocemo
kao takvu da delimo medju svim objektima
klase
Ukoliko imamo staticne metode onda joj
pristupamo preko klase, a ne preko objekta:
Website::add_website($siteinfo);
11. Polimorfizam
•Nacin koji omogucava klasama da imaju
razlicitu funkcionalnost dok dele slicni
interfejs.interface MyInterface {
public function doThis();
public function doThat();
public function setName($name);
}
class MyClass implements MyInterface {
protected $name;
public function doThis() {
// code that does this
}
public function doThat() {
// code that does that
}
public function setName($name) {
$this->name = $name;
}
}
12. Paterni
•Templejti koji nam olaksavaju resenje
problema
•Ima 23 paterna trenutno, I kategorisani su
na “Creation” paterne, “Structural”, I
“Behavioral” paterne.
•5 najcesce koriscenih: “Factory Method”,
“Singleton Method”, “Observer Method”,
“The chain-of-command pattern”, “The
strategy pattern”
13. Factory Method
•Dobrodosao je u velikim sistemima, kada
jedna izmena koda moze da poremeti citav
dalji niz aplikacije.
•Ukoliko treba da se izmeni tip objekta u
glavnoj klasi, treba samo da se promeni
factory klasa, I onda ce sve ostale klase da
koristi novi objekat preko factory klase,
automatski.
14. •interface IUser {
function getName();
}
class User implements IUser {
public function __construct( $id ) { }
public function getName() { return "Zeljko"; }
}
class UserFactory {
public static function Create( $id ) {
return new User( $id );
}
}
$uo = UserFactory::Create( 1 );
echo( $uo->getName()."n" ); //response: Zeljko
15. Singleton Method
•Sluzi da jednu klasu instancira samo
jednom, ako je potrebno, kako se ne bi
gubilo vreme.
16. Observer Method
•Jos jedan nacin sprecavanja kolapsa priliko
izmene koda.
•Dobijamo metodu koja dozvoljava drugim
objektima, posmatracima, da se registruju.
Kada se posmatrani objekat promeni,
posalje poruku svim registrovanim
posmatracima, pa oni dalje mogu da rade
sta hoce s tim podacima.
17. •interface IObserver {
function onChanged( $sender, $args );
}
interface IObservable {
function addObserver( $observer );
}
class UserList implements IObservable {
private $_observers = array();
public function addCustomer( $name ) {
foreach( $this->_observers as $obs )
$obs->onChanged( $this, $name );
}
public function addObserver( $observer ) {
$this->_observers []= $observer;
}
}
class UserListLogger implements IObserver {
public function onChanged( $sender, $args ) {
echo( "'$args' added to user listn" );
}
}
$ul = new UserList();
$ul->addObserver( new UserListLogger() );
$ul->addCustomer( "Zeljko" );
18. The chain-of-command pattern
•Omogucava da se lancano pozovu komande, posalju poruke, zahtevi ili sta god.
•interface ICommand {
function onCommand( $name, $args );
}
class CommandChain {
private $_commands = array();
public function addCommand( $cmd ) {
$this->_commands []= $cmd;
}
public function runCommand( $name, $args ) {
foreach( $this->_commands as $cmd ) {
if ( $cmd->onCommand( $name, $args ) ) return;
}
}
}
class UserCommand implements ICommand {
public function onCommand( $name, $args ) {
if ( $name != 'addUser' ) return false;
echo( "UserCommand handling 'addUser'n" ); return true;
}
}
class MailCommand implements ICommand {
public function onCommand( $name, $args ) {
if ( $name != 'mail' ) return false;
echo( "MailCommand handling 'mail'n" ); return true;
}
}
$cc = new CommandChain();
$cc->addCommand( new UserCommand() );
$cc->addCommand( new MailCommand() );
$cc->runCommand( 'addUser', null );
$cc->runCommand( 'mail', null );
19. The strategy pattern
•Omogucava da se uzme deo
funkcionalnosti iz komplekse klase, kako bi
mogli lakse da se menjaju, bez uticaja na
ostatak koda.