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? (bijeenkomsten)