35
Objektno orjentirano programiranje Predavanje 10 Objekti u web servisima

Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

  • Upload
    lylien

  • View
    240

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Objektno orjentirano programiranje

Predavanje 10

Objekti u web servisima

Page 2: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Skriptni jezici temeljeni na objektima

• Jezici poput Jave i .NET jezika spadaju u kategoriju objektno orijentiranih programskih jezika

• C++ također ima mogućnost korištenja objekata, ali nije nužno koristiti objekte (možemo napisati obični C program koristeći C++ kompajler)

• Postoji i klasa jezika koji se zovu skriptni jezici: JavaScript, VBScript, ASP, JSP, PHP, Perl i Python – programski jezici koji mogu automatizirati i interpretirati izvršavanje različitih zadataka

Page 3: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Objekti i primjena u webu

• Klijentska i serverska validacija

Web server Web server

1

3

2

1

2

Serverska validacija Klijentska validacija

Page 4: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Objekti i primjena u webu• Pristupa bazama je dozvoljen samo podsredstvom servera zbog

sigurnosnih razloga

• Server odlučuje koje aktivnosti će dozvoliti, klijent ne može direktno manipulirati osjetljivim podacima

• S aspekta točnosti unesenih podataka potrebno je obaviti validaciju

• Klijentska i serverska validacija

• Kada radimo validaciju na klijentu manje podataka se treba slati na server što rezultira manjim prometom

• Redundantna validacija – validacija se obavlja na obje strane (i klijent i server)

• Postoje načini da klijent zaobiđe validaciju i pošalje podatke direktno na server

Page 5: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Objekti i primjena u webu

• Za slanje podataka na server potrebno je vrijeme

• Slanje podataka na server poveća količinu prometa

• Slanje podataka na server zauzima serverske resurse

• Slanje podataka na server može potencijalno rezultirati pogreškom

• Iz ovih razloga cilj je što više validacije obaviti na klijentu

• Tu do izražaja dolaze skriptni jezici

Page 6: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

JavaScript validacija

• JavaScript je object-based

• Možemo koristiti objekte u JavaScript aplikacija da bi smo dodali više mogućnosti našoj web stranici

