BuildingSkillsinOODesign_2.pdf

(1771 KB) Pobierz
Building Skills in Object-Oriented Design
Release 2.1.1-Java
Steven F. Lott
December 30, 2009
CONTENTS
I
Front Matter
3
1
Preface 5
1.1 Why Read This Book? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Audience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Organization of This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4 Why This Subject? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 Programming Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Conventions Used in This Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.7 Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2
Foundations 13
2.1 Problem Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Our Simulation Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Soapbox on Use Cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 Solution Approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5 Methodology, Technique and Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.6 Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
II
Roulette
25
3
Roulette Details 29
3.1 Roulette Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2 Available Bets in Roulette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.3 Some Betting Strategies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4
Roulette Solution Overview 35
4.1 Preliminary Survey of Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.2 Preliminary Roulette Class Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.3 A Walkthrough of Roulette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.4 Roulette Solution Questions and Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5
Outcome Class 41
5.1 Outcome Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2 Design Decision – Object Identity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3 Outcome Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.4 Outcome Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.5 Message Formatting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6
Bin Class
47
i
6.1 Bin Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.2 Design Decision – Choosing A Collection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.3 Bin Questions and Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.4 Bin Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.5 Bin Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
7
Wheel Class 53
7.1 Wheel Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.2 Wheel Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.3 Non-Random Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.4 Wheel Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8
Bin Builder Class 57
8.1 Bin Builder Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
8.2 Bin Builder Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.3 BinBuilder Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.4 Bin Builder Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.5 Internationalization and Localization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
9
Roulette Bet Class 63
9.1 Roulette Bet Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.2 Design Decision – Create or Locate an Outcome . . . . . . . . . . . . . . . . . . . . . . . . . 63
9.3 Design Decision – Where to Keep the Outcome Map . . . . . . . . . . . . . . . . . . . . . . . 64
9.4 Roulette Bet Questions and Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
9.5 Roulette Bet Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
9.6 Roulette Bet Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
10 Roulette Table Class 69
10.1 Roulette Table Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
10.2 InvalidBet Exception Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
10.3 Roulette Table Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
10.4 Roulette Table Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
11 Roulette Game Class 73
11.1 Roulette Game Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
11.2 Passenger57 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
11.3 Roulette Game Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
11.4 Roulette Game Questions and Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
11.5 Roulette Game Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
11.6 Additional Roulette Design Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
12 Review of Testability 79
12.1 Testability Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
12.2 Test-Driven Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
12.3 Capturing Pseudo-Radom Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
12.4 Testability Questions and Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
12.5 Testable Random Events Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
12.6 Testability Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
13 Player Class 85
13.1 Roulette Player Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
13.2 Player Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
13.3 Martingale Player Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
13.4 Player Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
ii
14 Overall Simulation Control 91
14.1 Simulation Control Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
14.2 Simulation Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
14.3 Simulator Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
14.4 Player Rework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
14.5 Simulation Control Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
15 SevenReds Player Class 97
15.1 SevenReds Player Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
15.2 SevenReds Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
15.3 Player Rework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
15.4 Game Rework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
15.5 SevenReds Player Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
16 Statistical Measures 101
16.1 Statistics Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
16.2 Some Foundations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
16.3 Statistical Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
16.4 IntegerStatistics Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
16.5 Statistics Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
17 Random Player Class 107
17.1 Random Player Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
17.2 Random Player Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
17.3 Random Player Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
18 Player 1-3-2-6 Class 109
18.1 Player 1-3-2-6 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
18.2 On Polymorphism . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
18.3 Player 1-3-2-6 Questions and Answers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
18.4 Player1326 State Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
18.5 Player1326 No Wins Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
18.6 Player1326 One Win Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
18.7 Player1326 Two Wins Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
18.8 Player1326 Three Wins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
18.9 Player1326 Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
18.10 Player 1-3-2-6 Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
18.11 Advanced Exercise – Refactoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
18.12 Advanced Exercise – Less Object Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
19 Cancellation Player Class 117
19.1 Cancellation Player Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
19.2 PlayerCancellation Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
19.3 Cancellation Player Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
20 Fibonacci Player Class 119
20.1 Fibonacci Player Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
20.2 PlayerFibonacci Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
20.3 Fibonacci Player Deliverables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
21 Conclusion
123
iii
Zgłoś jeśli naruszono regulamin