O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

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

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
Python dekoratorok
Python dekoratorok
Carregando em…3
×

Confira estes a seguir

1 de 41 Anúncio
Anúncio

Mais Conteúdo rRelacionado

Anúncio

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 />

×