Source: "Agile Software Development: Principles, Patterns, and Practices"
by Robert C. Martin. Available at www.objectmentor.com/PPP.
Includes intermediate stages of development, as shown in the book.
Code for pp. 46-48
import junit.framework.*;
public class TestGame extends TestCase
{
public TestGame(String name)
{
super(name);
}
public void testAddOneThrow()
{
Frame f = new Frame();
f.add(5);
assertEquals(5,f.getScore());
}
}
public class Frame
{
public int getScore()
{
return itsScore;
}
public void add(int pins) // was public void add(Throw t)
{
itsScore += pins;
}
private int itsScore = 0;
}
Introducing the Game class (pp. 49-50):
public class Game
{
public int score()
{
return itsScore;
}
public void add(int pins)
{
itsScore += pins;
}
private int itsScore = 0;
}
Based on the test case testFourThrowsNoMark, adding a method
scoreForFrame(int frame) to the Game class.
First version of this:
public class Game
{
public int score()
{
return itsScore;
}
public void add(int pins)
{
itsThrow[itsCurrentThrow++] = pins;
itsScore += pins;
}
public int scoreForFrame(int frame)
{
int score = 0;
for (int ball = 0;
frame > 0 && (ball < itsCurrentThrow);
ball += 2, frame--)
{
score += itsThrows[ball] + itsThrows[ball+1];
}
return score;
}
private int itsScore = 0;
private int[] itsThrows = new int[21];
private int itsCurrentThrow = 0;
}
As the result of refactoring, the loop changes to:
for (int currentFrame = 0;
currentFrame < theFrame; // theFrame is the parameter
// to the method
currentFrame++)
{
score += itsThrows[ball++] + itsThrows[ball++];
}
What's the problem with the loop?
Adding a method setUp() to the testing class. What does it do? API?
The current Game:
public class Game
{
public int score()
{
return itsScore;
}
public void add(int pins)
{
itsThrow[itsCurrentThrow++] = pins;
itsScore += pins;
}
public int scoreForFrame(int theFrame)
{
int score = 0;
for (int currentFrame = 0;
currentFrame < theFrame;
currentFrame++)
{
int firstThrow = itsThrows[ball++];
int secondThrow = itsThrows[ball++];
int frameScore = firstThrow + secondThrow;
if (frameScore == 10)
score += frameScore + itsThrows[ball++];
else
score += frameScore;
}
return score;
}
private int itsScore = 0;
private int[] itsThrows = new int[21];
private int itsCurrentThrow = 0;
}
This is an example from CSci 3601 course.