In Class: Week 8 Tuesday:
Top-Down Design Practice


Create a week08 subdirectory in your cs21/class directory by running update21:

$ update21
$ cd cs21/class/week08

Topics


Top Down Design

Top Down Design is a problem solving technique where:
  1. Start with General Description of Problem
  2. Break it into several high-level steps
  3. Iteratively break the steps into smaller steps until you have steps that are easy to solve

In-class work

  1. Last week, we started working on the program to play Blackjack. Open up blackjack.py to review our design. Note that I have added a deck of cards to our design to make the problem more realistic
  2. To begin, we will analyze our first level of design and see which tasks need to be further broken down. This process of breaking subproblems into a set of even smaller subproblems is known as iterative refinement. Specifically, we will see how playUser() requires a function for flipping a single card as well as a function for getting a yes-or-no response from the user.

  3. Together, we will begin implementation on the bottom-level functions. First, we will look at my implementation of generateDeck(). We will use the python interpretor to perform unit testing to notice that my implementation was no complete.

  4. On your own, work on implementing the getYesOrNo() function. When finished, let's try some unit testing on getYesOrNo() (see below).
  5. Once we are satisfied with getYesOrNo(), work individually on implementin other functions in blackjack.py. Start with flipCard() and then move on to playUser().
  6. Perform unit-testing on flipCard() multiple times to see if you get numbers that you expect.
  7. If you finish flipCard(), move up a level in implementation and work on playUser(). Since flipCard() is implemented and tested, you can concentrate on the larger problem of executing one user turn.

Unit Testing

Unit testing is the process of validating functions as individual pieces, in isolation from other large portions of the program. This allows a developer to focus solely on the (small) subproblem at hand and think carefully about potential errors. To perform unit testing:

To use the python interpretor, add the following lines of code to the bottom of your program where main() is:
if __name__ = "__main__":
  main()

This allows python to import your program without running it. To do so, run python in interactive mode:

$ python
In interactive mode, use the command import to load your file.
>>>import blackjack
To test a function, say flipCard(), you can invoke your method:
>>>blackjack.flipCard()
in function flipCard()
5
The function flipCard was invoked. Any print statements are output to the screen. Finally, python will automatically output the return value, which was 5 in this case.

If you make changes to your program, you can reload your file in the python interpretor by calling the reload command:

>>>reload(blackjack)
Lastly, you can see your function prototypes and block comments using the help command:
>>>help(blackjack)