Your SlideShare is downloading. ×
  • Like
XpUg Coding Dojo: KataYahtzee in Ocp way
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

XpUg Coding Dojo: KataYahtzee in Ocp way

  • 3,817 views
Published

Introduction to Ocp way to do a kata, used during a Xpug Milano Coding Dojo.

Introduction to Ocp way to do a kata, used during a Xpug Milano Coding Dojo.

Published in Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
3,817
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
56
Comments
2
Likes
4

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Xpug Coding Dojo: The OCP Kata
  • 2. Kata
  • 3. Pairs
  • 4. Randori
  • 5. Costraints
  • 6. The OCP Kata http://matteo.vaccari.name/blog/archives/293
  • 7. 0. Write the first failing test.
  • 8. Then write a factory that returns an object, or an aggregate of objects, that make the test pass.
  • 9. The factory should be limited to creating objects and linking them together. No conditionals allowed.
  • 10. 1. Write the next failing test.
  • 11. 2. Can you make it pass by changing the factory and/or creating a new class and nothing else?
  • 12. If yes, great! Go back to 1.
  • 13. If not, refactor until you can.
  • 14. The refactoring should bring the system to a state where it’s possible to implement the next test just by changing the aggregate of objects that is returned by the factory.
  • 15. Be careful not to implement new functionality; the current test should still fail.
  • 16. An example
  • 17. package xpug; import junit.framework.Assert; import org.junit.Test; public class AFizzbuzzer { @Test public void shouldReturnSameNumberForPlainNumber() { Fizzbuzzer fizzbuzzer = FizzbuzzerFactory.create(); Assert.assertEquals("1", fizzbuzzer.say(1)); Assert.assertEquals("2", fizzbuzzer.say(2)); } }
  • 18. package xpug; public class FizzbuzzerFactory { public static Fizzbuzzer create() { return new Fizzbuzzer(); } }
  • 19. package xpug; public class Fizzbuzzer { public String say(int digit){ return String.valueOf(digit); } }
  • 20. @Test public void shouldReturnFizzForMultipleOfThree(){ Fizzbuzzer fizzbuzzer = FizzbuzzerFactory.create(); Assert.assertEquals("Fizz", fizzbuzzer.say(3)); Assert.assertEquals("Fizz", fizzbuzzer.say(6)); Assert.assertEquals("Fizz", fizzbuzzer.say(9)); }
  • 21. package xpug; public interface Counter { public boolean canHandle(int digit); public String say(int digit); }
  • 22. package xpug; public class Echo implements Counter { @Override public boolean canHandle(int digit) { return true; } @Override public String say(int digit) { return String.valueOf(digit); } }
  • 23. package xpug; import java.util.List; public class Fizzbuzzer { private List<? extends Counter> counters; public Fizzbuzzer(List<? extends Counter> counters) { this.counters = counters; } public String say(int digit) { for (Counter counter : counters) if (counter.canHandle(digit)) return counter.say(digit); return ""; } }
  • 24. package xpug; import java.util.Arrays; public class FizzbuzzerFactory { public static Fizzbuzzer create() { return new Fizzbuzzer(Arrays.asList( new Echo())); } }
  • 25. @Test public void shouldReturnFizzForMultipleOfThree(){ Fizzbuzzer fizzbuzzer = FizzbuzzerFactory.create(); Assert.assertEquals("Fizz", fizzbuzzer.say(3)); Assert.assertEquals("Fizz", fizzbuzzer.say(6)); Assert.assertEquals("Fizz", fizzbuzzer.say(9)); }
  • 26. package xpug; public class Fizz implements Counter { @Override public boolean canHandle(int digit) { return digit % 3 == 0; } @Override public String say(int digit) { return "Fizz"; } }
  • 27. package xpug; import java.util.Arrays; public class FizzbuzzerFactory { public static Fizzbuzzer create() { return new Fizzbuzzer(Arrays.asList( new Fizz(), new Echo())); } }
  • 28. ... ... ... ... ... ... ...
  • 29. package xpug; import java.util.Arrays; public class FizzbuzzerFactory { public static Fizzbuzzer create() { return new Fizzbuzzer(Arrays.asList( new Fizzbuzz(), new Buzz(), new Fizz(), new Echo())); } }
  • 30. KataYahtzee
  • 31. Let’s start!