Table of contents for Object-oriented analysis and design : understanding system development with UML 2.0 / Mike O'Docherty.

Bibliographic record and links to related information available from the Library of Congress catalog.

Note: Contents data are machine generated based on pre-publication provided by the publisher. Contents may have variations from the printed book or be incomplete or contain other coding.


Counter
Contents
1 Introduction 2
1.1 Background 4
1.2 A Brief History of Programming 4
1.3 Methodologies 5
1.4 About this book 5
1.4.1 Content Overview 6
1.4.2 Case Studies 7
1.4.3 Navigation 7
Part I Setting the Scene 9
2 Object Concepts 10
2.1 Introduction 12
2.2 What Is an Object? 13
2.3 Identical or Equal? 16
2.4 Depicting Objects 19
2.5 Encapsulation 20
2.6 Association and Aggregation 21
2.7 Graphs and Trees 23
2.8 Links and Navigability 25
2.9 Messages 27
2.10 Invoking an Operation 28
2.11 An Example Collaboration 30
2.12 How an Object-Oriented Program Works 32
2.13 Garbage Collection 32
2.14 Classes 34
2.15 What Does a Class Define? 37
2.16 Shared Data and Shared Operations 39
2.17 Types 40
2.18 Terminology 41
2.19 Reusing Code 43
2.20 Summary 48
Further Reading 48
Review Questions 48
Answers to Activities 50
Answers to Review Questions 50
3 Inheritance 52
3.1 Introduction 54
3.2 Designing a Class Hierarchy 55
3.3 Adding Implementations to a Class Hierarchy 58
3.4 Abstract Classes 59
3.5 Redefining Methods 63
3.6 Implementing a Stack Class 64
3.6.1 Implementing a Stack using Inheritance 65
3.6.2 Implementing a Stack using Composition 66
3.6.3 Inheritance versus Composition 68
3.7 Multiple Inheritance 69
3.8 Guidelines for Using Inheritance 73
3.9 Summary 73
Further Reading 74
Review Questions 74
Answers to Review Questions 76
4 Type Systems 78
4.1 Introduction 80
4.2 Dynamic and Static Type Systems 80
4.3 Polymorphism 82
4.3.1 Polymorphic Variables 82
4.3.2 Polymorphic Messages 83
4.4 Dynamic Binding 85
4.5 Polymorphism Guideline 87
4.6 Type Casting 88
4.7 Explicit Casts 89
4.8 Genericity with Templates 91
4.9 Summary 93
Further Reading 93
Review Questions 93
Answers to Activities 95
Answers to Review Questions 96
5 Software Development Methodologies 98
5.1 Introduction 100
5.2 Classical Phases in Software Production 102
5.2.1 Requirements 102
5.2.2 Analysis 102
5.2.3 Design 103
5.2.4 Specification 103
5.2.5 Implementation 104
5.2.6 Testing 104
5.2.7 Deployment 104
5.2.8 Maintenance 104
5.2.9 Key Questions 105
5.3 Software Engineering and the Waterfall Methodology 106
5.4 New Methodologies 110
5.4.1 Spiral Methodology 110
5.4.2 Iterative Methodology 111
5.4.3 Incremental Methodology 112
5.4.4 Combining the Methodologies 113
5.5 Object-Oriented Methodologies 114
5.5.1 UML, RUP and XP 115
5.5.2 The Need for Development Tools 116
5.6 Ripple Overview 117
5.6.1 Use Case Diagram 120
5.6.2 Class Diagram (Analysis Level) 122
5.6.3 Communication Diagram 122
5.6.4 Deployment Diagram 123
5.6.5 Class Diagram (Design Level) 124
5.6.6 Sequence Diagram 124
5.7 Summary 126
Further Reading 126
Review Questions 127
Answers to Review Questions 128
Part II Understanding the Problem 129
6 Gathering Requirements 130
6.1 Introduction 132
6.2 The Birth of a System 133
6.3 Use Cases 135
6.4 Business Perspective 136
6.4.1 Identifying Business Actors 137
6.4.2 Writing the Project Glossary 138
6.4.3 Identifying Business Use Cases 139
6.4.4 Illustrating Use Cases on a Communication Diagram 141
6.4.5 Illustrating Use Cases on an Activity Diagram 143
6.5 Developer Perspective 145
6.5.1 Specializing Actors 149
6.5.2 Use Case relationships 150
6.5.3 System Use Case Details 155
6.5.4 Preconditions, Postconditions and Inheritance 156
6.5.5 Supplementary Requirements 158
6.5.6 User Interface Sketches 158
6.5.7 Prioritizing System Use Cases 159
6.6 Summary 162
Further Reading 162
Review Questions 163
Answers to Review Questions 164
7 Analyzing the Problem 166
7.1 Introduction 168
7.2 Why Do Analysis? 168
7.3 Overview of the Analysis Process 169
7.4 Static Analysis 170
7.4.1 Finding Classes 170
7.4.2 Identifying Class Relationships 171
7.4.3 Drawing Class and Object Diagrams 172
7.4.4 Drawing Relationships 173
7.4.5 Attributes 178
7.4.6 Association Classes 182
7.4.7 Tangible versus Intangible Objects 183
7.4.8 Good Objects 188
7.5 Dynamic Analysis 188
7.5.1 Drawing Use-Case Realizations 189
7.5.2 Boundaries, controllers and Entities 191
7.5.3 Communication Diagram Elements 192
7.5.4 Adding Operations to Classes 194
7.5.5 Responsibilities 194
7.5.6 State Modeling 195
7.6 Summary 197
Further Reading 197
Review Questions 197
Answers to Activities 202
Answers to Review Questions 202
Part III Designing the Solution 205
8 Designing the System Architecture 206
8.1 Introduction 208
8.2 Design Priorities 209
8.3 Steps in System Design 209
8.4 Choosing a Networked System Topology 210
8.4.1 The History of Network Architectures 210
8.4.2 Three-Tier Architecture 212
8.4.3 Personal Computers 214
8.4.4 Network Computers 215
8.4.5 The Internet and the World Wide Web 216
8.4.6 Intranets 217
8.4.7 Extranets and Virtual Private Networks 217
8.4.8 Client-Server versus Distributed Architectures 218
8.4.9 Depicting Network Topology in UML 220
8.5 Designing for Concurrency 222
8.6 Designing for Security 224
8.6.1 Digital Encryption and Decryption 225
8.6.2 General Security Rules 227
8.7 Partitioning Software 227
8.7.1 Systems and Subsystems 228
8.7.2 Layers 229
8.7.3 Java Layers: Applet plus RMI 232
8.7.4 Message Flow in Layers 235
8.8 Summary 239
Further Reading 240
Review Questions 240
Answers to Review Questions 241
9 Choosing Technologies 242
9.1 Introduction 244
9.2 Client Tier Technologies 244
9.3 Client Tier to Middle Tier Protocols 246
9.4 Middle Tier Technologies 248
9.5 Middle Tier to Data Tier Technologies 249
9.6 Other Technologies 250
9.7 Typical Front-End Configurations 252
9.7.1 HTML/CGI with Scripts 252
9.7.2 HTML/CGI with Servlets 254
9.7.3 RMI 256
9.7.4 CORBA 257
9.7.5 EJB 258
9.8 Back-End Configurations 260
9.9 Java E-Commerce Configuration 260
9.10 UML Packages 264
9.11 Summary 269
Further Reading 269
Review Questions 269
Answers to Review Questions 270
10 Designing the Subsystems 272
10.1 Introduction 274
10.2 Mapping the Analysis Class Model into the Design Class Model 275
10.2.1 Mapping Operations 275
10.2.2 Variable Types 276
10.2.3 Visibility of Fields 276
10.2.4 Accessors 277
10.2.5 Mapping Classes, Attributes and Compositions 278
10.2.6 Mapping Other Types of Association 279
10.2.7 Universal Identifier 284
10.3 Handling Persistence with a Relational Database 286
10.3.1 Database Management Systems 287
10.3.2 The Relational Model 288
10.3.3 Mapping Entity Classes 290
10.3.4 Mapping Associations 291
10.3.5 Mapping Object State 294
10.4 Finalizing the User Interfaces 300
10.5 Designing the Business Services 306
10.5.1 Using Proxies and Copies 307
10.5.2 Classifying Business Services 309
10.5.3 Session Identifiers 311
10.5.4 Business Service Realization 312
10.6 Using Patterns, Frameworks and Libraries 314
10.7 Transactions 314
10.7.1 Pessimistic and Optimistic Concurrency 315
10.7.2 General Guidelines for Using Transactions with Objects 316
10.7.3 Transactions in Upper Layers 317
10.8 Handling Multiple Activities 317
10.8.1 Controlling Multiple Tasks 317
10.8.2 Controlling Multiple Threads 318
10.8.3 Thread Safety 320
10.9 Summary 323
Further Reading 324
Review Questions 324
Answers to Review Questions 325
11 Reusable Design Patterns 326
11.1 Introduction 328
11.1.1 A Brief History of Patterns 328
11.1.2 Software Patterns Today 329
11.2 A Pattern Template 330
11.3 Common Design Patterns 331
11.3.1 Observer Design Pattern 331
11.3.2 Singleton Design Pattern 337
11.3.3 Multiton Design Pattern 341
11.3.4 Iterator Design Pattern 342
11.3.5 Factory Method and Abstract Factory Design Patterns 346
11.3.6 State Design Pattern 347
11.3.7 Facade Design Pattern 352
11.3.8 Adapter Design Pattern 354
11.3.9 Strategy and Template Method Design Patterns 355
11.3.10 Flyweight Design Pattern 358
11.3.11 Composite Design Pattern 361
11.3.12 Proxy Design Pattern 364
11.4 Using Patterns 367
11.5 Discovering, Combining and Adapting Patterns 367
11.6 Summary 370
Further Reading 371
12 Specifying the Interfaces of Classes 372
12.1 Introduction 374
12.2 What Is a Specification? 375
12.3 Formal Specification 376
12.4 Informal Specification 378
12.5 Dynamic Checking 380
12.6 Object-Oriented Specification 382
12.6.1 Formal Specification in OCL 383
12.6.2 Informal Specification in Eiffel 384
12.7 Design by Contract 385
12.7.1 Contracts and Inheritance 389
12.7.2 Reducing Error-Checking Code 391
12.7.3 Enforcing the Contract 394
12.7.4 Application Firewalls 395
12.8 Informal Specification in Java 396
12.8.1 Documenting a Contract using Comments 396
12.8.2 Checking Conditions Dynamically 396
12.8.3 Signaling Contract Violations using RuntimeExceptions 397
12.8.4 External Systems 398
12.8.5 Enabling and Disabling Dynamic Checks 400
12.9 Summary 402
Further Reading 403
Review Questions 403
Answers to Review Questions 404
13 Continuous Testing 406
13.1 Introduction 408
13.2 Testing Terminology 408
13.2.1 Black-Box Testing 409
13.2.2 White-Box Testing 410
13.3 Types of Test 411
13.3.1 Unit Testing 412
13.3.2 Integration Testing 412
13.3.3 Alpha Testing 413
13.3.4 Beta Testing 413
13.3.5 Use-Case Testing 414
13.3.6 Component Testing 414
13.3.7 Build Testing 415
13.3.8 Load Testing 417
13.3.9 Installation Testing 418
13.3.10 Acceptance Testing 418
13.3.11 Regression Tests 419
13.3.12 Documentation Tests 419
13.3.13 Testing for Security 419
13.3.14 Metrics 420
13.4 Automating Tests 421
13.5 Preparing for Testing 422
13.6 Testing Strategies 424
13.6.1 Testing During Development 424
13.6.2 Testing During the Testing Phase 425
13.6.3 Testing After Release 426
13.7 What to Test For 426
13.8 Test-Driven Development 430
13.9 An Example of Test-Driven Development using JUnit 431
13.9.1 Testing the Car Class 433
13.9.2 Implementing the Car Class 434
13.9.3 Refactoring Tests 435
13.9.4 Creating a Test Suite for Regression Testing 439
13.9.5 Testing Across Methods 441
13.9.6 Completing the Store Class 442
13.10 Summary 445
Further Reading 445
A Ripple Summary 446
B iCoot Case Study 450
B.1 Business Requirements 450
B.1.1 Customer's Mission Statement 450
B.1.2 Actor List 450
B.1.3 Use Case List 451
B.1.4 Use Case Communication Diagrams 452
B.1.5 Use Case Activity Diagrams 452
B.1.6 Use Case Details 452
B.2 System Requirements 456
B.2.1 User Interface Sketches 457
B.2.2 Actor List 457
B.2.3 Use Case List 457
B.2.4 Use Case Diagram 460
B.2.5 Use Case survey 460
B.2.6 Use Case Details 461
B.2.7 Supplementary Requirements 466
B.2.8 Use-Case Priorities 466
B.3 Analysis 466
B.3.1 Class Diagram 467
B.3.2 Attributes 467
B.3.3 Operation List 467
B.3.4 State Machine for a Reservation 469
B.3.5 Use-Case Realization 471
B.4 System Design 471
B.4.1 Technology Choices 471
B.4.2 Layer Diagram 475
B.4.3 Layer Interaction Policy 478
B.4.4 Packages 480
B.4.5 Deployment Diagram 481
B.4.6 Security Policy 483
B.4.7 Concurrency Policy 483
B.5 Subsystem Design 484
B.5.1 Business Services 484
B.5.2 ServletsLayer Class Diagram 485
B.5.3 ServletsLayer Field List 485
B.5.4 ServletsLayer Message List 485
B.5.5 ServerLayer Class Diagram 487
B.5.6 ServerLayer Field List 487
B.5.7 ServerLayer Message List 488
B.5.8 BusinessLayer Class Diagram 489
B.5.9 BusinessLayer Field List 490
B.5.10 Protocol Objects Class Diagram 494
B.5.11 Database Schema 495
B.5.12 User Interface Design 495
B.5.13 Business Service Realization 496
B.6 Class Specification 509
B.6.1 Server Class Specification 509
B.6.2 Business Logic Class Specification 511
B.7 Outline Test Plan 514
B.7.1 Introduction 514
B.7.2 The Impact of Spirals and Increments 514
B.7.3 Testing of Non-Code Artifacts 514
B.7.4 Code Reviews 515
B.7.5 Test-Driven Development 515
B.7.6 Assertions 515
B.7.7 Testing Phase 516
B.7.8 Documentation Testing 517
B.7.9 Build Testing 517
B.7.10 Test Documentation and Logging 517
B.7.11 Testing Activities by Phase 517
B.8 Glossary 519
C Summary of UML Notation Used 527
Bibliography 538
Index 541

Library of Congress Subject Headings for this publication:

Object-oriented programming (Computer science).
Computer software -- Development.