XpUg Coding Dojo: KataYahtzee in Ocp way

  • 3,787 views
Uploaded on

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.

More 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,787
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!