OO: de echte wereld modelleren
description
Transcript of OO: de echte wereld modelleren
OO: de echte wereld modelleren
De intro
Over de workshop
• Introductie tot OOP – in PHP.
• Uitgebreide uitleg basisprincipes van OO.
• 2,5 uur is te lang om je vraag te onthouden, vragen kan tussendoor.
• Veel theorie, pennen zijn o.a. voor notities!
OOP vs. PP/FP: a mexican standoff
Nadelen van OO t.o.v. PP/FP:
• Beiden middelen om een doel te bereiken.
• OOP betekent meer regels (LoC).
• OOP's abstracties maken de applicatie complexer.
• OOP is trager.
• OOP heeft een langer ontwikkelproces.
OOP vs. PP/FP: a mexican standoff
Voordelen van OO t.o.v. PP/FP:
• Eenvoudiger uitbreiden.
• Duidelijkere code.
• Sommige objecten zijn herbruikbaar.
• Eenvoudiger te wijzigen.
OOP vs. PP/FP: a mexican standoff
Dus wint OOP?
• Grote opmars objecten in de PHP wereld.
• Frameworks zijn veelal “OOP”.
• “Use the right tool for the job!” (a.k.a. don't use a sledgehammer to kill a fly)
Introductie van objecten
• Wat zijn classes (klassen)?
• Wat zijn objecten?
Een snufje syntax: een class
dan attributes
Een methode
Opbouwen en afbreken
Een beetje access-control
Inheritance
Interfaces
Abstract classes
Final klassen en methoden
• Overerving niet langer mogelijk.
Exceptions
• Exceptions kunnen worden gegooid op het moment dat een voorwaarde niet voldoet aan de “normale voorwaarden”.
• Exceptions zijn er voor foutafhandeling.
It's a kind of magic.. (overloading?)
Magische methoden binnen PHP zijn o.a.:
• __autoload
• __construct
• __destruct
• __get
• __set
• __call
• __clone
UML is er ook bij.
Resumé, anyone?
• Voordelen OO.
• Wat objecten zijn.
• OO syntax in PHP.
• Basisbeginselen: inheritance, “overloading”, interfaces, final en exceptions.
• (heel klein beetje) UML
• Van belang?
Workshop aspect
• Roept u maar?
OOAD > syntax
• Syntax en implementatie zijn werkelijk niet zo van belang.
Kenmerken OO: encapsulatie
• Information hiding.
• Implementation hiding.
Kenmerken OO: Inheritance
• Inheritance kan worden gebruikt om het gedrag van het onderliggende object (parent) aan te passen of uit te breiden.
Kenmerken OO: Polymorphism
• Door overerving hoeft een object niet te weten met welke specifieke implementatie er wordt gewerkt.
Kenmerken OO: Interfaces/abstract
• Interfaces zijn goed gedefiniëerde methoden om met een object te praten.
• Interfaces bestaan ook buiten de wereld van programmeren.
Nog een poging?
• Probeer het nog eens, met de zojuist verkregen informatie.
Principes: SRP
• Single Responsibility Principle
• Bold, underline én cursief, is dat niet wat overdone?
• Change together, live together.
• Seperation of Concerns.
• Cross-cutting concerns.
• Hoe te testen?
Principes: OCP
• Open-closed principle.
• Open to extension, closed for modification.
• Tenzij je een foutje hebt gemaakt.
• Polymorhic OCP?
Principes: LSP
• Liskov Substitution Principle.
• Een publieke interface mag niet worden veranderd door een subclass.
Principes: DRY
• Don't repeat yourself
• Meerdere plekken dezelfde code, meerdere plaatsen waar je bugs kan introduceren.
• Vaak ook een overtreding van SRP.
Principes: PTAINAI
• Program to an interface, not an implementation.
• “need-to-know-basis”
Principes: encapsulate what varies.
• Zet variaties in aparte objecten.
• De “if” van OO.
Principes: JUTW
• Just use the wheel.
• “imitation is the sincerest form of not being stupid”
Relaties en afhankelijkheden:Composition
• Een object dat uit meerdere objecten bestaat.
• Ownership (HAS-A)
Relaties en afhankelijkheden:Aggregration
• Een object dat uit meerdere objecten bestaat.
• USES.
Relaties en afhankelijkheden: Delegation
• Meerdere responsibilities, maar stiekem doorgeven.
Nog een principe dan.
• Favor composition over inheritance.
Inversion of Control
• Ook wel Dependency Injection
• Geen Design Pattern, zou een principe moeten zijn.
Nog een poging?
• Probeer het nog eens, met de zojuist verkregen informatie.
Design patterns
• Abstracte oplossingen voor veel-voorkomende problemen.
Design pattern: Decorator
Design Pattern: Façade
• Een interface voor meerdere objecten.
Design pattern: Strategy
Design Pattern: Composite
Design Pattern: oh jee, de MVC.
• Model View Controller
Design Pattern: Lazy Load
Design Pattern?: Domain Model
Refactoring
• Refactoring is een manier om je applicatie te wijzigen, zonder deze stuk te maken. In databases kan het ook, zei Vincent.
“Eww... Smelly”
• Smells zijn aanleidingen om te wijzigen.
Een paar refactorings
• Extract method(maak een methode met een logische naam)
• Hide Delegate
• Move Method
• Replace Errorcode with Exceptions
• Replace Exception with Test
• Replace temp with query.
• Encapsulate field
Boeken?
• Refactoring (Martin Fowler)
• Patterns of Enterprise Application Architecture
• Head First Object Oriented Analysis and Design
• Head First Design Patterns
Sites?
• http://phpfreakz.nl/wiki
• http://ootips.org
• http://martinfowler.com
• http://phpgg.nl (bijeenkomsten)
• http://java.sun.com/blueprints/patterns/