Open Closed Principle kata

15
SOLID The Open/Closed Principle Dependency Inversion Paul Blundell @Blundell_apps www.blundellapps.com

description

Talk and Kata on using the Open Closed principal of SOLID as well as Dependency Inversion to complete the Bowling Kata

Transcript of Open Closed Principle kata

Page 1: Open Closed Principle kata

SOLID

The Open/Closed PrincipleDependency Inversion

Paul Blundell@Blundell_appswww.blundellapps.com

Page 2: Open Closed Principle kata

Five basic principles of object-orientated programming.

“The principles when applied together intend to make it more likely that a programmer will create a system that is easy to maintain and extend over time”

S ?

O ?

L ?

I ?

D ?

SOLID

Page 3: Open Closed Principle kata

Five basic principles of object-orientated programming.

“The principles when applied together intend to make it more likely that a programmer will create a system that is easy to maintain and extend over time”

Single Responsibility Principle

Open / Closed Principle

Liskov’s Substitution

Interface Segregation

Dependency Inversion

SOLID

Page 4: Open Closed Principle kata

Five basic principles of object-orientated programming.

“The principles when applied together intend to make it more likely that a programmer will create a system that is easy to maintain and extend over time”

Single Responsibility Principle

Open / Closed Principle

Liskov’s Substitution

Interface Segregation

Dependency Inversion

SOLID

Page 5: Open Closed Principle kata

Open / Closed Principle

?

SOLID

Page 6: Open Closed Principle kata

Open / Closed Principle

“Software entities (classes, modules, methods etc) should be open for extension but closed for modification”

That is such an entity can allow its behaviour to be changed without altering its source code.

SOLID

Page 7: Open Closed Principle kata

Open Closed Principle

Page 8: Open Closed Principle kata

Open Closed Principle

Page 9: Open Closed Principle kata

Dependency Inversion

Page 10: Open Closed Principle kata

The aim of the OCP kata is to use the Open Closed Principle to design a maintainable and extensible code base.

Think about:

- How to compose functionality out of existing objects

- How to avoid reworking existing code

OCP Kata

Page 11: Open Closed Principle kata

Write the first failing test

Then write a factory that returns an object or a composed object that makes the test pass.

Rules:

- the factory should be limited to creating and linking objects

- no conditionals allowed in the factory

OCP Kata

Page 12: Open Closed Principle kata

@Test

public void scoreZeroForGutterGame() {

// First test

}

@Test

public void scoreTwentyForAllOnesGame() {

// Second test

}

// Continue

Bowling OCP Kata

Page 13: Open Closed Principle kata

Write the next failing test

Can you make this test pass by just changing the factory and object composite?

Yes - Great do it!

No - Refactor until you can

The refactoring should be the system to a state where it’s possible to implement the next test just by changing the composite of objects that is returned by the factory. Do not implement new functionality when refactoring the current test must still fail.

OCP Kata

Page 14: Open Closed Principle kata

Fork / Clone this repo:

[email protected]:novoda/dojos.git

Goto this folder:

github.com/novoda/dojos/tree/master/ocpBowling

Make a copy of this folder (rename default with a team name):

github.com/novoda/dojos/tree/master/ocpBowling/20130918-default

Rules are in the repo here:

ocpBowling/20130918-default/src/main/java/com/bowling/bowling_rules.txt

Start!

OCP Kata

Page 15: Open Closed Principle kata

Matteo Vaccari

- invented the OCP Kata

- http://matteo.vaccari.name/blog/archives/293

David Nicolette

- created the OCP jigsaw diagram

Uncle Bob

- Creator of the original bowling Kata

- http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata

Kevin Rutherford

- guided me in the art of Kata’s

- http://silkandspinach.net/

Jonas Gauffin

- for the meme

- http://blog.gauffin.org/2012/05/solid-principles-with-real-world-examples/#.UjWDy9K_s2k

CreditsPaul Blundell@Blundell_appswww.blundellapps.com