0
Objektum-Orientáltfejlesztés PHP nyelven<br />Simon BenceDoclerAkadémia<br />2011-01-18<br />
Miről is leszitt ma szó?<br />Magic Method-ok<br />Interface-k<br />Kivételkezelés<br />Standard PHP Library<br />Tervezés...
Magic Method-ok<br />Speciális helyzetekben, automatikusan hívódó metódusok<br />Hasonlóak az EJB életciklus metódusokhoz,...
MM Életciklusmetódusok<br />Objektumok élete során hívódnak meg automatikusan<br />__construct<br />Osztály példányosítása...
MM Entitás-kezelés<br />setter/getter metódusokat lehet velük gyártani<br />__set<br />Setter metódus<br />__get<br />Gett...
MM Entitás-kezelés példa<br />
MM Serializálás<br />Ezek különböző hook-ok, melyeket a serializálás hív meg, amennyiben léteznek<br />__sleep<br />Hasonl...
MM Metódushívások<br />Nem létező metódusok hívásakor lefutó magicmethod-ok<br />__call<br />Nem létező tagmetódus esetén<...
MM Ésatöbbi<br />__autoload<br />Nem betöltött osztály esetén hívódik<br />__clone<br />Klónozásnál hívódik meg, segít az ...
Interface-k<br />Implementáció nélküli (publikus) metódusok és konstansok deklarációja<br />Átjárhatóságot valósít meg<br />
Interface-re programozás<br />Interfacereferenciahasználata<br />Typehint használata<br />
Interface példa<br />
Kivételkezelés<br />OOP hibakezelési mód<br />Tisztán tartja a  kódot<br />Szeparálja a nem várt eseményeket<br />Vezérlés...
Származtatott kivételek<br />Az Exception osztály leszármaztatható<br />A catch blokk „IS A” vizsgálatot végez, és csak az...
Továbbdelegált kivételek<br />A kivételt nem kötelező az adott blokkban lekezelni (vagy egyáltalán lekezelni)<br />Ha ninc...
Standard PHP Library<br />Interface-k és osztályok gyűjteménye<br />Standard megoldások<br />Nincs szükség külső extension...
SPL Iterátorok<br />Összetett objektum bejárására szolgáló algoritmusok<br />Tervezési minta<br />23 iterátor implementáci...
SPL Adatstruktúrák<br />Az SPL biztosítja néhány elterjedt adatstruktúra implementációját<br />Például: SplStack, SplQueue...
SPL Kivételek<br />Az SPL biztosít néhány „szabványos” kivételt az általános esetekre<br />Például: BadMethodCallException...
SPL ArrayObject<br />Wrapper osztály<br />Objektumokat lehet tömbként kezelni a segítségével<br />
SPL Autoload<br />Dinamikus osztálybetöltő mechanizmus<br />Az SPL biztosít hozzá felületet, amelyen keresztül befolyásolh...
Tervezésiminták<br />Általános problémákra adnak általános megoldásokat<br />Nyelvtől független<br />Jól bejáratott szakma...
MVC (Model-View-Controller)<br />Architektúrális minta<br />Felosztja a kódot<br />Különböző felelősséget ruház a részekre...
Singleton<br />Létrehozó minta<br />Biztosítja, hogy egy entitásból csakis és kizárólag egy létezzen<br />(Depricated)<br />
Singleton példa<br />
Factorymethod<br />Létrehozó minta<br />A nélkül hozza létre az entitást, hogy a valós osztályát ismernünk kéne (interface...
Factory példa<br />
Adapter<br />Strukturális minta<br />Egy adott osztályt hozzáilleszt egy adott felülethez<br />
Adapter példa<br />
Műveletek objektumokkal: Összehasonlítás<br />Egymással<br />Állapotok összehasonlítása<br />Referenciák összehasonlítása<...
Műveletek objektumokkal: Másolás<br />Új referencialétrehozása<br />Klónozás<br />Shallowcopy (default): az attribútum obj...
Műveletek objektumokkal: Iteráció<br />Mindig a láthatóság szabályainak megfelelően<br />
Reflection API<br />Osztályok és függvények gyűjteménye<br />Nincs szükség külső extension-ra<br />Az OOP szabályainál nag...
Reflection API részei<br />ReflectionClass: az osztályokról<br />ReflectionFunction:  a funkciókról<br />ReflectionMethod:...
Reflection API függvények<br />getDocComment<br />getConstants<br />isProcected<br />isOptional<br />hasMethod<br />getNam...
Egységtesztelés<br />A komplex munka minden esetben hibával jár<br />A hibák számát és hatását minimalizálni kell<br />Vál...
Egységtesztelés<br />Ha a részek jók, akkor a részek egésze is lehet jó<br />Az egységbezárás lehetőséget ad arra, hogy  a...
PHP Unit<br />Sebastian Bergmann (thePHP.cc)<br />Xunit család<br />De facto PHP szabvány<br />Könnyen telepíthető és keze...
PHP Unit példa<br />
Ez persze nem elég<br />Tipikus hibák<br />Nem megfelelő erőforrás-ráfordítás<br />Lefedettség<br />Immunissá válás<br />T...
Köszönöm!<br />Kérdések?<br />
Upcoming SlideShare
Loading in...5
×

Objektum-orientált fejlesztés PHP nyelven (2. rész)

3,615

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,615
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
62
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Transcript of "Objektum-orientált fejlesztés PHP nyelven (2. rész)"

  1. 1. Objektum-Orientáltfejlesztés PHP nyelven<br />Simon BenceDoclerAkadémia<br />2011-01-18<br />
  2. 2. Miről is leszitt ma szó?<br />Magic Method-ok<br />Interface-k<br />Kivételkezelés<br />Standard PHP Library<br />Tervezésiminták<br />Műveletek objektumokkal<br />Reflection API<br />Egységtesztelés<br />
  3. 3. Magic Method-ok<br />Speciális helyzetekben, automatikusan hívódó metódusok<br />Hasonlóak az EJB életciklus metódusokhoz, de itt nincs annotáció<br />A __ névtér van fenntartva számukra<br />
  4. 4. MM Életciklusmetódusok<br />Objektumok élete során hívódnak meg automatikusan<br />__construct<br />Osztály példányosításakor hívódik meg. <br />__destruct<br />A GC hívja meg<br />Nem lehetünk biztosak benne<br />
  5. 5. MM Entitás-kezelés<br />setter/getter metódusokat lehet velük gyártani<br />__set<br />Setter metódus<br />__get<br />Getter metódus<br />__isset<br />Isset vizsgálat metódusa<br />__unset<br />Attribútum törlése<br />
  6. 6. MM Entitás-kezelés példa<br />
  7. 7. MM Serializálás<br />Ezek különböző hook-ok, melyeket a serializálás hív meg, amennyiben léteznek<br />__sleep<br />Hasonlóan a Java „transitive” módosítójához: megszűri az attribútumokat, és lezárja a kapcsolatokat<br />__wakeup<br />Db kapcsolatok, stb. visszaállítása, amik elvesznek a mentés során<br />__set_state<br />Osztály var_export-jakor hívódik meg, a kimenetét alakítja át<br />
  8. 8. MM Metódushívások<br />Nem létező metódusok hívásakor lefutó magicmethod-ok<br />__call<br />Nem létező tagmetódus esetén<br />__callStatic<br />Nem létező statikus metódus esetén<br />__invoke<br />Függvényként hívódó osztály esetén<br />
  9. 9. MM Ésatöbbi<br />__autoload<br />Nem betöltött osztály esetén hívódik<br />__clone<br />Klónozásnál hívódik meg, segít az újonnan létrejött osztály paraméterezésében<br />__toString<br />Ha egy objektumot string-ként próbálunk kezelni, itt állíthatunk össze string (!) kimenetet<br />
  10. 10. Interface-k<br />Implementáció nélküli (publikus) metódusok és konstansok deklarációja<br />Átjárhatóságot valósít meg<br />
  11. 11. Interface-re programozás<br />Interfacereferenciahasználata<br />Typehint használata<br />
  12. 12. Interface példa<br />
  13. 13. Kivételkezelés<br />OOP hibakezelési mód<br />Tisztán tartja a kódot<br />Szeparálja a nem várt eseményeket<br />Vezérlésátadással a hibakezelés a megfelelő helyen végezhető el<br />
  14. 14. Származtatott kivételek<br />Az Exception osztály leszármaztatható<br />A catch blokk „IS A” vizsgálatot végez, és csak az első igaz feltételbe megy bele<br />
  15. 15. Továbbdelegált kivételek<br />A kivételt nem kötelező az adott blokkban lekezelni (vagy egyáltalán lekezelni)<br />Ha nincs elkapva, a hívási fán felfele delegálódik<br />
  16. 16. Standard PHP Library<br />Interface-k és osztályok gyűjteménye<br />Standard megoldások<br />Nincs szükség külső extension-ra<br />Java SDK-hoz hasonlóan<br />
  17. 17. SPL Iterátorok<br />Összetett objektum bejárására szolgáló algoritmusok<br />Tervezési minta<br />23 iterátor implementációt tartalmaz<br />Példák: ArrayIterator, DirectoryIterator, EmptyIterator, RecursiveArrayIterator, SimpleXMLIterator, CachingIterator<br />
  18. 18. SPL Adatstruktúrák<br />Az SPL biztosítja néhány elterjedt adatstruktúra implementációját<br />Például: SplStack, SplQueue (duplán láncolt listával), SplHeap (Min és Max változattal is), SplObjectStorage, SplDoublyLinkedList<br />
  19. 19. SPL Kivételek<br />Az SPL biztosít néhány „szabványos” kivételt az általános esetekre<br />Például: BadMethodCallException, InvalidArgumentException, OutOfRangeException, RuntimeException, LogicException, OverflowException<br />
  20. 20. SPL ArrayObject<br />Wrapper osztály<br />Objektumokat lehet tömbként kezelni a segítségével<br />
  21. 21. SPL Autoload<br />Dinamikus osztálybetöltő mechanizmus<br />Az SPL biztosít hozzá felületet, amelyen keresztül befolyásolható<br />Funkciók:<br />spl_autoload_call<br />spl_autoload_extensions<br />spl_autoload_functions<br />spl_autoload_register<br />spl_autoload_unregister<br />spl_autoload<br />
  22. 22. Tervezésiminták<br />Általános problémákra adnak általános megoldásokat<br />Nyelvtől független<br />Jól bejáratott szakmai eszköztár<br />
  23. 23. MVC (Model-View-Controller)<br />Architektúrális minta<br />Felosztja a kódot<br />Különböző felelősséget ruház a részekre<br />
  24. 24. Singleton<br />Létrehozó minta<br />Biztosítja, hogy egy entitásból csakis és kizárólag egy létezzen<br />(Depricated)<br />
  25. 25. Singleton példa<br />
  26. 26. Factorymethod<br />Létrehozó minta<br />A nélkül hozza létre az entitást, hogy a valós osztályát ismernünk kéne (interface)<br />
  27. 27. Factory példa<br />
  28. 28. Adapter<br />Strukturális minta<br />Egy adott osztályt hozzáilleszt egy adott felülethez<br />
  29. 29. Adapter példa<br />
  30. 30. Műveletek objektumokkal: Összehasonlítás<br />Egymással<br />Állapotok összehasonlítása<br />Referenciák összehasonlítása<br />Osztályokkal (és interface-kkel)<br />is_a, instanceof, get_class, get_parent_class, is_subclass_of<br />
  31. 31. Műveletek objektumokkal: Másolás<br />Új referencialétrehozása<br />Klónozás<br />Shallowcopy (default): az attribútum objektum-mutatója másolódik le: ugyan arra az objektumra mutat, mint az eredeti<br />Deep copy: az attribútum objektum állapota másolódik le<br />
  32. 32. Műveletek objektumokkal: Iteráció<br />Mindig a láthatóság szabályainak megfelelően<br />
  33. 33. Reflection API<br />Osztályok és függvények gyűjteménye<br />Nincs szükség külső extension-ra<br />Az OOP szabályainál nagyobb hozzáférést nyújtanak a rendszer részeihez<br />Reverse-engineering-hez kiváló<br />
  34. 34. Reflection API részei<br />ReflectionClass: az osztályokról<br />ReflectionFunction: a funkciókról<br />ReflectionMethod: az osztálymetódusokról<br />ReflectionObject: az objektumokról<br />ReflectionParameter: hívási paraméterről<br />ReflectionProperty: az attribútumokról<br />…<br />
  35. 35. Reflection API függvények<br />getDocComment<br />getConstants<br />isProcected<br />isOptional<br />hasMethod<br />getName<br />getDefaultValue<br />getStartLine<br />isUserDefinied<br />isAbstract<br />getParentClass<br />export<br />getFileName<br />getMethod<br />setAccessible<br />
  36. 36. Egységtesztelés<br />A komplex munka minden esetben hibával jár<br />A hibák számát és hatását minimalizálni kell<br />Vállalati standard: 15-50 defektus / KLOC<br />Ennek költséghatékonynak kell lennie<br />
  37. 37. Egységtesztelés<br />Ha a részek jók, akkor a részek egésze is lehet jó<br />Az egységbezárás lehetőséget ad arra, hogy a részeket teszteljük<br />Eszköz: egységtesztelés<br />
  38. 38. PHP Unit<br />Sebastian Bergmann (thePHP.cc)<br />Xunit család<br />De facto PHP szabvány<br />Könnyen telepíthető és kezelhető<br />Assert-ekkel dolgozik<br />Pl.: assertArrayHasKey, assertEquals, assertFalse, assertFileExists, assertGraterThan, assertNull, assertRegExp, assertStringStartsWith<br />
  39. 39. PHP Unit példa<br />
  40. 40. Ez persze nem elég<br />Tipikus hibák<br />Nem megfelelő erőforrás-ráfordítás<br />Lefedettség<br />Immunissá válás<br />Többszörös hiba<br />Kontextus függőség<br />
  41. 41. Köszönöm!<br />Kérdések?<br />
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×