WEB-PROGRAMOZÁS II 1.
Egészítse ki a következő PHP kódot a következők szerint:
a) Legyen a Felhasznalo osztálynak egy osztály szintű publikus változója, amelyben számolja a létrehozott példányai számát.
b) A Felhasznalo osztály valósítsa meg a Kiir interfészt és a Kiir metódusa írja ki a példány összes c) d) e)
tulajdonságát. Definiáljon egy Hallgato osztályt, amelyet a Felhasznalo osztályból származtatunk és rendelkezik egy szak tagváltozóval, amely csak az osztályon belül érhető el, és a konstruktorban kap egy a konstruktornak paraméterként átadott értéket. Írja meg a Hallgato osztály Kir metódusát, amely a példány összes tulajdonságát írja ki és felhasználja a szülőosztály Kiir metódusát. Írjon meg egy tesztelő programot, amely létrehoz két Felhasznalo és egy Hallgato típusú objektumot , majd kiírja a három létrehozott objektum tulajdonságait a Kiir metódus segítségével, és végül kiírja a Felhasznalo osztály szintű publikus változójának az értékét.
a,b,c,d: nev = $nev; $this->cim = $cim; $this->kod = $kod; $this->jelszo = sha1($jelszo); $this->szuletes_datum = $szuletes_datum; ++self::$darab; } public function kiir() { echo "nev: $this->nev
"; echo "cim: $this->cim
"; echo "kod: $this->kod
"; echo "jelszo: $this->jelszo
"; echo "szuletesi datum: $this->szuletes_datum
"; } } class Hallgato extends Felhasznalo { private $szak;
public function __construct($nev, $cim, $kod, $jelszo, $szuletes_datum, $szak) { parent::__construct($nev, $cim, $kod, $jelszo, $szuletes_datum); $this->szak = $szak; } public function kiir() { parent::kiir(); echo "szak: $this->szak
"; } } ?> e: kiir(); $f2->kiir(); $h->kiir(); echo "ossz darabszam: " + Felhasznalo::$darab; ?> 2.
Egészítse ki a következő mondatokat a PHP5 objektum orientált tulajdonságai alapján: A(z) parent egy osztály deklarációjában az aktuális osztály szülőosztályát, a(z) self az aktuális osztályt, a(z) $this az aktuális példányt jelöli. A(z) class az osztályok deklarációjához használt kulcsszó, a(z) extends kulcsszót az alosztályok deklarációjában használjuk a szülőosztály megadása előtt. A(z) abstract kulcsszóval deklarált osztályokból nem hozható létre példány. A(z) static kulcsszóval deklarált változók és metódusok osztályszintű tagváltozók ill. metódusok. A(z) protected kulcsszóval deklarált tagváltozók és tagfüggvények nem érhetők el közvetlenül az osztály felhasználói által, csak egy, az osztálytól öröklő alosztályon belül. A(z) private kulcsszóval deklarált tagváltozók és tagfüggvények csak azon az osztályon belül hozzáférhetők, amelyben meghatározták őket. Ha egy tagváltozó vagy tagfüggvény deklarációjában nem használunk a fenti kulcsszavak egyikét sem, akkor ez ekvivalens a(z) public kulcsszóval megtett deklarációjával.
3.
Mi lesz a következő PHP 5 szkriptnek a kimenete?
self::$vOsztaly[] = $this; $this->vPeldany = $param; } public function vOsztalyLista() { echo "Objektumok száma: ".count(self::$vOsztaly)."
"; echo "Objektumok:
"; for($i=0; $i< count(self::$vOsztaly); $i++) echo self::$vOsztaly[$i]->vPeldany."
"; } } for($i=0; $i<3; $i++) { $teszt = new vPHP5Osztaly($i.". példány"); } vPHP5Osztaly::vOsztalyLista(); ?> igazabol valoszinuleg egy errort dob ki, mivel a vOsztalyLista() metodus nem statikus, de szerintem ez csak eliras, amugy a kimenet ilyesmi: Objektumok szama: 3 Objektumok: 0. peldany 1. peldany 2. peldany 4.
Párosítsa a táblázat bal oldalán megadott PHP 5 nyelvi konstrukciók a jobb oldalon szereplő leírásokkal:
a) self b) new c) $this d) extend e) parent f) instanceof g) static
e) Egy osztály deklarációjában az aktuális osztály szülőosztályát jelöli. a) Egy osztály deklarációjában az aktuális osztályt jelöli. ) Egy osztálynak egy alosztályát jelöli. g) Osztályhoz kötődő tagváltozókat és tagfüggvényeket jelöli. d) Öröklési kapcsolatot kifejező kulcsszó. b) Példányt létrehozó operátor. c) Egy osztály deklarációjában az aktuális példányt jelöli. f) Osztályba való tartozás (az osztálynak példánya-e) logikai operátora
5. Igazak (I) vagy hamisak a következő állítások: a. igaz A webszolgáltatások XML alapú szabványos üzeneteken keresztül kommunikálnak más szoftverekkel. b. hamis A webszolgáltatások csak webalkalmazásokból érhetők el. c. igaz A WSDL (webszolgáltatásokat leíró nyelv) XML alapú. d) igaz? A webszolgáltatások kommunikálhatnak egymással. 6.
Írja le röviden a következő elnevezések jelentéseit: a)
Webszolgáltatás Egy webszolgáltatás egy olyan szoftver, amely elérhető web-en keresztül és XML alapú szabványos üzeneteken keresztül kommunikál más szoftverekkel (kérelmeket fogad és válaszokat küld).
b) HTTP A HTTP egy állapotmentes, kérés-válasz alapú protokoll, kliens és szerver között. c)
SOAP (az eredeti nevéből: Simple Object Access Protocol). Alkalmazások közötti üzenet küldésére használt XML alapú protokoll. A webszolgáltatást használó alkalmazás üzenete és a webszolgáltatás válaszüzenete struktúráját leíró protokoll.
d) WSDL (Web Services Description Language). A webszolgáltatás nyilvános felületének a leírását szolgáló, XML alapú protokoll. e) UDDI (Universal Description, Discovery, and Integration). XML alapú nyilvántartó rendszer. Az UDDI lehetővé teszi a webszolgáltatások felfedezését az Interneten és integrálását az alkalmazásba úgy, hogy SOAP üzenetekkel lekérdezhető és hozzáférést biztosít a WSDL-hez.
7. A következő JavaScript kód definiálja a Car nevű osztályt. a) Adja hozzá az osztály definíciójához a cc nevű tagváltozót. Az új tagváltozó a példányok létrehozásakor kap egy a konstruktőrnek paraméterként átadott iCc értéket.
b) Írja meg a definiált osztály showCar metódusát, amely egy „alert” ablakban (csak egy alert utasítást írunk meg) jeleníti meg a példány következő tulajdonságainak az értékeit: szín (color), ajtók száma (doors), fogyasztás (mpg) és hengerűrtartalom (cc). function Car(sColor, iDoors, iMpg, iCc) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.cc = iCc; this.drivers = new Array(); this.showCar = function () { alert(this.color + " " + this.doors + " " + this.mpg + " " + this.cc) }; } 8.
Milyen tartalmú üzenetablakok jelennek meg, az alábbi JavaScript kód végrehajtására?
function Car(sColor, iDoors, iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array( ); } Car.prototype.showColor = function () { alert(this.color); }; var oCar1 = new Car("piros", 4, 23); var oCar2 = new Car("kék", 3, 25); oCar1.drivers.push("Péter"); oCar1.drivers.push("László"); oCar2.drivers.push("Mária"); oCar1.showColor(); // piros oCar2.showColor(); // kek alert(oCar1.doors); // 4 alert(oCar2.doors); // 3 alert(oCar1.drivers); // Peter,Laszlo alert(oCar2.drivers); // Maria
9. Egészítse ki az alábbi kódot a pontokkal megjelölt helyeken, hogy AJAX segítségével a div elemben jelenítse
meg az input elembe beírt felhasználó névre az user.php szkript által megatározott és visszaküldött adatokat. <script type="text/javascript"> function ajaxFunction() { var xmlHttp = /* Az xmlHttp objektum létrehozása */; xmlHttp.onreadystatechange=function() { if(xmlHttp.readyState==4){ document.getElementById("ebbe").innerHTML = xmlHttp.responseText; } } var url = "user.php?sid=" + Math.random(); xmlHttp.open("GET", url, true); // ajax hívás létrehozása xmlHttp.send(null); // ajax hívás végrehajtása
}
10. Írja meg egy JavaScript programrészletet, amely megvalósít egy Ajax hívást a következő tulajdonságokkal: URL: teszt.php Módszer: GET Paraméter: par Értéke: 455 Mód: a) Szinkron // ... var url="teszt.php?par=455"; url+="&sid="+Math.random(); xmlHttp.onreadystatechange=kiir; xmlHttp.open("GET",url,false); xmlHttp.send(null); function kiir() { if (xmlHttp.readyState==4) { alert(xmlHttp.responseText); } } b) Aszinkron // ... var url="teszt.php?par=455"; url+="&sid="+Math.random(); xmlHttp.onreadystatechange=kiir; xmlHttp.open("GET",url,true); xmlHttp.send(null); function kiir() {
}
if (xmlHttp.readyState==4) { alert(xmlHttp.responseText); }
Jelenítsük meg egy üzenetablakban („alert”) a hívás eredményét mindkét esetben. 11. Igazak (I) vagy hamisak a következő állítások a JavaScript programozással kapcsolatban:
a. igaz Az osztályok megadására használt konstruktőr módszer esetében a metódusok annyiszor jönnek létre, ahány példányt hozunk létre az osztályból.
b. hamis Az osztályok megadására használt prototípus módszer esetében a metódusok annyiszor jönnek c. d. e. f.
létre, ahány példányt hozunk létre az osztályból. igaz Az osztályok megadására használt hibrid konstruktőr/prototípus módszerrel érhető el, hogy minden példány saját tulajdonságaival rendelkezik, de a metódusok közösek. igaz Az alosztályok metódusaiban nem érhetők el a szülőosztályok metódusai. hamis JavaScript-ben nem megvalósítható a többszörös öröklés. igaz Az alosztályok megadására használt hibrid módszer esetén a többszörös öröklés megvalósítható.
12. a)
Melyik az AJAX legfontosabb tulajdonsága? • nem egy programozási nyelv, • JavaScript és HTTP kérelmeken alapszik, • Web szabványokat használ (JavaScript, XML),
• •
lehetővé teszi gyorsabb és felhasználóbarát webalkalmazások fejlesztését. Az AJAX egy funkció a böngészőkben, amely segítségével a háttérben kérés küldhető a szerver felé, a kérésre kapott választ JavaScript-ből feldolgozhatjuk és az oldal egyes részeit frissíthetjük, módosíthatjuk. Tesszük mindezt anélkül, hogy frissítenénk az oldalt vagy elnavigálnánk onnan.
b) Mi a különbség a szinkron és az aszinkron AJAX kérelmek között? Az aszinkron adatátvitel olyan kétirányú párbeszéd, ami időeltolódással történik, lehetővé téve, hogy az adatok a maguk idejében érkezzenek, amikor hozzáférhetők. Más szóval megtehetjük, hogy kérelmet indítunk a kiszolgálóhoz, folytatjuk a többi adat feldolgozását, majd fogadjuk a válaszokat, amikor a kiszolgáló elérhető. Szinkron kérésnél viszont, amíg a kérés végrehajtása folyik, addig a teljes böngésző zárolt állapotban van. c)
Melyik az XMLHttpRequest főbb tulajdonságai, metódusai? • open() • send() • onreadystatechange • readyState • responseText
13. Mit hajtanak végre a kövekező jQuery-t használó kód részletek: a) $(’#divelem’).html(’Tartalom’) a divelem id-ju html elem tartalmat ’Tartalom’-ra csereli. b) $(’#divelem’).append(’Tartalom’) a divelem id-ju html elem tartalmahoz a ’Tartalom’ szot hozzafuzi. 14. Mit ért MVC tervezési minta alatt? Modell - View - Controller (Modell - Nézet - Vezérlő) tervezési minta
Az adathozzáférés és az ún. üzleti logika elválik az adat prezentációjától, melyet egy köztes komponens bevezetésével érünk el. Model - Ebben a részben fogalmazódik meg az üzleti logika. View - Ez itt a megjelenítéssel/prezentációval kapcsolatos osztályokat írja le. Controller - A Model és a View-k összekötéséért felel.
15. Írja le röviden az MVC tervezési minta előnyeit és hátrányait. Az MVC előnyei: az üzleti logika elválik az interakciós logikától Az alkalmazás egyes részei jól elhatárolódnak egymástól, ezáltal újrafelhasználhatóvá válik a kód - Elősegíti a csapatmunkát, mindenki a saját feladatára összpontosíthat Az MVC hátránya: - Jól meg kell tervezni egy nagy adag osztályt, amik ezt az elhatárolódást szavatolják és nyilván sokkal több időt igényel.