• HTML je markup jezik koji ne pruža inherentne programske mogućnosti (npr. ne možemo programirati if uvjetni izraz ili napisati petlju

• U ranim danima HTML-a nije bilo moguće obaviti validaciju na klijentskoj strani

• Skriptni jezici su to promijenili

• Korištenjem funkcionalnosti koje nam pružaju skriptni jezici web stranice mogu izvršavati programsku logiku

Page 7: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

<html>

<head>

<title>Validacijski program</title>

<script type = “text/javascript”>

function validacijaBroja(tForm) {

if (tForm.result.value != 7 ) {

this.alert (“nije 7!”);

} else {

this.alert (“Točno. Broj je 7”);

}

}

</script>

</head>

<body>

<hr>

<h1>Validate</h1>

<form name=”form”>

<input type=”text” name=”result” value=”0” SIZE=”1”>

<input type=”button” value=”Validate” name=”validationButton”

onClick=” validacijaBroja(this.form)”>

</form>

<hr>

</body>

</html>

Page 8: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

JavaScript objekti

• JavaScript objekti predstavljaju spreminke (eng. container) za imenovane vrijednosti (eng. named values)

• var car = {type:"Fiat", model:500, color:"white"};

• Metode objekata

• Metode se spremljene u svojstva kao definicije funkcija

Property Property Value

firstName John

lastName Doe

age 50

eyeColor blue

fullName function() {return this.firstName + " " + this.lastName;}

Page 9: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

JavaScript objekti

• Pristupanje svojstvima objekata

• objectName.propertyName

• objectName[propertyName]

• Pristupanje metodama objekata

• objectName.methodName()

• this pokazivač referira trenutni objekt

• JavaScript ima i određeni broj ugrađenih tipova objekata, npr. Date

• Svaka instanca objekta Date ima ugrađene gotove metode kao getHours() ili getMinutes()

Page 10: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Objekti na web stranicama

• Mnogi tipovi objekata mogu biti direktno ugrađeni u HTML dokument

• <object> tag služi za uključivanje objekata

• Uključivanje flashobjekta

<!DOCTYPE html><html><body>

<object width=„200" height=„200" data="hello.swf"></object>

</body></html>

Page 11: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Objekti na web stranicama

• <object> tag se može koristiti za multimedije u web stranice (audio, video, Java applet, PDF, Flash)

• <param> tag se može koristiti za prosljeđivanje parametara plugin-ukoji je ugrađen u object tag

<!– Uključivanje flash videa s parametrima --><object data=„video.swf" type="application/x-shockwave-flash">

<param name="foo" value="bar"></object>

Page 12: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Web servisi

• Web servisi omogućavaju proces komunikacije između klijenta i servera korištrenjem XML poruka i SOAP (Simple Object Access Protocol) standarda

• SOAP je komunikacijski protokol za slanje poruka putem interneta

• Neovisan je o platformama i jeziku i temeljen na XML-u

• RPC (Remote Procedure Calls) su aktualni od početka evolucije distribuiranih sustava

• RPC su komunikacijski proces koji omogućava pozivanje servisa sa drugog računala na mreži

• Kada su sustavi u pravom smislu riječi objektno orijentirani RPC se može zvati i RMI (Remote Method Invocation)

Page 13: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

RPC

Sekvenca događaja tijekom RPC-a:

1. Klijent poziva klijent stub. Lokalni poziv procedure, parametri su stavljeni na stog

2. Stub pakira podatke u poruku i šalje poruku – marshaling

3. Klijentov lokalni OS šalje poruku na server

4. Server stavlja poruku na server stub

5. Server stub odpakira poruku

6. Server stub poziva serversku proceduru sa tim podacima. Odgovor se šalje klijentu na isti način

Page 14: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

SOAP

• Poziv metode je jednostavan u smislu da developer ne mora znati da li se radi o lokalnom ili udaljenom (eng. remote) servisu

• Primarna motivacija za SOAP je se mogu izvoditi pozivi procedura preko HTTP-a korištenjem XML-a

• Ukratko SOAP je temeljen na XML-u i radi se o protokolu za distribuirane aplikacije

Page 15: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

SOAP primjer

Zahtjev

POST /InStock HTTP/1.1Host: www.primjer.orgContent-Type: application/soap+xml; charset=utf-8Content-Length: nnn

<?xml version="1.0"?><soap:Envelopexmlns:soap="http://www.w3.org/2001/12/soap-envelope"soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.primjer.org/dionice"><m:DohvatiCijenuDionice><m:ImeDionice>Tesla</m:ImeDionice >

</m: DohvatiCijenuDionice ></soap:Body>

</soap:Envelope>

Page 16: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

SOAP primjer

Odgovor

HTTP/1.1 200 OKContent-Type: application/soap+xml; charset=utf-8Content-Length: nnn

<?xml version="1.0"?><soap:Envelopexmlns:soap="http://www.w3.org/2001/12/soap-envelope"soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.primjer.org/dionice"><m:OdgovorZaDohvatiCijenuDionice><m:Cijena>100.4</m:Cijena>

</m:OdgovorZaDohvatiCijenuDionice></soap:Body>

</soap:Envelope>

Page 17: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

REST

• Representational State Transfer

• REST je široko raširen i smatra se jednostavnijom alternativom SOAP-u

• Temelji se na HTTP protokolu

• Radi se o stilu arhitekture umreženih aplikacija. Umjesto korištenja kompleksnih mehanizama koristi se jednostavni http za pozive među računalima

• RESTful aplikacije koriste http zahtjeve za CRUD (create/read/update/delete) operacije

• REST nije standard niti postoji W3C preporuka za REST

Page 18: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

REST

• S aspekta programiranja REST je jednostavnija alternative web servisima i RPC-u

REST je:

• neovisan o platformi

• neovisan o jeziku

• moguće koristiti uz prisutnost firewall-a

Page 19: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Primjer

• Korištenje web servisa i SOAP

• Aplikacija telefonskog imenika gdje imamo ID korisnika

• SOAP verzija

• Sve se šalje http POST zahtjevom serveru

• Odgovor će biti XML file koji će biti ugrađen u SOAP response envelope

<?xml version="1.0"?><soap:Envelopexmlns:soap="http://www.w3.org/2001/12/soap-envelope"soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"><soap:body pb="http://www.trazilica.com/imenik"><pb:DohvatiPodatkeOKorisniku><pb:IDkorisnika>24123</pb:IDkorisnika></pb:DohvatiPodatkeOKorisniku></soap:Body></soap:Envelope>

Page 20: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Primjer REST

• Zahtjev izgleda ovako:

http://www.trazilica.com/imenik/PodaciOKorisniku/24123

• URL se šalje jednostavnim http GET zahtjevom

• Povratna informacija su čisti podaci, nisu ugrađeni u neki format

• Ovo je jednostavnija i neodređenija vrsta komunikacije

• Kada koristimo SOAP moramo koristiti biblioteke za stvaranje zahtjeva i ona parsirati odgovor koji dobijemo

• REST možemo testirati direktno kroz browser

Page 21: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

REST vs SOAP

• Analogija sa pismom i razglednicom

• SOAP – koristimo kao pismo koje stavljamo u omotnicu

• REST – koristimo kao razglednicu bez omotača

REST može biti siguran kao i SOAP koristeći https

Bez enkripcije oba protokola su nesigurna

Primjer korištenja više parametara

http://www.trazilica.com/imenik/PodaciOKorisniku?ime=Ivan&prezime=Ivic

U slčaju da želim poslati mnogo parametara ili binarne podatke koristimo POST zahtjeve

Page 22: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

REST

• Nije nužno objektno orijentiran

• može kao odgovor vraćati i XML ali to često nije slučaj

• Jedna od prednosti korištenja XML-a je sigurnost u određivanju tipova podataka

• Ne moramo koristiti dedicirane biblioteke već u većina slučajeva možemo koristiti ugrađene funkcionalnosti programskih jezika

Page 23: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Dio 2 - Debugging

• Debugging – proces identifikacije uzroka greške i ispravljanje pogreške

• Na nekim projektima proces debagiranja uzima i do 50% ukupnog vremena razvoja

• Za većinu programera debagiranje predstavlja najteži dio razvoja softvera

• Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. —Brian W. Kernighan

Page 24: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Razlike u učinkovitosti uklanjanja pogrešaka

• Najbolji način izbjegavanja pogrešaka nije debagiranje već kvalitetan razvoj softvera

• Ne trebamo birati između kvalitete, cijene i vremena – oni idu zajedno

Izvor: Some psychological evidence on how people debug computer programs (Gould 1975)

Tri najbrža programera Tri najsporija programera

Prosječno vrijeme debagiranja (u

minutama) 5.0 14.1

Prosječni broj nepronađenih

defekata 0.7 1.7

Prosječan broj defekata uvedenih

ispravljenjem drugih defekata 3.0 7.7

Page 25: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Defekti kao prilike

• Što znači imati defekt u programu?

• ne razumijemo točno što program radi

• Programiranje pokušaja i pogreške – mijenjamo program dok ne dobijemo točan rezultat bez da u potpunosti razumijemo što se odvija u programu

• Ovakav pristup će vrlo vjerojatno prouzročiti pogreške

• Postoje dobre prakse za proces debagiranja:

Page 26: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Defekti kao prilike

• Nauči više o programu na kojem radiš – bolje razumijevanje problema vodi lakšem rješavanju defekata

• Nauči više o pogreškama koje radiš – u budućnosti ćeš bolje izbjegavati ili uočiti takve pogreške

• Razmatraj kvalitetu koda s aspekta njegove čitljivosti irazumljivosti

• Analiziraj svoj metode popravljanja defekata – obično se držimo ustaljenih mehanizama i prakse

Page 27: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Pogrešni pristup debagiranju

• Popravljanje defekta pogađanjem

• Ne uzimanje dovoljno vremena za razumijevanje problema

• Popravljanje simptoma

x = Izracunaj( z )

if ( z = 23 )

y = 16.23 -- Izracunaj() ne funkcionira za y = 23, ispravak

Page 28: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Znanstveni pristup debagiranju

Klasična znanstvena metoda:

1. Prikupljanje podataka kroz ponovljive eksperimente

2. Formiranje hipoteze iz prikupljenih podataka

3. Dizajniranje eksperimenta koji će dokazati ili osporiti hipotezu

4. Dokazivanje ili osporavanje hipoteze

5. Ponoviti ako je potrebno

Page 29: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Znanstvena metoda u debagiranju

Primjena u debagiranju:

1. Stabilizacija pogreške

2. Lociranje izvora pogreškea) Prikupljanje podataka koji uzrokuju grešku

