SlideShare a Scribd company logo
1 of 28
U raljama objekata
Stipe Predanić
Objekti u PHP-u
● objekti uvedeni u verziji 4
● (skoro) puna podrška za objekte u PHP5
● jednostruko naslje ivanjeđ
● konstruktor / destruktor
● enkapsulacija
● ne podržava polimorfizam ali se isti može simulirati
● stati ke funkciječ
PHP klase
class MojaKlasa extends Roditelj {
var $varijabla; //
var $varijabla2; // var!
function funkcija ($arg1, $arg2=0) {
.
.
}
}
Konstruktor i destruktor
class MojaDrugaKlasa {
var $varijabla;
function __construct ($arg1) {
$this->varijabla=$arg1;
}
function __destruct () {
.
}
} destruktor ne
prima argumente
Pristup varijablama i metodama
$element1= new MojaKlasa();
$element1->varijabla=”Marko”;
$element1->funkcija(123);
$element2= new MojaDrugaKlasa(“Stipe”);
echo $element2->varijabla;
varijable su public tipa
Pristup varijablama i metodama
● PHP podržava private i protected elemente
class MojaKlasa extends Roditelj {
private var $varijabla;
protected function funkcija ($arg1,
$arg2=0) { ... }
function getVarijabla() {
return $this->varijabla;
}
}
klasa djeca izvana
public da da da
protected da da ne
private da ne ne
Naslje ivanjeđ
class Roditelj {
var $varijabla;
private var $varijabla2;
function funkcija ($arg1, $arg2=0) {
}
}
class MojaKlasa extends Roditelj {
function funkcija2 ($arg) { ..}
} MojaKlasa NEMA $varijabla2!!
Nadja avanje (overriding)č
● samo se stvori nova metoda istog naziva u
klasama djeci
class MojaKlasa extends Roditelj {
function funkcija ($arg) { ..}
}
● ako se želi blokirati nadja anje, u roditelju se zač
željenu metodu stavi klju na rije “final”č č
final function funkcija ($arg1,
$arg2=0) { .. } “finalna” može biti i klasa
kojoj ne dopuštamo
naslje ivanjeđ
varijable ne mogu biti finalne
Interface & abstract
● PHP podržava su elja i apstraktne klaseč
Interface Mail {
public function posaljiMail();
}
class Raport implements Mail {
// mora postojati metoda posaljiMail
}
abstract class Lista {
abstract function getLista() { }
}
Interface – sve metode su apstraktne, samo po sebi nije klasa
Abstract – barem jedna metoda mora biti apstraktna,
ne može se instancirati
Preoptere ivanjeć
● PHP ne podržava preoptere ivanjeć
● ali ga može dobro simulirati
– broj i tip argumenata funkcije nisu “striktno” definirani!
class MojaKlasa extends Roditelj {
function funkcija ($arg1) {
if (is_string($arg1)) {...}
else
if (is_int($arg1))
$varijabla=func_get_arg(1);
}
}
Statika?
● želimo koristiti metode klase bez instanciranja?
class MojaKlasa extends Roditelj {
function podnozje() {
return 'Copyright by me,
2011';
}
}
echo MojaKlasa::podnozje();
Roditelj?
● klju na rije parent daje referencu na roditeljsku klasuč č
class MojaKlasa extends Roditelj {
function funkcija ($arg1) {
$međurezultat=parent::drugaFunkcija();
. . .
}
}
Serijalizacija
● PHP ima funkcije serialize i unserialize
$mojElement=new MojaKlasa;
$serijalizirano=serialize($mojElement);
$noviElement=unserialize($serijalizirano);
● kako klase nije (uvijek) trivijalno serijalizirati
● __sleep()
– pokre e se prije serijalizacijeć
● __wakeup()
– pokre e se nakon serijalizacijeć
stdClass
● PHP ima generi ku praznu klasuč
● stdClass
● Napomena: to nije bazna klasa za sve klase
● koristi se kad je potrebna anonimna klasa samo
u tom trenutku ( esto zamjena za arrayč
podataka)
Dodatne funkcije
● PHP nudi dodatne funkcije za rad sa klasama
● get_parent_class()
● class_exists()
● method_exists()
● get_object_vars()
– zgodno, daje array svih varijabli iz objekta
● za više informacija pogledajte www.php.net
JavaScript objekti
● sve je objekt
● sve
– sve
● stvorimo varijablu i instanciramo op eniti tip Objectć
● Object je bazna klasa za sve objekte
var lopta=new Object;
lopta.boja=”red”;
lopta.velicina=”40”;
lopta.kotrlja=function() {
return udaljenost=this.velicina*this.snaga;
}
Objekti
● stvaranje
● var lopta = new Object;
● var lopta= { };
● dodavanje varijable
● samo je po nemo koristitič
● lopta.boja=”red”;
● dodavanje metoda
● kao jednu varijablu definiramo funkciju
lopta.kotrlja=function(snaga) {
return udaljenost=this.velicina*snaga;
}
Objekti u novom svjetlu...
● u JavaScriptu su i funkcije objekti
● nova “klasa” se instancira kao funkcija
function student(ime, prezime, jmbag) {
this.ime=ime;
this.prezime=prezime;
this.jmbag=jmbag;
this.ispisi=function() {
alert(this.ime+' '+this.prezime+':'+this.jmbag);
}
}
var jedanStudent=new student('Ivan','Horvat','0246002323');
konstruktor (ili najbliže tome)
Dodavanje metode
● JavaScript dopušta dodavanje metode nakon
po etne definiciječ
● klju na rije prototypeč č
student.prototype.promjeniJMBAG = function(jmbag)
{
this.jmbag = jmbag ;
}
● ovim na inom se mogu proširiti metode zač
ugra ene JavaScript objekteđ
Pristup varijablama
● varijable se ponašaju kao da su u polju
● jedanStudent.ime je isto kao
jedanStudent[“ime”]
● može se pro i kroz objekt kao kroz poljeć
– for (var podatak in jedanStudent )
– daje “ime”, “prezime”, “jmbag”, “ispisi”
– jedanStudent[podatak] daje prave podatke!
● možemo provjeriti postoji li varijabla ili metoda
– if (“ime” in jedanStudent)
Naslje ivanjeđ
● naslje ivanje u JavaScriptu se može izvesti na nekoliko na ina.đ č
● najjednostavniji
function superClass() {
this.bye = superBye;
this.hello = superHello;
}
function subClass() {
this.bye = subBye;
}
subClass.prototype = new superClass;
ovim prototype-om
unosimo ne samo
novu metodu, nego
cijelu klasu
function superHello() {
return "Hello from superClass";
}
function superBye() {
return "Bye from superClass";
}
function subBye() {
return "Bye from subClass";
}
var newClass = new subClass();
ova metoda nadja ač
metodu roditelja
ova metoda e bitić
nadja anač
ova metoda e ostatić
u djeci
Literalni oblik objekta
● kod instanciranja jednog objekta koristi se i literalni oblik
student = {
ime : "Ivan",
prezime: "Horvat",
ocjene : [ {predmet:"Programiranje", ocjena:2 },
{predmet:"Digitalni sklopovi", ocjena:2} ],
getOcjene : function(){
for (ocjena in this.ocjene)
alert(this.ocjene[ocjena].predmet);
}
};
student.getOcjene(); nema potrebe za
instanciranjem varijable
tipa objekt
JSON
● izbacivanjem metoda i zadržavanjem varijabli dobiven
je JSON
● JavaScript Object Notation
● koristi se za prenos podataka
– kao i XML, ali je JSON jednostavniji i itljivijič
● JSON datoteka prenesena preko mreže se mora parsirati
– starija metoda (nesigurnija)
● var p = eval("(" + jsonText + ")");
– postoje javascript “klase” koje parsiraju json
– browseri imaju ugra enu podršku za sigurno parsiranje jsonađ
● var p=jsonText.parse();
Primjer JSON datoteke
{
"firstName": "John",
"lastName": "Smith",
"age": 25,
"address": { "streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021" },
"phoneNumber":
[ { "type": "home",
"number": "212 555-1234" },
{ "type": "fax",
"number": "646 555-4567" }
]
}
OO i JavaScript
● JavaScript (EcmaScript 5) nije osmišljen kao
klasi ni OO jezikč
● ali osnovne stvari radi OK
● OO je potreban zbog rada u skoro svakom
frameworku
● za više informacija
● Stefanov S. (2010), JavaScript Patterns, O'Reilly
Media
EcmaScript 6
● EcmaScript 6 donosi veliki pomak prema
“tradicionalnom” radu s objektima
class Shape {
constructor (id, x, y) {
this.id = id;
this.move(x, y);
}
move (x, y) {
this.x = x;
this.y = y;
}
}
class Rectangle extends Shape {
constructor (id, x, y, width, height)
{
super(id, x, y);
this.width = width;
this.height = height;
}
}
class Circle extends Shape {
constructor (id, x, y, radius) {
super(id, x, y);
this.radius = radius;
}
}
Idu e predavanjeć
● sigurnost

