320 likes | 495 Views
DWA 2. Lesson 02. Izvori na webu. http://www.php.net/manual/en/oop5.intro.php. OOP u PHP-u. Klase i objekti Svojstva klase (varijable) Konstruktori i destruktori Metode klase (funkcije) Sučelja Iteratori Naslijeđivanje i nadjačavanje Ostali buzzword -i. 1. Klase i objekti.
E N D
DWA 2 Lesson 02
Izvori na webu • http://www.php.net/manual/en/oop5.intro.php
OOP u PHP-u • Klase i objekti • Svojstva klase (varijable) • Konstruktori i destruktori • Metode klase (funkcije) • Sučelja • Iteratori • Naslijeđivanje i nadjačavanje • Ostali buzzword-i
1. Klase i objekti • Klasa - softverski entitet (program, skript) koji definira strukture podataka i procese koji se izvode sa podacima zadanih struktura (oblika). Načelno govoreći, klase ne sadrže podatke, nego definiraju njihove oblike. Isto tako, klase ne izvode procese obrade podataka, nego te procese definiraju.
1. Klase i objekti • Objekt - Objekt je jedna "kopija klase" (instanca) u koju su uvršteni konkretni podaci na kojima se izvode procesi koji su definirani u pripadnoj klasi. Iz jedne klase može se kreirati mnogo objekata ("kopija") te klase, pri čemu se u svaki od tih objekata uvrštavaju konkretni podaci koji se onda obrađuju. Temeljna odlika objektnog programiranja je upravo to, da se strukture podataka i procesi definiraju kao "apstraktne (prazne) forme" iz kojih se onda prave "kopije" (objekti, instance) u koje se uvrštavaju podaci sa kojima se onda izvode procesi.
1. Klase i objekti • Deklaracija klase class Student { // varijable (atributi) // [kontruktor] [destruktor] – nisu obavezni // metode (funkcije) }
2. Svojstva klase (varijable) • Instanca (instanciranje?) -> stvaranje objekta • Primjer: imamo popis studenata u bazi. Imamo klasu Student koja omogućava operacije sa studentima (upis novih, promjenu osobnih podataka, prebacivanje smjerova......) $student = new Student(‘18574’); // dajemo broj indeksa, konstruktor dobiva broj, izvlači podatke iz baze i popunjava varijable (atribute), nakon čega je objekt spreman za operacije (metode) $student = new Student; // instanca bez pozivanja konstruktora
Vježba • Napišite deklaraciju klase Student i sa svim atributima (varijablama) potrebnim za tu klasu (po vašem mišljenju) • Napišite deklaraciju neke druge klase po želji – u nastavku poglavlja ćemo paralelno popunjavati obje klase dok ne dobijemo potpune deklaracije klasa Student i ove klase
2. Svojstva klase (varijable) • Varijable ( [final] class Student() { public $broj_indeksa; private $ime; protected $prezime; var $neeee; // deprecated – throws error!!! }
2. Svojstva klase (varijable) • Varijable • public – dostupna i izvan klase (u glavnom...) • protected – dostupna samo unutar klase i unutar klasa koje nasljeđuju ovu klasu • private – dostupna samo unutar klase • static – varijable sa zadanim vrijednostima class settings { static $login=“ijugo”; } echo settings::$login; // bez izrade objekta !!! • const const login=‘ijugo’; echo settings:login;
Vježba • dopunite deklaraciju klasa izmjenom tipova atributa (prema vašem mišljenju)
3.Konstruktori i destruktori • Konstruktor class Student() { function __construct($indeks) // ili function Student() { // pristup bazi, popunjavanje varijabli $this -> broj_indeksa = $indeks; } }
3.Konstruktori i destruktori • Destruktor class Student { function __destruct() { // čišćenje, zatvaranje veze na bazu,.... } }
Vježba • napišite konstruktore i destruktore klasa koristeći pseudokod (pišite iza znakova //) prema pretpostavci da podatke vadimo iz baze podataka
4. Metode klase (funkcije) • Metode (funkcije) klase class Student { public function smjer() {} static function godina() {} protected function pao() {} private function prosao() {} final function nenadjačiva() {} }
4. Metode klase (funkcije) class Student { void function ispisOsnovnihPodataka() { // konstruktor je već dohvatio podatke iz baze i postavio varijable echo $this->ime, ‘, ‘, $this->prezime, ‘, ‘, $this->smjer, ‘, ‘, $this->godina; } } • u okrugle zagrade funkcije možemo ubaciti “Student $obj” što će još podići sigurnost aplikacije jer će funkcija prihvaćati samo objekte tipa Student
Vježba • Napišite deklaracije potrebnih metoda za obje klase koristeći se pseudokodom
5. Sučelja (interfaces) • Sučelje definira koje metode neka klasa mora deklarirati • Na taj se način programer je siguran da neka klasa ima definirane te metode i da ih može pozvati iz svog koda... • Sučeljima se u biti definira API odnosno osigurava da ga sve klase koje ga implementiraju – podržavaju • Ovo moramo promatrati u kontekstu velikog projekta sa stotinama klasa i programera!
5. Sučelja (interfaces) • Deklaracija Interface ProvjeraUnosa { public function enkodiraj($unos); public function dekodiraj($unos); } • NE TIJELO METODE SAMO NAZIVE!
5. Sučelja (interfaces) • Implementacija class Sigurnost Implements ProvjeraUnosa [, sučelje2, sučelje3,...., sučeljeN] { public function encode($unos) { return htmlentities($unos); } public function decode($unos) { return html_entity_decode($unos); } }
Vježba • definirajte jedno sučelje koje će implementirati obje klase • doradite obje klase tako da sučelje bude ispravno implementirano
6. Iteratori • Klasa može IMPLEMENTIRATI Iterator sučelje kako bi jednostavno omogućila prolaz kroz skup zapisa • Npr. retke tekstualne datoteke ili zapise u recordset objektu iz baze podataka
6. Iteratori • Klasa mora: • Implementirati Iterator sučelje • Deklarirati metode: • rewind • current • key • next • valid
6. Iteratori class Datoteka Implements Iterator { // sve navedene metode + konstruktor+varij. } Primjena (u nekoj PHP datoteci): <?php require(‘classes/Datoteka.inc.php’); foreach (new Datoteka(‘ijugo/zapisi.txt’) as $k=> $v) { echo "{$k} {$v}"; } ?>
Vježba • Napravite ispravnu deklaraciju nove klase za ispis podataka iz datoteke koja implementira Iterator • Isto – ali sa bazom podataka
7. Nasljeđivanje i nadjačavanje • neka klasa može biti (u dijagramu ili nacrtu aplikacije) podklasa neke općenitije klase • pri prevođenju modela u kod podklase se implementiraju nasljeđivanjem • preciznije – korištenjem riječi extends • klase se proširuju/nasljeđuju, a metode se nadjačavaju
7. Nasljeđivanje i nadjačavanje • podklasa nasljeđuje sva svojstva nadklase, ali može definirati nova ili redefirati stara (osim ako su ...... što?) • ako se u podklasi ponovno deklarira metoda sa istim imenom kakvo je u nadklasi dolazi do nadjačavanja metode • obje metode će raditi, ali će nadjačana metoda davati drugačiji rezultat (ako joj je tako izmjenjen kod....)
7. Nasljeđivanje i nadjačavanje • Nasljeđivanje klasa class Student { // var., metode, konst., dest,.... } class StariStudent extends Student { ..... } class Doktorand extends Student { ..... } class Specijalist extends Student { .... } ....
7. Nasljeđivanje i nadjačavanje • Nadjačavanje metoda class Doktorand extends Student { function IspisOsnovnihPodataka() { echo $this->ime, ‘, ‘, $this->prezime, ‘, ‘, $this->mentor, ‘, ‘, $this->tema; } }
Vježba • Napravite deklaraciju nadklase ili podklase za obje klase koje smo napravili na početku • Isprobajte nadjačavanje metode • Izmjenite deklaraciju nadklase tako da onemogućite pokušaj nadjačavanja • ...
8. Ostali buzzword-i • ENKAPSULACIJA – jedna od glavnih prednosti OO pristupa – grupiranje funkcionalnosti (operacija) i povezanih podataka (atributa, varijabli) u čovjeku blizak i razumljiv koncept OBJEKTA (klase) • Klase su u biti korisnički definirani tipovi podataka (poznato iz brojnih prog. jezika,samo na steroidima ) • Druga osnovna ideja je – REUSABILITY – jednom napisan skup klasa za rad sa BP ili registraciju/prijavu/odjavu korisnika koristiti ćete za sve svoje projekte čime se štedi vrijeme (novac) i smanjuje mogućnost grešaka u kodu • kad po peti puta programiraš metode za registraciju, login i logout shvatiš poantu.... :-(
8. Ostali buzzword-i • DATA HIDING – public, private, protected, final, abstract omogućuju zaštitu podataka od slučajnog ili namjernog pokušaja čitanja ili mijenjanja... • MAINTAINABILITY – održavanje koda je komplicirano, pogotovo kod velikih projekata, sa velikim brojem pomoćnih funkcija, klase mogu podijeliti veliki broj pomoćnih funkcija na mali broj objekata