b) Analiziranje podataka i formiranje hipoteze o grešci

c) Utvrditi kako potvrditi ili osporiti hipotezu, ili testiranjem ili analizom koda

d) Potvrditi ili osporiti hipotezu

3. Popravljanje pogreške

4. Testiranje popravka

5. Traženje sličnih pogrešaka

Page 30: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Stabilizacija pogreške

• Ako se greška ne pojavljuje pouzdano gotovo je nemoguće napraviti dijagnozu problema

• U takvom slučaju se obično radi o inicijalizacijskoj pogrešci, problemu s tajmingom ili problemu s pokazivačima

• Stabilizacija greške ne znači samo pronaći jedan scenarij gdje se ona pojavljuje, potrebno je pronaći najsuženiji skup mogućih scenarija koji generiraju pogrešku

• Nakon toga variramo podatke i promatramo na koji način se mijenja pogreška

Page 31: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Sintaksne pogreške

Kada se radi o sintaksnim pogreškama:

• Kompajlerske poruke sa brojevima linija koda nisu uvijek točne

• Kompajlerski opis greške nije uvijek točan

• Druga komapjlerska poruka je često nepreciznija od prve

• Podijeli pa vladaj

Page 32: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Debagiranje

• Generiranje više podataka da bi se generiralo više hipoteza

