OO: de echte wereld modelleren

Post on 12-Jan-2016

48 views 0 download

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

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/