OO: de echte wereld modelleren

53
OO: de echte wereld modelleren

description

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. - PowerPoint PPT Presentation

Transcript of OO: de echte wereld modelleren

Page 1: OO: de echte wereld modelleren

OO: de echte wereld modelleren

Page 2: OO: de echte wereld modelleren

De intro

Page 3: OO: de echte wereld modelleren

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!

Page 4: OO: de echte wereld modelleren

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.

Page 5: OO: de echte wereld modelleren

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.

Page 6: OO: de echte wereld modelleren

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)

Page 7: OO: de echte wereld modelleren

Introductie van objecten

• Wat zijn classes (klassen)?

• Wat zijn objecten?

Page 8: OO: de echte wereld modelleren

Een snufje syntax: een class

Page 9: OO: de echte wereld modelleren

dan attributes

Page 10: OO: de echte wereld modelleren

Een methode

Page 11: OO: de echte wereld modelleren

Opbouwen en afbreken

Page 12: OO: de echte wereld modelleren

Een beetje access-control

Page 13: OO: de echte wereld modelleren

Inheritance

Page 14: OO: de echte wereld modelleren

Interfaces

Page 15: OO: de echte wereld modelleren

Abstract classes

Page 16: OO: de echte wereld modelleren

Final klassen en methoden

• Overerving niet langer mogelijk.

Page 17: OO: de echte wereld modelleren

Exceptions

• Exceptions kunnen worden gegooid op het moment dat een voorwaarde niet voldoet aan de “normale voorwaarden”.

• Exceptions zijn er voor foutafhandeling.

Page 18: OO: de echte wereld modelleren

It's a kind of magic.. (overloading?)

Magische methoden binnen PHP zijn o.a.:

• __autoload

• __construct

• __destruct

• __get

• __set

• __call

• __clone

Page 19: OO: de echte wereld modelleren

UML is er ook bij.

Page 20: OO: de echte wereld modelleren

Resumé, anyone?

• Voordelen OO.

• Wat objecten zijn.

• OO syntax in PHP.

• Basisbeginselen: inheritance, “overloading”, interfaces, final en exceptions.

• (heel klein beetje) UML

• Van belang?

Page 21: OO: de echte wereld modelleren

Workshop aspect

• Roept u maar?

Page 22: OO: de echte wereld modelleren

OOAD > syntax

• Syntax en implementatie zijn werkelijk niet zo van belang.

Page 23: OO: de echte wereld modelleren

Kenmerken OO: encapsulatie

• Information hiding.

• Implementation hiding.

Page 24: OO: de echte wereld modelleren

Kenmerken OO: Inheritance

• Inheritance kan worden gebruikt om het gedrag van het onderliggende object (parent) aan te passen of uit te breiden.

Page 25: OO: de echte wereld modelleren

Kenmerken OO: Polymorphism

• Door overerving hoeft een object niet te weten met welke specifieke implementatie er wordt gewerkt.

Page 26: OO: de echte wereld modelleren

Kenmerken OO: Interfaces/abstract

• Interfaces zijn goed gedefiniëerde methoden om met een object te praten.

• Interfaces bestaan ook buiten de wereld van programmeren.

Page 27: OO: de echte wereld modelleren

Nog een poging?

• Probeer het nog eens, met de zojuist verkregen informatie.

Page 28: OO: de echte wereld modelleren

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?

Page 29: OO: de echte wereld modelleren

Principes: OCP

• Open-closed principle.

• Open to extension, closed for modification.

• Tenzij je een foutje hebt gemaakt.

• Polymorhic OCP?

Page 30: OO: de echte wereld modelleren

Principes: LSP

• Liskov Substitution Principle.

• Een publieke interface mag niet worden veranderd door een subclass.

Page 31: OO: de echte wereld modelleren

Principes: DRY

• Don't repeat yourself

• Meerdere plekken dezelfde code, meerdere plaatsen waar je bugs kan introduceren.

• Vaak ook een overtreding van SRP.

Page 32: OO: de echte wereld modelleren

Principes: PTAINAI

• Program to an interface, not an implementation.

• “need-to-know-basis”

Page 33: OO: de echte wereld modelleren

Principes: encapsulate what varies.

• Zet variaties in aparte objecten.

• De “if” van OO.

Page 34: OO: de echte wereld modelleren

Principes: JUTW

• Just use the wheel.

• “imitation is the sincerest form of not being stupid”

Page 35: OO: de echte wereld modelleren

Relaties en afhankelijkheden:Composition

• Een object dat uit meerdere objecten bestaat.

• Ownership (HAS-A)

Page 36: OO: de echte wereld modelleren

Relaties en afhankelijkheden:Aggregration

• Een object dat uit meerdere objecten bestaat.

• USES.

Page 37: OO: de echte wereld modelleren

Relaties en afhankelijkheden: Delegation

• Meerdere responsibilities, maar stiekem doorgeven.

Page 38: OO: de echte wereld modelleren

Nog een principe dan.

• Favor composition over inheritance.

Page 39: OO: de echte wereld modelleren

Inversion of Control

• Ook wel Dependency Injection

• Geen Design Pattern, zou een principe moeten zijn.

Page 40: OO: de echte wereld modelleren

Nog een poging?

• Probeer het nog eens, met de zojuist verkregen informatie.

Page 41: OO: de echte wereld modelleren

Design patterns

• Abstracte oplossingen voor veel-voorkomende problemen.

Page 42: OO: de echte wereld modelleren

Design pattern: Decorator

Page 43: OO: de echte wereld modelleren

Design Pattern: Façade

• Een interface voor meerdere objecten.

Page 44: OO: de echte wereld modelleren

Design pattern: Strategy

Page 45: OO: de echte wereld modelleren

Design Pattern: Composite

Page 46: OO: de echte wereld modelleren

Design Pattern: oh jee, de MVC.

• Model View Controller

Page 47: OO: de echte wereld modelleren

Design Pattern: Lazy Load

Page 48: OO: de echte wereld modelleren

Design Pattern?: Domain Model

Page 49: OO: de echte wereld modelleren

Refactoring

• Refactoring is een manier om je applicatie te wijzigen, zonder deze stuk te maken. In databases kan het ook, zei Vincent.

Page 50: OO: de echte wereld modelleren

“Eww... Smelly”

• Smells zijn aanleidingen om te wijzigen.

Page 51: OO: de echte wereld modelleren

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

Page 52: OO: de echte wereld modelleren

Boeken?

• Refactoring (Martin Fowler)

• Patterns of Enterprise Application Architecture

• Head First Object Oriented Analysis and Design

• Head First Design Patterns

Page 53: OO: de echte wereld modelleren

Sites?

• http://phpfreakz.nl/wiki

• http://ootips.org

• http://martinfowler.com

• http://phpgg.nl (bijeenkomsten)

• http://java.sun.com/blueprints/patterns/