• Sužavanje pretrage na potencijalno opasni kod

• Posebna pažnja na klasama i procedurama koje su i prije imale pogreške

• Provjeravanje koda koji se nedavno mijenjao

• Inkrementalno integriranje

• Provjera standardnih pogrešaka

• Razgovor sa suradnicima o problemu

• Uzimanje pauze od problema i gledanje iz druge perspektive

Page 33: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Psihologija i debagiranje

• Debagiranje je intelektualno zahtjevna aktivnost

• Kod programiranja je potrebno kreativno razmišljanje, za debagiranje je bitna rigoroznost i formalizacija

• Kod debagiranja veliku ulogu igra mogućnost prepoznavanja pogreške

• Često vidimo ono što očekujemo da ćemo vidjeti

Page 34: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

• Programer koji gleda ovaj dio koda:

if ( x < y )

temp= x;

x = y;

y = temp;

vidi ovakav kod:

if ( x < y ) {

temp = x;

x = y;

y = temp;

}

Page 35: Objektno orjentirano programiranje - Računarstvo 550. semestar/Objektno... · ASP, JSP, PHP, Perl i Python –programski jezici koji mogu ... •Programiranje pokušaja i pogreške

Debuggeri

• Komercijalno dostupni debuggeri kroz vrijeme stabilno napreduju

Dobri debuggeri omogućavaju:

• postavljanje breakpointa na specifičnu liniju

• aktiviranje breakpointa kada se posjeti n-ti put

• aktiviranje kada se globalna varijabla promijeni

• aktiviranje kada varijabla dobije određenu vrijednost

• pomicanje u kodu liniju po liniju

• ulaz i izlaz iz funkcija/metoda

• pomicanje izvršavanja unatrag do točke kada greška nastaje

• potpunu inspekciju strukturalnih i dinamičkih podataka