More Related Content

More from Stipe Predanic

More from Stipe Predanic (20)

Osnove bežičnih mreža - Predavanje Bežične radiokomunikacije
Osnove bežičnih mreža - Predavanje Bežične radiokomunikacijeOsnove bežičnih mreža - Predavanje Bežične radiokomunikacije
Osnove bežičnih mreža - Predavanje Bežične radiokomunikacije
 
[ERRO] Predavanje: FPGA 12.1.2017
[ERRO] Predavanje: FPGA 12.1.2017 [ERRO] Predavanje: FPGA 12.1.2017
[ERRO] Predavanje: FPGA 12.1.2017
 
[ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016
[ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016 [ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016
[ERRO] Predavanje: 8 i 32 bitni mikroupravljači/mikroprocesori 15.12.2016
 
[ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016
[ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016 [ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016
[ERRO] Predavanje: Komunikacija s mikroupravljačem 8.12.2016
 
[ERRO] Predavanje: Napajanje uređaja 8.12.2016
[ERRO] Predavanje: Napajanje uređaja 8.12.2016 [ERRO] Predavanje: Napajanje uređaja 8.12.2016
[ERRO] Predavanje: Napajanje uređaja 8.12.2016
 
[ERRO] Predavanje: Prikaz podataka 1.12.2016
[ERRO] Predavanje: Prikaz podataka 1.12.2016 [ERRO] Predavanje: Prikaz podataka 1.12.2016
[ERRO] Predavanje: Prikaz podataka 1.12.2016
 
[ERRO] Predavanje: RTOS
[ERRO] Predavanje: RTOS[ERRO] Predavanje: RTOS
[ERRO] Predavanje: RTOS
 
[ERRO] Predavanje: Porodice mikroupravljača
[ERRO] Predavanje: Porodice mikroupravljača[ERRO] Predavanje: Porodice mikroupravljača
[ERRO] Predavanje: Porodice mikroupravljača
 
[ERRO] Predavanje: 8051
[ERRO] Predavanje: 8051 [ERRO] Predavanje: 8051
[ERRO] Predavanje: 8051
 
[ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016)
[ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016) [ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016)
[ERRO] Predavanje: ulazi/izlazi na mikroupravljač (27.10.2016)
 
[ERRO] Predavanje: MARIE model procesora
[ERRO] Predavanje: MARIE model procesora [ERRO] Predavanje: MARIE model procesora
[ERRO] Predavanje: MARIE model procesora
 
[ERRO] Predavanje: Ponavljanje digitalnih sklopova
[ERRO] Predavanje: Ponavljanje digitalnih sklopova [ERRO] Predavanje: Ponavljanje digitalnih sklopova
[ERRO] Predavanje: Ponavljanje digitalnih sklopova
 
[ERRO] Uvodno predavanje (pravila polaganja ispita)
[ERRO] Uvodno predavanje (pravila polaganja ispita) [ERRO] Uvodno predavanje (pravila polaganja ispita)
[ERRO] Uvodno predavanje (pravila polaganja ispita)
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 12.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 12. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 12.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 12.
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 10.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 10. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 10.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 10.
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 8.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 8. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 8.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 8.
 
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 5.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 5. [TVZ Računarstvo] Dinamičke web aplikacije, predavanje 5.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 5.
 
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4. [TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4.
[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 4.
 

[TVZ Računarstvo] Dinamičke web aplikacije, predavanje 7.

  • 2. Objekti u PHP-u ● objekti uvedeni u verziji 4 ● (skoro) puna podrška za objekte u PHP5 ● jednostruko naslje ivanjeđ ● konstruktor / destruktor ● enkapsulacija ● ne podržava polimorfizam ali se isti može simulirati ● stati ke funkciječ
  • 3. PHP klase class MojaKlasa extends Roditelj { var $varijabla; // var $varijabla2; // var! function funkcija ($arg1, $arg2=0) { . . } }
  • 4. Konstruktor i destruktor class MojaDrugaKlasa { var $varijabla; function __construct ($arg1) { $this->varijabla=$arg1; } function __destruct () { . } } destruktor ne prima argumente
  • 5. Pristup varijablama i metodama $element1= new MojaKlasa(); $element1->varijabla=”Marko”; $element1->funkcija(123); $element2= new MojaDrugaKlasa(“Stipe”); echo $element2->varijabla; varijable su public tipa
  • 6. Pristup varijablama i metodama ● PHP podržava private i protected elemente class MojaKlasa extends Roditelj { private var $varijabla; protected function funkcija ($arg1, $arg2=0) { ... } function getVarijabla() { return $this->varijabla; } } klasa djeca izvana public da da da protected da da ne private da ne ne
  • 7. Naslje ivanjeđ class Roditelj { var $varijabla; private var $varijabla2; function funkcija ($arg1, $arg2=0) { } } class MojaKlasa extends Roditelj { function funkcija2 ($arg) { ..} } MojaKlasa NEMA $varijabla2!!
  • 8. Nadja avanje (overriding)č ● samo se stvori nova metoda istog naziva u klasama djeci class MojaKlasa extends Roditelj { function funkcija ($arg) { ..} } ● ako se želi blokirati nadja anje, u roditelju se zač željenu metodu stavi klju na rije “final”č č final function funkcija ($arg1, $arg2=0) { .. } “finalna” može biti i klasa kojoj ne dopuštamo naslje ivanjeđ varijable ne mogu biti finalne
  • 9. Interface & abstract ● PHP podržava su elja i apstraktne klaseč Interface Mail { public function posaljiMail(); } class Raport implements Mail { // mora postojati metoda posaljiMail } abstract class Lista { abstract function getLista() { } } Interface – sve metode su apstraktne, samo po sebi nije klasa Abstract – barem jedna metoda mora biti apstraktna, ne može se instancirati
  • 10. Preoptere ivanjeć ● PHP ne podržava preoptere ivanjeć ● ali ga može dobro simulirati – broj i tip argumenata funkcije nisu “striktno” definirani! class MojaKlasa extends Roditelj { function funkcija ($arg1) { if (is_string($arg1)) {...} else if (is_int($arg1)) $varijabla=func_get_arg(1); } }
  • 11. Statika? ● želimo koristiti metode klase bez instanciranja? class MojaKlasa extends Roditelj { function podnozje() { return 'Copyright by me, 2011'; } } echo MojaKlasa::podnozje();
  • 12. Roditelj? ● klju na rije parent daje referencu na roditeljsku klasuč č class MojaKlasa extends Roditelj { function funkcija ($arg1) { $međurezultat=parent::drugaFunkcija(); . . . } }
  • 13. Serijalizacija ● PHP ima funkcije serialize i unserialize $mojElement=new MojaKlasa; $serijalizirano=serialize($mojElement); $noviElement=unserialize($serijalizirano); ● kako klase nije (uvijek) trivijalno serijalizirati ● __sleep() – pokre e se prije serijalizacijeć ● __wakeup() – pokre e se nakon serijalizacijeć
  • 14. stdClass ● PHP ima generi ku praznu klasuč ● stdClass ● Napomena: to nije bazna klasa za sve klase ● koristi se kad je potrebna anonimna klasa samo u tom trenutku ( esto zamjena za arrayč podataka)
  • 15. Dodatne funkcije ● PHP nudi dodatne funkcije za rad sa klasama ● get_parent_class() ● class_exists() ● method_exists() ● get_object_vars() – zgodno, daje array svih varijabli iz objekta ● za više informacija pogledajte www.php.net
  • 16. JavaScript objekti ● sve je objekt ● sve – sve ● stvorimo varijablu i instanciramo op eniti tip Objectć ● Object je bazna klasa za sve objekte var lopta=new Object; lopta.boja=”red”; lopta.velicina=”40”; lopta.kotrlja=function() { return udaljenost=this.velicina*this.snaga; }
  • 17. Objekti ● stvaranje ● var lopta = new Object; ● var lopta= { }; ● dodavanje varijable ● samo je po nemo koristitič ● lopta.boja=”red”; ● dodavanje metoda ● kao jednu varijablu definiramo funkciju lopta.kotrlja=function(snaga) { return udaljenost=this.velicina*snaga; }
  • 18. Objekti u novom svjetlu... ● u JavaScriptu su i funkcije objekti ● nova “klasa” se instancira kao funkcija function student(ime, prezime, jmbag) { this.ime=ime; this.prezime=prezime; this.jmbag=jmbag; this.ispisi=function() { alert(this.ime+' '+this.prezime+':'+this.jmbag); } } var jedanStudent=new student('Ivan','Horvat','0246002323'); konstruktor (ili najbliže tome)
  • 19. Dodavanje metode ● JavaScript dopušta dodavanje metode nakon po etne definiciječ ● klju na rije prototypeč č student.prototype.promjeniJMBAG = function(jmbag) { this.jmbag = jmbag ; } ● ovim na inom se mogu proširiti metode zač ugra ene JavaScript objekteđ
  • 20. Pristup varijablama ● varijable se ponašaju kao da su u polju ● jedanStudent.ime je isto kao jedanStudent[“ime”] ● može se pro i kroz objekt kao kroz poljeć – for (var podatak in jedanStudent ) – daje “ime”, “prezime”, “jmbag”, “ispisi” – jedanStudent[podatak] daje prave podatke! ● možemo provjeriti postoji li varijabla ili metoda – if (“ime” in jedanStudent)
  • 21. Naslje ivanjeđ ● naslje ivanje u JavaScriptu se može izvesti na nekoliko na ina.đ č ● najjednostavniji function superClass() { this.bye = superBye; this.hello = superHello; } function subClass() { this.bye = subBye; } subClass.prototype = new superClass; ovim prototype-om unosimo ne samo novu metodu, nego cijelu klasu
  • 22. function superHello() { return "Hello from superClass"; } function superBye() { return "Bye from superClass"; } function subBye() { return "Bye from subClass"; } var newClass = new subClass(); ova metoda nadja ač metodu roditelja ova metoda e bitić nadja anač ova metoda e ostatić u djeci
  • 23. Literalni oblik objekta ● kod instanciranja jednog objekta koristi se i literalni oblik student = { ime : "Ivan", prezime: "Horvat", ocjene : [ {predmet:"Programiranje", ocjena:2 }, {predmet:"Digitalni sklopovi", ocjena:2} ], getOcjene : function(){ for (ocjena in this.ocjene) alert(this.ocjene[ocjena].predmet); } }; student.getOcjene(); nema potrebe za instanciranjem varijable tipa objekt
  • 24. JSON ● izbacivanjem metoda i zadržavanjem varijabli dobiven je JSON ● JavaScript Object Notation ● koristi se za prenos podataka – kao i XML, ali je JSON jednostavniji i itljivijič ● JSON datoteka prenesena preko mreže se mora parsirati – starija metoda (nesigurnija) ● var p = eval("(" + jsonText + ")"); – postoje javascript “klase” koje parsiraju json – browseri imaju ugra enu podršku za sigurno parsiranje jsonađ ● var p=jsonText.parse();
  • 25. Primjer JSON datoteke { "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }
  • 26. OO i JavaScript ● JavaScript (EcmaScript 5) nije osmišljen kao klasi ni OO jezikč ● ali osnovne stvari radi OK ● OO je potreban zbog rada u skoro svakom frameworku ● za više informacija ● Stefanov S. (2010), JavaScript Patterns, O'Reilly Media
  • 27. EcmaScript 6 ● EcmaScript 6 donosi veliki pomak prema “tradicionalnom” radu s objektima class Shape { constructor (id, x, y) { this.id = id; this.move(x, y); } move (x, y) { this.x = x; this.y = y; } } class Rectangle extends Shape { constructor (id, x, y, width, height) { super(id, x, y); this.width = width; this.height = height; } } class Circle extends Shape { constructor (id, x, y, radius) { super(id, x, y); this.radius = radius; } }

Editor's Notes

  1. HTTP 0.9 – 1991 HTTP 1.0 – 1996 HTTP 1.1 – 1997