Object Oriented Programming for web applications

  • 2,033 views
Uploaded on

Object Oriented Programming voor web applicaties (PHP5)

Object Oriented Programming voor web applicaties (PHP5)

More in: Technology , Travel , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,033
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
121
Comments
0
Likes
3

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Object Oriented Programming voor webapplicaties Door Edwin Vlieg
  • 2. • Waarom OOP? • Basis uitleg over OOP • Design Patterns • ActiveRecord • Model View Controller • Extra informatie • Vragen
  • 3. OOP • Object Oriented Programming • Alle code in classes • Classes hebben verantwoordelijkheden • Verantwoordelijkheden staan in het contract • Classes kunnen een Design Pattern vormen • PHP5 heeft een goede ondersteuning voor OOP
  • 4. Waarom OOP? • Structuur in je code • Herbruikbaarheid • Leesbaarheid • Sneller kunnen ontwikkelen • Design patterns • Communicatie met collega’s
  • 5. Maar ook in webapplicaties?? Ja, want: • die hebben ook recht op structuur, • PHP laat je altijd alles opnieuw doen, • er zijn goede design patterns voor. Waarschuwing: • OOP != procedurele code in classes gooien • OOP == een denkwijze
  • 6. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen
  • 7. Classes Class is een definitie van functionaliteit door middel van: • Eigenschappen: $bLustBier • Queries: getNaam() • Commando’s: setSchoenMaat($iSize) Eigenschappen zijn de ‘oude’ variabelen. Queries en commando’s zijn de ‘oude’ functies, in OOP context vaak methoden genoemd.
  • 8. <?php class Persoon { private $sNaam; public function __construct($sNaam){ $this->sNaam = $sNaam; } public function getNaam(){ return $this->sNaam; } } class PHPFreak extends Persoon { private $bLustBier; private $iSchoenMaat; public function __construct($sNaam){ parent::__construct($sNaam); $this->bLustBier = true; } public function setSchoenMaat($iSize){ if($iSize < 45){ throw new Exception(quot;Dit kan geen PHPFreak zijn!quot;); } $this->iSchoenMaat = $iSize; } } ?>
  • 9. Overerving • Door middel van overerving kan je in een overervende class gebruik maken van de functionaliteit van de basis class. • In veel gevallen een generalisatie van een class: Persoon > PHPFreak Controller > HomeController • Je specificeert extra eigenschappen en functionaliteit die alleen voor die generalisatie gelden (en dus niet voor de basis klasse)
  • 10. <?php class Persoon { private $sNaam; public function __construct($sNaam){ $this->sNaam = $sNaam; } public function getNaam(){ return $this->sNaam; } } class PHPFreak extends Persoon { private $bLustBier; private $iSchoenMaat; public function __construct($sNaam){ parent::__construct($sNaam); $this->bLustBier = true; } // ... public function setSchoenMaat($iSize){ // ... $this->iSchoenMaat = $iSize; } } ?>
  • 11. Design by Contract • Classen geven een contract: “als jij mij zo gebruikt, dan zal ik dit voor je regelen” • Via de commentaar-regels kan je zien wat het contract van een class of methode is. • Een class kan exceptions gooien als jij je niet aan het contract houdt. • Eigenschappen vaak private om contract te kunnen uitvoeren.
  • 12. <?php class PHPFreak extends Persoon { private $iSchoenMaat; // ... /** * @desc Verander de schoenmaat * @param $iSize integer */ public function setSchoenMaat($iSize){ if(!is_numeric($iSize)){ throw new Exception(quot;Dit is geen getalquot;); } if($iSize < 45){ throw new Exception(quot;Dit kan geen PHPFreak zijn!quot;); } $this->iSchoenMaat = $iSize; } } ?>
  • 13. Objecten • Objecten zijn instanties van een class, • Op een object kan je de bewerkingen uitvoeren die een class biedt, • Aan een object kan je eigenschappen vragen.
  • 14. Voorbeeld <?php require quot;Person.phpquot;; require quot;PHPFreak.phpquot;; $oFreak = new PHPFreak(quot;Pietjequot;); echo $oFreak->getNaam(); // Contract overtreding: methode verwacht een integer $oFreak->setSchoenMaat(quot;Klaasjequot;); // Dit werkt wel $oFreak->setSchoenMaat(46); ?>
  • 15. Class methods class Person { public static function find($sName){ return new Person($sName); } } $oPerson = Person::find(“Pietje”); • Als je op een object een methode aanroept, roep je een instantie methode aan: $oPerson->setName(“Pietje”); • Je kunt ook statische methoden aanroepen: Person::find(“Klaas”); • Een statische methode voert iets op class niveau uit en heeft dus geen toegang tot eigenschappen van een object.
  • 16. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen
  • 17. Design Patterns Een verzameling van klassen, • met een bepaalde onderlinge structuur, • die een oplossing bieden voor veel voorkomende software problemen. Voorbeelden: • Singleton • ActiveRecord • Model,View en Controller (MVC)
  • 18. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen
  • 19. ActiveRecord ActiveRecord vormt een laag op een database en versimpelt het gebruik van een database. SQL queries zijn bijvoorbeeld nauwelijks nog nodig. Voorbeeld contract van class ActiveRecord: • find($iID) geeft de rij met het gegeven id terug • findAll($aConditions = null, $iLimit = null, $iOffset = null) geeft 1 of meer rijen terug die voldoen aan de gegeven condities.
  • 20. Voorbeeld <?php require quot;ActiveRecord.phpquot;; class User extends ActiveRecord { } // SELECT * FROM user WHERE status > 5 LIMIT 10 User::findAll(array(quot;status > ?quot;, 5), 10) // SELECT * FROM user WHERE id=1 $oUser = User::find(1); $oUser->name = quot;Pietjequot;; // UPDATE user SET name = quot;Pietjequot; WHERE id=1 $oUser->save(); ?>
  • 21. ActiveRecord • ActiveRecord is te vinden in het CakePHP framework • Een variant op het ActiveRecord pattern is ook te vinden in het Zend Framework
  • 22. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen
  • 23. MVC Het model, view en controller pattern is zeer goed toepasbaar binnen webapplicaties. Je maakt in je code een splitsing tussen: • Model: je database; bijvoorbeeld een ActiveRecord pattern • View: je templates; bijvoorbeeld Smarty • Controller: het afhandelen van verzoeken van een client en het samenvoegen van het model en de view.
  • 24. Zonder OOP Sommige zaken doe je dubbel als je meer acties krijgt: • Vertalen van een URL naar een aantal handelingen in PHP • Foutafhandeling bij missende parameters • Foutafhandeling bij SQL queries • SQL queries Sommige zaken zijn onoverzichtelijk: • HTML tussen je PHP code • Scheiding tussen de verschillende acties
  • 25. Voorbeeld zonder OOP <?php if(isset($_GET['action']) && $_GET['action'] == quot;showquot;){ if(!isset($_GET['id']) || !is_numeric($_GET['id'])){ exit(quot;Kan geen gebruiker ophalen zonder idquot;); } $rResult = mysql_query(quot;SELECT * FROM users WHERE id = quot;.intval($_GET['id'])); if(!$rResult){ exit(quot;Er ging iets fout: quot;.mysql_error()); } $oUser = mysql_fetch_assoc($rResult); echo quot;<h1>quot;.$oUser['name'].quot;</h1>quot;; echo quot;<p>quot;.$oUser['email'].quot;</p>quot;; } ?>
  • 26. Voorbeeld met OOP // User.php <?php class User extends ActiveRecord { } ?> // UserController.php <?php class UserController extends ApplicationController { public function indexAction(){ $oUser = User::find($this->params['id']); $this->user = $oUser; } } ?> // index.phtml <h1><?= $this->user['name'] ?></h1> <p><?= $this->user['email'] ?><p>
  • 27. Model De verantwoordelijkheden van het model zijn: • Een abstractie bieden van de database • Automatische controle op parameters • SQL injection tegengaan View De verantwoordelijkheden van de view zijn: • HTML weergave mogelijk maken • Variabelen beschikbaar maken die toegekend zijn in de controller
  • 28. Controller De verantwoordelijkheden van de controller zijn: • De URL omschrijven naar een aanroep van een bepaalde methode • Parameters controleren en beschikbaar maken in een instantie variabele • Variabelen declareren voor de view De opbouw van een URL is bijvoorbeeld: /user/show/5 De basis class ApplicationController zal dit omschrijven naar een aanroep van de methode showAction in de class UserController.
  • 29. Applicatie structuur • De mappen structuur van een MVC applicatie zal er bijvoorbeeld zo uit zien:
  • 30. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen
  • 31. Frameworks De volgende frameworks zijn volledig OOP gebaseerd en kunnen je helpen bij je eerste stappen in OOP land: • Zend Framework (helaas nog steeds alpha status) • CakePHP • Symfony • CodeIgniter
  • 32. Losse classes Op internet zwerven veel losse classes die je onderdeel van je code kan maken, enkele bekende: • PHPMailer: e-mail versturen via PHP • FormHandler: snel formulieren genereren en afhandelen • FPDF: PDF documenten genereren • Smarty: template engine Op phpclasses.org zijn veel classes te vinden
  • 33. Conclusie
  • 34. Object Oriented Code is like sex. More people talk about it than are actually doing it. The few who are doing it are: doing it poorly (sure it will be better next time) and not practicing it safely.
  • 35. 1. Waarom OOP? 2. Basis uitleg over OOP 3. Design Patterns 4. ActiveRecord 5. Model View Controller 6. Extra informatie 7. Vragen