About the Author |
|
xix | (2) |
Foreword |
|
xxi | (2) |
Preface |
|
xxiii | (6) |
Acknowledgments |
|
xxix | |
Part I INTRODUCTION TO BUILDING OBJECT APPLICATIONS |
|
3 | (46) |
|
Chapter 1 Where We've Been Before-Object-Oriented Concepts and Techniques |
|
|
3 | (46) |
|
1.1 Object-Oriented Concepts-A Really Quick Recap |
|
|
4 | (10) |
|
1.1.1 Objects and Classes |
|
|
5 | (1) |
|
1.1.2 Attributes and Methods |
|
|
6 | (1) |
|
1.1.3 Abstraction, Encapsulation, and Information Hiding |
|
|
6 | (2) |
|
|
8 | (1) |
|
|
9 | (1) |
|
1.1.6 Instance Relationships |
|
|
10 | (1) |
|
|
11 | (1) |
|
|
12 | (1) |
|
1.1.9 Coupling and Cohesion |
|
|
12 | (1) |
|
|
13 | (1) |
|
1.2 Object-Oriented Analysis and Design Techniques-A Really Quick Recap |
|
|
14 | (13) |
|
|
14 | (6) |
|
1.2.2 Use-Case Scenario Testing |
|
|
20 | (5) |
|
|
25 | (2) |
|
1.3 Iterative Object-Oriented Development-The Pinball System Development Life Cycle (SDLC) |
|
|
27 | (6) |
|
1.3.1 The Pinball Metaphor |
|
|
28 | (2) |
|
1.3.2 The Steps of the Pinball SDLC |
|
|
30 | (3) |
|
1.4 What We Missed in The Object Primer |
|
|
33 | (9) |
|
1.4.1 The Difference Between Class and Instance Attributes |
|
|
33 | (2) |
|
1.4.2 The Difference Between Class and Instance Methods |
|
|
35 | (2) |
|
1.4.3 The Implications of Class Attributes and Methods |
|
|
37 | (3) |
|
1.4.4 What We Mean When We Say "Attribute" or "Method," |
|
|
40 | (1) |
|
1.4.5 The Ambler Class Diagram Notation v2.0 |
|
|
40 | (1) |
|
1.4.6 The Unified Modeling Language Class-Diagram Notation (Simplified) |
|
|
41 | (1) |
|
1.5 Just in Case You've Forgotten-The Bank Case Study |
|
|
42 | (3) |
|
|
42 | (3) |
|
1.6 Where We're Going in This Book |
|
|
45 | (4) |
Part II OBJECT-ORIENTED ANALYSIS, DESIGN, AND ARCHITECTURE |
|
49 | (122) |
|
Chapter 2 Bubbles and Lines-Useful Diagrams for Object-Oriented Analysis and Design |
|
|
49 | (36) |
|
2.1 The Importance of Bubbles and Lines |
|
|
50 | (4) |
|
2.1.1 Making Your Diagrams Look Good |
|
|
50 | (4) |
|
2.2 Other People's Notations-Understanding Class Diagrams |
|
|
54 | (3) |
|
2.3 Use-Case Diagrams-Understanding Use Cases |
|
|
57 | (3) |
|
2.3.1 Drawing Use-Case Diagrams |
|
|
58 | (1) |
|
2.3.2 Why and When Should We Create Use-Case Diagrams? |
|
|
59 | (1) |
|
2.4 Sequence Diagrams-Understanding Use Cases Even Better |
|
|
60 | (3) |
|
2.4.1 How to Draw Sequence Diagrams |
|
|
62 | (1) |
|
2.4.2 Why and When Should We Draw Sequence Diagrams? |
|
|
63 | (1) |
|
2.5 State Diagrams-Understanding Complicated Classes |
|
|
63 | (6) |
|
2.5.1 How to Draw a State Diagram |
|
|
66 | (1) |
|
2.5.2 Taking State Diagramming a Bit Further |
|
|
67 | (1) |
|
2.5.3 When and Why Should We Draw State Diagrams? |
|
|
68 | (1) |
|
2.6 Collaboration Diagrams |
|
|
69 | (1) |
|
2.6.1 Drawing Collaboration Diagrams |
|
|
69 | (1) |
|
2.6.2 Why and When Should We Draw Collaboration Diagrams? |
|
|
70 | (1) |
|
2.7 Process Models-Understanding What's Currently Going On |
|
|
70 | (4) |
|
2.7.1 Drawing Process Models |
|
|
72 | (2) |
|
2.7.2 Why and When Should We Draw Process Models? |
|
|
74 | (1) |
|
2.8 Interface-Flow Diagrams-Understanding the User Interface |
|
|
74 | (3) |
|
2.8.1 Drawing Interface-Flow Diagrams |
|
|
75 | (1) |
|
2.8.2 Why and When Should We Draw Interface-Flow Diagrams? |
|
|
76 | (1) |
|
2.9 Data Models-Modeling Your Database Design |
|
|
77 | (2) |
|
2.9.1 Drawing Data Models |
|
|
78 | (1) |
|
2.9.2 Why and When Should We Draw Data Models? |
|
|
79 | (1) |
|
2.10 An Overall Analysis and Design Strategy |
|
|
79 | (2) |
|
|
81 | (4) |
|
Chapter 3 Improving Your Design-A Class-Type Architecture |
|
|
85 | (32) |
|
3.1 Why Do We Need a Class-Type Architecture? |
|
|
87 | (1) |
|
3.2 Building Up to a Class-Type Architecture |
|
|
87 | (11) |
|
3.2.1 A Two-Layer Class-Type Architecture |
|
|
88 | (2) |
|
3.2.2 A Three-Layer Class-Type Architecture |
|
|
90 | (3) |
|
3.2.3 A Four-Layer Class Architecture |
|
|
93 | (4) |
|
3.2.4 A Five-Layer Class-Type Architecture |
|
|
97 | (1) |
|
3.3 A Detailed Look at the Various Class Types |
|
|
98 | (8) |
|
|
98 | (3) |
|
|
101 | (1) |
|
3.3.3 Persistence Classes |
|
|
102 | (3) |
|
|
105 | (1) |
|
3.4 Issues with the Five-Layer Class-Type Architecture |
|
|
106 | (8) |
|
3.4.1 To Which Layer Does This Class Belong? |
|
|
106 | (1) |
|
3.4.2 Can I Buy Some of These Classes? |
|
|
107 | (2) |
|
3.4.3 What Are the Implications for Project Management? |
|
|
109 | (1) |
|
3.4.4 What Are the Implications for Development? |
|
|
110 | (3) |
|
|
113 | (1) |
|
3.4.6 What Are the Advantages and Disadvantages? |
|
|
114 | (1) |
|
|
114 | (3) |
|
Chapter 4 Reusing Your Development Efforts-Object-Oriented Patterns |
|
|
117 | (22) |
|
|
119 | (6) |
|
|
119 | (1) |
|
|
120 | (2) |
|
4.1.3 Roles Played (State) |
|
|
122 | (3) |
|
|
125 | (7) |
|
4.2.1 Item-Item Description |
|
|
126 | (2) |
|
|
128 | (1) |
|
|
128 | (2) |
|
|
130 | (1) |
|
|
131 | (1) |
|
4.3 How to Use Patterns Effectively |
|
|
132 | (1) |
|
4.4 How to Discover New Patterns |
|
|
133 | (1) |
|
4.5 The Advantages and Disadvantages of Patterns |
|
|
134 | (2) |
|
|
134 | (1) |
|
|
135 | (1) |
|
|
136 | (3) |
|
Chapter 5 Development in the 90s and Beyond-Designing Distributed Object-Oriented Applications |
|
|
139 | (32) |
|
5.1 Centralized Mainframes |
|
|
141 | (1) |
|
|
142 | (6) |
|
5.2.1 Two-Tier Client/Server |
|
|
144 | (2) |
|
5.2.2 Three-Tier Client/Server |
|
|
146 | (2) |
|
|
148 | (13) |
|
5.3.1 "Traditional" Client/Server Using Object Technology |
|
|
149 | (1) |
|
5.3.2 Taking a Peer-to-Peer Approach--Object-Oriented Client/Server |
|
|
149 | (11) |
|
|
160 | (1) |
|
|
161 | (6) |
|
5.4.1 Common Object Request Broker Architecture |
|
|
163 | (4) |
|
|
167 | (4) |
Part III OBJECT-ORIENTED CONSTRUCTION |
|
171 | (192) |
|
Chapter 6 Measuring and Improving the Quality of Your Work-Object-Oriented Metrics |
|
|
171 | (26) |
|
6.1 What Are Metrics and What Can They Do for/to Me? |
|
|
172 | (1) |
|
|
173 | (5) |
|
6.2.1 Number of Key Classes |
|
|
174 | (1) |
|
6.2.2 Person Days per Class |
|
|
174 | (1) |
|
6.2.3 Classes per Developer |
|
|
175 | (1) |
|
6.2.4 Number of Reused Classes |
|
|
176 | (1) |
|
6.2.5 Function and Feature Points |
|
|
177 | (1) |
|
6.3 Improving Your Development Efforts |
|
|
178 | (12) |
|
|
179 | (1) |
|
|
180 | (5) |
|
6.3.3 Construction Metrics |
|
|
185 | (4) |
|
|
189 | (1) |
|
6.4 Choosing the Right Tools |
|
|
190 | (1) |
|
6.4.1 Comments per Method and Percentage of Commented Methods |
|
|
190 | (1) |
|
6.5 Improving Your Development Approach |
|
|
191 | (1) |
|
6.6 Metrics Success Factors |
|
|
191 | (3) |
|
|
194 | (3) |
|
Chapter 7 Choosing an Object-Oriented Language-Comparing the Leading Languages |
|
|
197 | (24) |
|
7.1 What to Look For in an OO Language |
|
|
198 | (4) |
|
7.2 The Leading OO Languages |
|
|
202 | (5) |
|
|
202 | (1) |
|
|
203 | (2) |
|
|
205 | (2) |
|
|
207 | (1) |
|
7.2.5 Comparing the Leading OO Languages |
|
|
207 | (1) |
|
7.3 Understanding Electronic Commerce on the Internet |
|
|
207 | (9) |
|
7.3.1 An Architecture for Supporting Electronic Commerce |
|
|
209 | (1) |
|
7.3.2 Payment Processing on the Internet |
|
|
210 | (1) |
|
7.3.3 It's the WORLD Wide Web-International Issues |
|
|
211 | (1) |
|
7.3.4 You Can Sell Both Physical and Virtual Products Internationally |
|
|
212 | (1) |
|
|
212 | (1) |
|
7.3.6 Using Smalltalk/ObjectCOBOL and Java to Develop Electronic Commerce Applications |
|
|
213 | (3) |
|
7.4 Beyond Programming Languages-Other Development Tools |
|
|
216 | (2) |
|
|
218 | (3) |
|
Chapter 8 Building Your Application-Effective Object-Oriented Construction Techniques |
|
|
221 | (40) |
|
8.1 Attitude Is Everything |
|
|
222 | (4) |
|
8.1.1 There's More to Development Than Just Coding |
|
|
222 | (1) |
|
8.1.2 There's More to Development Than Just Development |
|
|
223 | (1) |
|
8.1.3 You Need to Get the Design Right First |
|
|
224 | (1) |
|
8.1.4 You Need to Develop in Small Steps |
|
|
225 | (1) |
|
8.1.5 You Need to Work Closely with Your Users |
|
|
226 | (1) |
|
8.2 Working with Attributes Effectively |
|
|
226 | (11) |
|
|
226 | (3) |
|
|
229 | (8) |
|
8.3 Writing High-Quality Methods |
|
|
237 | (10) |
|
|
237 | (1) |
|
8.3.2 Documenting Methods |
|
|
237 | (4) |
|
8.3.3 Paragraphing Your Code |
|
|
241 | (1) |
|
8.3.4 Methods Should Always Do Something |
|
|
242 | (1) |
|
8.3.5 Methods Should Do One Thing Only |
|
|
243 | (1) |
|
8.3.6 Do One Thing per Line |
|
|
244 | (1) |
|
|
245 | (1) |
|
8.3.8 Specify Order of Message Sends |
|
|
245 | (1) |
|
8.3.9 Polymorphism the Right Way-Avoiding Case Statements |
|
|
246 | (1) |
|
8.4 Creating Maintainable Classes |
|
|
247 | (2) |
|
|
247 | (2) |
|
8.5 Programming Techniques and Approaches |
|
|
249 | (6) |
|
8.5.1 Implementing Instance Relationships |
|
|
249 | (2) |
|
|
251 | (2) |
|
8.5.3 Callback Methods and Message Dispatchers |
|
|
253 | (2) |
|
8.6 Organizing Construction Around the Class-Type Architecture |
|
|
255 | (1) |
|
|
256 | (5) |
|
Chapter 9 Making Your Applications Usable-Object-Oriented User Interface Design |
|
|
261 | (30) |
|
9.1 What Are Object-Oriented User Interfaces? |
|
|
262 | (7) |
|
9.1.1 An OO Bank Teller Application |
|
|
264 | (4) |
|
9.1.2 Why OOUIs Are Different but the Same |
|
|
268 | (1) |
|
9.2 Designing Effective User Interfaces |
|
|
269 | (9) |
|
9.2.1 Human Factors, the Study of People Using Machines |
|
|
269 | (4) |
|
9.2.2 Enough User Interface Design Tips to Sink a Ship, and Then Some |
|
|
273 | (5) |
|
9.3 Developing Effective Object-Oriented User Interfaces |
|
|
278 | (9) |
|
9.3.1 Applications Are No More, Just Objects |
|
|
278 | (2) |
|
9.3.2 You're Working with Objects Too, Not Just Windows |
|
|
280 | (1) |
|
9.3.3 Modeling Object-Oriented User Interfaces |
|
|
281 | (1) |
|
9.3.4 Prototyping Object-Oriented User Interfaces |
|
|
282 | (5) |
|
|
287 | (4) |
|
Chapter 10 Making Your Objects Persistent-Object-Orientation and Databases |
|
|
291 | (52) |
|
10.1 Getting Started-Some Common Terminology |
|
|
292 | (3) |
|
10.2 Saving Your Objects into Flat Files |
|
|
295 | (3) |
|
10.2.1 An Approach to Mapping Objects to Flat Files |
|
|
295 | (3) |
|
10.3 The Current Reality-Relational Technology and OO Applications |
|
|
298 | (36) |
|
|
299 | (12) |
|
10.3.2 Overcoming the Object/Relational Impedance Mismatch |
|
|
311 | (15) |
|
10.3.3 An Approach for Mapping Objects to Relational Databases |
|
|
326 | (6) |
|
10.3.4 The Seven Commandments for Mapping Objects to Relational Databases |
|
|
332 | (2) |
|
10.3.5 Looking into My Crystal Ball-OO and RDB in the Future |
|
|
334 | (1) |
|
10.4 Persistence on the Leading Edge-Object-Oriented Data-bases |
|
|
334 | (5) |
|
10.4.1 What to Look For in an OODBMS |
|
|
335 | (3) |
|
10.4.2 Debunking the Myths of Object Databases |
|
|
338 | (1) |
|
10.5 Taking a Hybrid Approach-Object/Relational Databases |
|
|
339 | (2) |
|
|
341 | (2) |
|
Chapter 11 Integrating Legacy Code-Wrapping |
|
|
343 | (20) |
|
|
344 | (2) |
|
11.2 Approaches to Wrapping |
|
|
346 | (2) |
|
11.2.1 Leaving Things Well Enough Alone |
|
|
347 | (1) |
|
11.2.2 Wrapping Only Hardware and Operating System Calls |
|
|
347 | (1) |
|
11.2.3 Scaffolding Legacy Applications |
|
|
347 | (1) |
|
11.3 Wrapping Technologies |
|
|
348 | (9) |
|
11.3.1 Wrapping Hardware and Operating-System Calls |
|
|
348 | (3) |
|
11.3.2 Wrapping Legacy Applications |
|
|
351 | (4) |
|
11.3.3 Comparing Wrapping Technologies-When to Use Each One |
|
|
355 | (2) |
|
11.4 The Advantages and Disadvantages of Wrapping |
|
|
357 | (1) |
|
|
358 | (5) |
Part IV OBJECT-ORIENTED TESTING |
|
363 | (56) |
|
Chapter 12 Making Sure Your Applications Work-Full Life-Cycle Object-Oriented Testing (FLOOT) |
|
|
363 | (56) |
|
|
365 | (2) |
|
12.2 Testing Your Previous Efforts-Regression Testing |
|
|
367 | (2) |
|
12.3 Testing Your Analysis |
|
|
369 | (3) |
|
12.3.1 Use-Case Scenario Testing |
|
|
370 | (1) |
|
12.3.2 Prototype Walkthroughs |
|
|
370 | (1) |
|
12.3.3 User-Requirement Reviews |
|
|
371 | (1) |
|
|
372 | (8) |
|
12.4.1 Technical-Design Reviews |
|
|
372 | (7) |
|
12.4.2 Requirement-Verification Matrices |
|
|
379 | (1) |
|
12.5 Testing Your Program Code |
|
|
380 | (23) |
|
|
382 | (1) |
|
12.5.2 Traditional Testing Methods |
|
|
383 | (5) |
|
12.5.3 New Testing Techniques for OO Program Code |
|
|
388 | (10) |
|
12.5.4 Language-Specific Testing Issues |
|
|
398 | (1) |
|
12.5.5 Implementing Program Code Test Cases |
|
|
398 | (3) |
|
12.5.6 A Process for Successfully Testing Your Code |
|
|
401 | (1) |
|
12.5.7 The Strengths of Each Program Code Testing Technique |
|
|
402 | (1) |
|
12.6 Testing Your Application As a Whole |
|
|
403 | (7) |
|
|
403 | (4) |
|
12.6.2 User-Acceptance Testing |
|
|
407 | (2) |
|
12.6.3 Alpha, Beta, and Pilot Testing |
|
|
409 | (1) |
|
12.7 Software Quality Assurance and ISO 9000 |
|
|
410 | (2) |
|
12.8 Testing Tips and Techniques |
|
|
412 | (2) |
|
12.9 Full Life-Cycle Object-Oriented Testing Overview |
|
|
414 | (1) |
|
|
415 | (4) |
Part V CONCLUSION |
|
419 | (8) |
|
Chapter 13 Where to Go from Here-Personal Success Strategies |
|
|
419 | (8) |
|
13.1 Advice for Overcoming the OO Learning Curve |
|
|
420 | (2) |
|
13.2 What We Learned in This Book |
|
|
422 | (2) |
|
|
424 | (3) |
APPENDICES |
|
427 | (30) |
Appendix A Notation Summary |
|
427 | (2) |
A.1 The Ambler Class Diagramming Notation, v2.0 |
|
427 | (1) |
A.2 The Unified Modeling Language Class-Diagramming Notation v1.0 (Simplified) |
|
428 | (1) |
Appendix B Visual Glossary |
|
429 | (28) |
Index |
|
457 | |