Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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 />
Nächste SlideShare
Wird geladen in …5
×

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

4.273 Aufrufe

Veröffentlicht am

Veröffentlicht in: Technologie
  • Dating for everyone is here: ❤❤❤ http://bit.ly/2F7hN3u ❤❤❤
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Follow the link, new dating source: ❶❶❶ http://bit.ly/2F7hN3u ❶❶❶
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

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

×