|
Foreword xv
Preface xvii
Part I Introduction 1
Chapter 1 What Does It Mean to Be Object Oriented,
Anyway? 3
1.1 Encapsulation 9
1.2 Information/Implementation Hiding 12
1.3 State Retention 14
1.4 Object Identity 15
1.5 Messages 19
1.5.1 Message structure 19
1.5.2 Message arguments 21
1.5.3 The roles of objects in messages 23
1.5.4 Types of message 25
1.6 Classes 27
1.7 Inheritance 33
1.8 Polymorphism 38
1.9 Genericity 43
1.10 Summary 48
1.11 Exercises 50
1.12 Answers 52
Chapter 2 A Brief History of Object Orientation
57
2.1 Where Did Object Orientation Come From? 57
2.1.1 Larry Constantine 58
2.1.2 O.-J. Dahl and K. Nygaard 58
2.1.3 Alan Kay, Adele Goldberg, and others 58
2.1.4 Edsger Dijkstra 58
2.1.5 Barbara Liskov 59
2.1.6 David Parnas 59
2.1.7 Jean Ichbiah and others 59
2.1.8 Bjarne Stroustrup 59
2.1.9 Bertrand Meyer 60
2.1.10 Grady Booch, Ivar Jacobson, and Jim Rumbaugh
60
2.2 Object Orientation Comes of Age 60
2.3 Object Orientation As an Engineering Discipline
62
2.4 What's Object Orientation Good For? 64
2.4.1 Analyzing users' requirements 65
2.4.2 Designing software 65
2.4.3 Constructing software 66
2.4.4 Maintaining software 69
2.4.5 Using software 69
2.4.6 Managing software projects 70
2.5 Summary 73
2.6 Exercises 75
2.7 Answers 76
Part II The Unified Modeling Language 77
Chapter 3 Basic Expression of Classes, Attributes,
and Operations 85
3.1 The Class 85
3.2 Attributes 87
3.3 Operations 89
3.4 Overloaded Operations 92
3.5 Visibility of Attributes and Operations 93
3.6 Class Attributes and Operations 94
3.7 Abstract Operations and Classes 95
3.8 The Utility 97
3.9 Parameterized Classes 98
3.10 Summary 100
3.11 Exercises 102
3.12 Answers 103
Chapter 4 Class Diagrams 107
4.1 The Generalization Construct 108
4.1.1 Single inheritance 108
4.1.2 Multiple inheritance 110
4.1.3 Subclass partitioning 110
4.1.4 Partitioning discriminators 114
4.2 The Association Construct 115
4.2.1 The basic UML notation for associations
116
4.2.2 Associations depicted as classes 119
4.2.3 Higher-order associations 120
4.2.4 Navigability of associations 122
4.3 Whole/Part Associations 123
4.3.1 Composition 123
4.3.2 Aggregation 126
4.4 Summary 130
4.5 Exercises 131
4.6 Answers 133
Chapter 5 Object-Interaction Diagrams 137
5.1 The Collaboration Diagram 138
5.1.1 Depicting a message 139
5.1.2 Polymorphism in the collaboration diagram
142
5.1.3 Iterated messages 143
5.1.4 Use of self in messages 144
5.2 The Sequence Diagram 146
5.3 Asynchronous Messages and Concurrent Execution
149
5.3.1 Depicting an asynchronous message
149
5.3.2 The callback mechanism 151
5.3.3 Asynchronous messages with priority 155
5.3.4 Depicting a broadcast (nontargeted) message
157
5.4 Summary 159
5.5 Exercises 161
5.6 Answers 162
Chapter 6 State Diagrams 164
6.1 Basic State Diagrams 165
6.2 Nested States 167
6.3 Concurrent States and Synchronization 171
6.4 Transient States from Message-Result Arguments
176
6.5 Continuously Variable Attributes 178
6.6 Summary 180
6.7 Exercises 182
6.8 Answers 184
Chapter 7 Architecture and Interface Diagrams
188
7.1 Depicting System Architecture 189
7.1.1 Packages 189
7.1.2 Deployment diagrams for hardware artifacts
191
7.1.3 Deployment diagrams for software constructs
193
7.2 Depicting the Human Interface 196
7.2.1 The window-layout diagram 196
7.2.2 The window-navigation diagram 198
7.2.3 A brief digression: What's object oriented
about a GUI? 200
7.3 Summary 202
7.4 Exercises 203
7.5 Answers 204
Part III The Principles of Object-Oriented
Design 207
Chapter 8 Encapsulation and Connascence 209
8.1 Encapsulation Structure 209
8.1.1 Levels of encapsulation 210
8.1.2 Design criteria governing interacting
levels of encapsulation 212
8.2 Connascence 214
8.2.1 Varieties of connascence 214
8.2.2 Contranascence 220
8.2.3 Connascence and encapsulation boundaries
221
8.2.4 Connascence and maintainability 222
8.2.5 Connascence abuses in object-oriented
systems 224
8.2.6 The term connascence 227
8.3 Summary 228
8.4 Exercises 230
8.5 Answers 231
Chapter 9 Domains, Encumbrance, and Cohesion
233
9.1 Domains of Object Classes 234
9.1.1 The foundation domain 235
9.1.2 The architecture domain 235
9.1.3 The business domain 236
9.1.4 The application domain 237
9.1.5 The source of classes in each domain 238
9.2 Encumbrance 241
9.2.1 What is encumbrance? 241
9.2.2 The use of encumbrance 244
9.2.3 The Law of Demeter 244
9.3 Class Cohesion: A Class and Its Features
246
9.3.1 Mixed-instance cohesion 247
9.3.2 Mixed-domain cohesion 248
9.3.3 Mixed-role cohesion 250
9.4 Summary 253
9.5 Exercises 254
9.6 Answers 255
Chapter 10 State-Space and Behavior 259
10.1 State-Space and Behavior of a Class 259
10.2 The State-Space of a Subclass 263
10.3 The Behavior of a Subclass 266
10.4 The Class Invariant as a Restriction on a
State-Space 267
10.5 Preconditions and Postconditions 269
10.6 Summary 272
10.7 Exercises 273
10.8 Answers 274
Chapter 11 Type Conformance and Closed Behavior
278
11.1 Class versus Type 279
11.2 The Principle of Type Conformance 281
11.2.1 The principles of contravariance
and covariance 282
11.2.2 An example of contravariance and covariance
283
11.2.3 A graphic illustration of contravariance
and covariance 288
11.2.4 A summary of the requirements for type
conformance 290
11.3 The Principle of Closed Behavior 291
11.4 Summary 294
11.5 Exercises 295
11.6 Answers 296
Chapter 12 The Perils of Inheritance and Polymorphism
299
12.1 Abuses of Inheritance 299
12.1.1 Mistaken aggregates 300
12.1.2 Inverted hierarchy 301
12.1.3 Confusing class and instance 302
12.1.4 Misapplying is a 306
12.2 The Danger of Polymorphism 309
12.2.1 Polymorphism of operations 309
12.2.2 Polymorphism of variables 312
12.2.3 Polymorphism in messages 314
12.2.4 Polymorphism and genericity 316
12.3 Summary 319
12.4 Exercises 320
12.5 Answers 322
Chapter 13 Techniques for Organizing Operations
327
13.1 Mix-In Classes 327
13.1.1 A business example 328
13.1.2 A graphics example 333
13.2 Rings of Operations 336
13.3 Summary 342
13.4 Exercises 343
13.5 Answers 344
Chapter 14 Class Cohesion and Support of States
and Behavior 349
14.1 State Support in a Class Interface 350
14.2 Behavior Support in a Class Interface 352
14.3 Operation Cohesion in a Class Interface 360
14.4 Summary 364
14.5 Exercises 366
14.5 Answers 371
Chapter 15 Designing a Software Component
377
15.1 What Is a Component? 378
15.2 Similarities and Differences Between Components
and Objects 380
15.3 Example of a Component 382
15.4 Internal Design of a Component 389
15.5 Lightweight and Heavyweight Components 397
15.6 Advantages and Disadvantages of Using Components
400
15.7 Summary 406
15.8 Exercises 408
15.9 Answers 409
Appendix A: Checklist for an Object-Oriented
Design Walkthrough 411
Appendix B: The Object-Oriented Design Owner's
Manual 417
Appendix C: The Blitz Guide to Object-Oriented
Terminology 423
Glossary 425
Bibliography 443
Index 451
Return
to Book Page
|