Home > Store

Design Patterns Explained: A New Perspective on Object-Oriented Design

Register your product to gain access to bonus material or receive a coupon.

Design Patterns Explained: A New Perspective on Object-Oriented Design

Book

  • Sorry, this book is no longer in print.
Not for Sale

About

Features

Description

  • Copyright 2002
  • Edition: 1st
  • Book
  • ISBN-10: 0-201-71594-5
  • ISBN-13: 978-0-201-71594-1

"...I would expect that readers with a basic understanding of object-oriented programming and design would find this book useful, before approaching design patterns completely. Design Patterns Explained complements the existing design patterns texts and may perform a very useful role, fitting between introductory texts such as UML Distilled and the more advanced patterns books."
--James Noble

Design Patterns Explained: A New Perspective on Object-Oriented Design draws together the principles of object-oriented programming with the power of design patterns to create an environment for robust and reliable software development. Packed with practical and applicable examples, this book teaches you to solve common programming problems with patterns--and explains the advantages of patterns for modern software design.

Beginning with a complete overview of the fundamentals of patterns, Design Patterns Explained stresses the importance of analysis and design. The authors clearly demonstrate how patterns can facilitate the overall development process. Throughout the book, key object-oriented design principles are explained, along with the concepts and benefits behind specific patterns. With illustrative examples in C++ and Java, the book demystifies the "whys," "why nots," and "hows" of patterns and explains pattern implementation.

Key topics covered include:

  • New perspectives on objects, encapsulation, and inheritance
  • The idea of design patterns, their origins, and how they apply in the discipline of software design
  • Pattern-based, object-oriented software development using the Unified Modeling Language (UML)
  • How to implement critical patterns--Strategy, Observer, Bridge, Decorator, and many more
  • Commonality/Variability Analysis and design patterns, and how they aid in understanding abstract classes

From analysis to implementation, Design Patterns Explained allows you to unleash the true potential of patterns and paves the path for improving your overall designs. This book provides newcomers with a genuinely accurate and helpful introduction to object-oriented design patterns.



0201715945B06142001

Sample Content

Downloadable Sample Chapter

Click below for Sample Chapter related to this title:
shallowaych8.pdf

Table of Contents



Preface.


From Object Orientation to Patterns to True Object Orientation.


From Artificial Intellegence to Patterns to True Object Orientation.

I. AN INTRODUCTION TO OBJECT-ORIENTED SOFTWARE DEVELOPMENT.

1. The Object-Oriented Paradigm.

Before The Object-Oriented Paradigm: Functional Decomposition.

The Problem of Requirements.

Dealing With Changes: With Functional Decomposition.

Dealing with Changing RequirementS.

The Object-Oriented Paradigm.

Special Object Methods.

Summary.

2. The UML - The Unified Modeling Language.

Overview.

What is the UML?

Why Use the UML?

The Class Diagram.

Interaction Diagrams.

Summary.

II. THE LIMITATIONS OF TRADITIONAL OBJECT-ORIENTED DESIGN.

3. A Problem that Cries Out for Flexible Code.

Overview.

Extracting Information from a CAD/CAM System.

Understand the Vocabulary.

Describe the Problem.

The Essential Challenges and Approaches.

Summary.

4. A Standard Object-Oriented Solution.

Overview.

Solving With Special Cases.

Summary.

Supplement: C++ Code Examples.

III. DESIGN PATTERNS.

5. An Introduction to Design Patterns.

Overview.

Design Patterns Arose from Architecture and Anthropology.

Moving from Architectural to Software Design Patterns.

Why Study Design Patterns.

Other Advantages to Studying Design Patterns.

Summary.

6. The Facade Pattern.

Overview.

Introducing the Facade Pattern.

Learning the Facade Pattern.

Field Notes: The Facade Pattern.

Relating the Facade Pattern to the CAD/CAM Problem.

Summary.

7. The Adapter Pattern.

Overview.

Introducing the Adapter Pattern.

Learning the Adapter Pattern.

Field Notes: The Adapter Pattern.

Relating the Adapter Pattern to the CAD/CAM Problem.

Summary.

Supplement: C++ Code Examples

8. Expanding Our Horizons.

Overview.

Objects the Old Way and the New Way.

Encapsulation the Old Way and the New Way.

Find What is Varying and Encapsulate It.

Commonality / Variability and Abstract Classes.

Summary.

9. The Bridge Pattern.

Overview.

Introducing the Bridge Pattern.

An Observation about Using Design Patterns.

Learning the Bridge Pattern: An Example.

The Bridge Pattern In Retrospect.

Field Notes: Using the Bridge Pattern.

Summary.

10. The Abstract Factory Pattern.

Overview.

Introducing the Abstract Factory Pattern.

Learning the Abstract Factory Pattern: An Example.

Learning the Abstract Factory: Implementing It.

Field Notes: The Abstract Factory.

Relating the Abstract Factory Pattern to the CAD/CAM Problem.

Summary.

Supplement: C++ Code Examples.

IV. PUTTING IT ALL TOGETHER: THINKING IN PATTERNS.

11. How Do Experts Design?

Section Overview.

Overview.

Building by Adding Distinctions.

Summary.

12. Solving the CAD/CAM Problem with Patterns.

Overview.

Review of the CAD/CAM Problem.

Thinking in Patterns.

Thinking in Patterns: Step 1.

Thinking in Patterns: Step 2A.

Thinking in Patterns: Step 2B.

Thinking in Patterns: Step 2D (Facade).

Thinking in Patterns: Step 2D (Adapter).

Thinking in Patterns: Step 2D (Abstract Factory).

Thinking in Patterns: Step 3.

Comparison with the Previous Solution.

Summary.

13. The Principles and Strategies of Design Patterns.

Overview.

The Open-Closed Principle.

The Principle of Designing from Context.

The Principle of Containing Variation.

Summary.

V. HANDLING VARIATIONS WITH DESIGN PATTERNS.

14. The Strategy Pattern.

Overview.

An Approach to Handling New Requirements.

Initial Requirements of the Case Study.

Handling New Requirements.

The Strategy Pattern.

Field Notes: Using the Strategy Pattern.

Summary.

15. The Decorator Pattern.

Overview.

A Little More Detail.

The Decorator Pattern.

Applying the Decorator Pattern to the Case Study.

Another Example: Input / Output.

Field Notes: Using the Decorator Pattern.

Summary.

Supplement: C++ Code Examples.

16. The Singleton Pattern and the Double-Checked Locking Pattern.

Overview .

Introducing the Singleton Pattern.

Applying the Singleton Pattern to the Case Study.

A Variant: The Double-Checked Locking Pattern.

Field Notes: Using the Singleton and Double-Checked Locking Patterns.

Summary.

Supplement: C++ Code Examples.

17. The Observer Pattern.

Overview.

Categories of Patterns.

More Requirements for the Case Study.

The Observer Pattern.

Applying the Observer to the Case Study.

Field Notes: Using the Observer Pattern.

Summary.

Supplement : C++ Code Examples.

18. The Template Method Pattern.

Overview.

More Requirements for the Case Study.

The Template Method Pattern.

Applying the Template Method to the Case Study.

Field Notes: Using the Template Method Pattern.

Summary.

19. The Factory Method Pattern.

Overview.

More Requirements for the Case Study.

The Factory Method Pattern.

Field Notes: Using the Factory Method Pattern.

Summary.

20. The Analysis Matrix.

Overview.

In the Real World: Variations.

Case Study in Variation: An International E-Tail System.

Field Notes.

Summary.

VI. ENDINGS AND BEGINNINGS.

21. Design Patterns Reviewed From Our New Perspective of Object-Oriented Design.

Overview.

A Summary of Object-Oriented Principles.

How Design Patterns Encapsulate Implementations.

Commonality / Variability Analysis and Design Patterns.

Decomposing a Problem Domain Into Responsibilities.

Relationships Within a Pattern.

Patterns and Contextual Design.

Field Notes.

Summary.

22. Bibliography.

Design Patterns Explained: The Web Site Companion.

Recommended Reading on Design Patterns and Object Orientation.

Recommended Reading for Java Programmers.

Recommended Reading for C++ Programmers.

Recommended Reading for Cobol Programmers.

Recommended Reading on eXtreme Programming.

Recommended Reading on General Programming.

Personal Favorites.

Index.

Preface

Design patterns and object-oriented programming. They hold such promise to make your life as a software designer and developer easier. Their terminology is bandied about every day in the technical and even the popular press. But it can be hard to learn them, to become proficient with them, to understand what is really going on.

Perhaps you have been using an object-oriented or object-based language for years. Have you learned that the true power of objects is not inheritance but is in "encapsulating behaviors"? Perhaps you are curious about design patterns and have found the literature a bit too esoteric and high-falutin. If so, this book is for you. It is based on years of teaching this material to software developers, both experienced and new to object orientation.

It is based upon the belief--and our experience--that once you understand the basic principles and motivations that underlie these concepts, why they are doing what they do, your learning curve will be incredibly shorter. And in our discussion of design patterns, you will understand the true mindset of object orientation, which is a necessity before you can become proficient.

As you read this book, you will gain a solid understanding of the ten most essential design patterns. You will learn that design pat-terns do not exist on their own, but are supposed to work in concert with other design patterns to help you create more robust applications. You will gain enough of a foundation that you will be able to read the design pattern literature, if you want to, and possibly discover patterns on your own.

Most importantly, you will be better equipped to create flexible and complete software that is easier to maintain.

From Object Orientation to Patterns to True Object Orientation

In many ways, this book is a retelling of my personal experience learning design patterns. Prior to studying design patterns, I considered myself to be reasonably expert in object-oriented analysis and design. My track record had included several fairly impressive designs and implementations in many industries. I knew C++ and was beginning to learn Java. The objects in my code were well-formed and tightly encapsulated. I could design excellent data abstractions for inheritance hierarchies. I thought I knew object-orientation.

Now, looking back, I see that I really did not understand the full capabilities of object-oriented design, even though I was doing things the way the experts advised. It wasn't until I began to learn design patterns that my object-oriented design abilities expanded and deepened. Knowing design patterns has made me a better designer, even when I don't use these patterns directly.

I began studying design patterns in 1996. I was a C++/object-oriented design mentor at a large aerospace company in the north-west. Several people asked me to lead a design pattern study group. That's where I met my co-author, Jim Trott. In the study group, several interesting things happened. First, I grew fascinated with design patterns. I loved being able to compare my designs with the designs of others who had more experience than I had. I discovered that I was not taking full advantage of designing to interfaces and that I didn't always concern myself with seeing if I could have an object use another object without knowing the used object's type. I noticed that beginners to object-oriented design--those who would normally be deemed as learning design patterns too early--were benefiting as much from the study group as the experts were. The patterns presented examples of excellent object-oriented designs and illustrated basic object-oriented principles, which helped to mature their designs more quickly. By the end of the study sessions, I was convinced that design patterns were the greatest thing to happen to software design since the invention of object-oriented design.

However, when I looked at my work at the time, I saw that I was not incorporating any design patterns into my code.

I just figured I didn't know enough design patterns yet and needed to learn more. At the time, I only knew about six of them. Then I had what could be called an epiphany. I was working on a project as a mentor in object-oriented design and was asked to create a high-level design for the project. The leader of the project was extremely sharp, but was fairly new to object-oriented design.

The problem itself wasn't that difficult, but it required a great deal of attention to make sure the code was going to be easy to maintain. Literally, after about two minutes of looking at the problem, I had developed a design based on my normal approach of data abstraction. Unfortunately, it was very clear this was not going to be a good design. Data abstraction alone had failed me. I had to find something better.

Two hours later, after applying every design technique I knew, I was no better off. My design was essentially the same. What was most frustrating was that I knew there was a better design. I just couldn't see it. Ironically, I also knew of four design patterns that "lived" in my problem but I couldn't see how to use them. Here I was a supposed expert in object-oriented design baffled by a simple problem!

Feeling very frustrated, I took a break and started walking down the hall to clear my head, telling myself I would not think of the problem for at least 10 minutes. Well, 30 seconds later, I was thinking about it again! But I had gotten an insight that changed my view of design patterns: rather than using patterns as individual items, I should use the design patterns together.

Patterns are supposed to be sewn together to solve a problem.

I had heard this before, but hadn't really understood it. Because patterns in software have been introduced as design patterns, I had always labored under the assumption that they had mostly to do with design. My thoughts were that in the design world, the pat-terns came as pretty much well-formed relationships between classes. Then, I read Christopher Alexander's amazing book, The Timeless Way of Building. I learned that patterns existed at all levels--analysis, design, and implementation. Alexander discusses using patterns to help in the understanding of the problem domain (even in describing it), not just using them to create the design after the problem domain is understood.

My mistake had been in trying to create the classes in my problem domain and then stitch them together to make a final system, a process which Alexander calls a particularly bad idea. I had never asked if I had the right classes because they just seemed so right, so obvious; they were the classes that immediately came to mind as I started my analysis, the "nouns" in the description of the system that we had been taught to look for. But I had struggled trying to piece them together.

When I stepped back and used design patterns and Alexander's approach to guide me in the creation of my classes, a far superior solution unfolded in only a matter of minutes. It was a good design and we put it into production. I was excited--excited to have designed a good solution and excited about the power of design patterns. It was then that I started incorporating design patterns into my development work and my teaching. I began to discover that programmers who were new to object-oriented design could learn design patterns, and in doing so, develop a basic set of object-oriented design skills. It was true for me and it was true for the students that I was teaching.

Imagine my surprise! The design pattern books I had been reading and the design pattern experts I had been talking to were saying that you really needed to have a good grounding in object-oriented design before embarking on a study of design patterns. Nevertheless, I saw, with my own eyes, that students who learned object-oriented design concurrently with design patterns learned object-oriented design faster than those just studying object-oriented design. They even seemed to learn design patterns at almost the same rate as experienced object-oriented practitioners.

I began to use design patterns as a basis for my teaching. I began to call my classes Pattern Oriented Design: Design Patterns from Analysis to Implementation.

I wanted my students to understand these patterns and began to discover that using an exploratory approach was the best way to foster this understanding. For instance, I found that it was better to present the Bridge pattern by presenting a problem and then have my students try to design a solution to the problem using a few guiding principles and strategies that I had found were present in most of the patterns. In their exploration, the students discovered the solution--called the Bridge pattern--and remembered it.

In any event, I found that these guiding principles and strategies could be used to "derive" several of the design patterns. By "derive a design pattern," I mean that if I looked at a problem that I knew could be solved by a design pattern, I could use the guiding principles and strategies to come up with the solution that is expressed in the pattern. I made it clear to my students that we weren't really coming up with design patterns this way. Instead, I was just illustrating one possible thought process that the people who came up with the original solutions, those that were eventually classified as design patterns, might have used.

My abilities to explain these few, but powerful, principles and strategies improved. As they did, I found that it became more useful to explain an increasing number of the Gang of Four patterns. In fact, I use these principles and strategies to explain 12 of the 14 patterns I discuss in my design patterns course.

I found that I was using these principles in my own designs both with and without patterns. This didn't surprise me. If using these strategies resulted in a design equivalent to a design pattern when I knew the pattern was present, that meant they were giving me a way to derive excellent designs (since patterns are excellent designs by definition). Why would I get any poorer designs from these techniques just because I didn't know the name of the pattern that might or might not be present anyway?

These insights helped hone my training process (and now my writing process). I had already been teaching my courses on several levels. I was teaching the fundamentals of object-oriented analysis and design. I did that by teaching design patterns and using them to illustrate good examples of object-oriented analysis and design. In addition, by using the patterns to teach the concepts of object orientation, my students were also better able to understand the principles of object orientation. And by teaching the guiding principles and strategies, my students were able to create designs of comparable quality to the patterns themselves.

I relate this story because this book follows much the same pattern as my course (pun intended). In fact, from Chapter 3 on, this book is very much the first day of my two-day course: Pattern Oriented Design: Design Patterns from Analysis to Implementation.

As you read this book, you will learn the patterns. But even more importantly, you will learn why they work and how they can work together, and the principles and strategies upon which they rely. It will be useful to draw on your own experiences. When I present a problem in the text, it is helpful if you imagine a similar problem that you have come across. This book isn't about new bits of information or new patterns to apply, but rather a new way of looking at object-oriented software development. I hope that your own experiences, connected with the principles of design patterns, will prove to be a powerful ally in your learning.

--Alan Shalloway

From Artificial Intelligence to Patterns to True Object Orientation

My journey into design patterns had a different starting point than Alan's but we have reached the same conclusions:

  • Pattern-based analyses make you a more effective and efficient analyst because they let you deal with your models more abstractly and because they represent the collected experiences of many other analysts.
  • Patterns help people to learn principles of object orientation. The patterns help to explain why we do what we do with objects.

I started my career in artificial intelligence (AI) creating rule-based expert systems. This involves listening to experts and creating mod-els of their decision-making processes and then coding these models into rules in a knowledge-based system. As I built these systems, I began to see repeating themes: in common types of problems, experts tended to work in similar ways. For example, experts who diagnose problems with equipment tend to look for simple, quick fixes first, then they get more systematic, breaking the problem into component parts; but in their systematic diagnosis, they tend to try first inexpensive tests or tests that will eliminate broad classes of problems before other kinds of tests. This was true whether we were diagnosing problems in a computer or a piece of oil field equipment.

Today, I would call these recurring themes patterns. Intuitively, I began to look for these recurring themes as I was designing new expert systems. My mind was open and friendly to the idea of pat-terns, even though I did not know what they were.

Then, in 1994, I discovered that researchers in Europe had codified these patterns of expert behavior and put them into a package that they called Knowledge Analysis and Design Support, or KADS. Dr. Karen Gardner, a most gifted analyst, modeler, mentor, and human being, began to apply KADS to her work in the United States. She extended the European's work to apply KADS to object-oriented systems. She opened my eyes to an entire world of pattern-based analysis and design that was forming in the software world, in large part due to Christopher Alexander's work. Her book, Cognitive Patterns (Cambridge University Press, 1998) describes this work.

Suddenly, I had a structure for modeling expert behaviors without getting trapped by the complexities and exceptions too early. I was able to complete my next three projects in less time, with less rework, and with greater satisfaction by end-users, because:

  • I could design models more quickly because the patterns predicted for me what ought to be there. They told me what the essential objects were and what to pay special attention to.
  • I was able to communicate much more effectively with experts because we had a more structured way to deal with the details and exceptions.
  • The patterns allowed me to develop better end-user training for my system because the patterns predicted the most important features of the system.

This last point is significant. Patterns help end-users understand systems because they provide the context for the system, why we are doing things in a certain way. We can use patterns to describe the guiding principles and strategies of the system. And we can use patterns to develop the best examples to help end-users understand the system.

I was hooked.

So, when a design patterns study group started at my place of employment, I was eager to go. This is where I met Alan who had reached a similar point in his work as an object-oriented designer and mentor. The result is this book. I hope that the principles in this book help you in your own journey to become a more effective and efficient analyst.

--James R. Trott



0201715945P06152001

Index

: (colon), connecting object and class with, 40
- (minus sign) access notation, 33
+ (plus sign) access notation, 33
# (pound sign) access notation, 33

A

abstract class
and Bridge pattern, 156
and commonality/variability analysis, 119–121
defined, 18, 27
and Observer pattern, 275
as placeholder for other classes, 19
purpose of, 19, 20
UML notation for, 34
Abstract Factory pattern, 163–181
and Adapter pattern, 174
and Analysis Matrix, 299
benefits of, 177
and CAD/CAM problem, 179, 200, 213
code examples, 165, 168, 172, 180–181
determining context of, 203
device-driver example, 164–171
and e-tailing case study, 299, 300
and Factory Method pattern, 287
implementing, 171–175, 287
intent/purpose of, 163
key features of, 176
and principle of containing variation, 223
and principle of designing from context, 220–221
simplified view of, 176
strategies involved in, 171
and Strategy pattern, 300
when to use, 177–178
AbstractFactory class, 176
abstraction
and Bridge pattern, 151
decoupling from implementation, 123–124, 133, 145–146
Abstraction class, 151
accessibility
types of, 20
UML notation for, 33
Activity Diagram, 30
Adapter pattern, 95–107
and Abstract Factory pattern, 174
and Bridge pattern, 150, 152
and CAD/CAM problem, 106, 200, 212
code examples, 101, 107
contrasted with Facade pattern, 104–106
determining relationship with other patterns, 203–205
intent/purpose of, 96, 102
key features of, 102
and polymorphism, 97, 101, 105
and principle of containing variation, 223
and principle of designing from context, 222
simplified view of, 102
types of, 103
addObserver method, 272
address verification, e-tailing case study, 265–266
AddrVerification class, 265–266
aggregation, 32, 34–35, 35–36
Alexander, Christopher
and Analysis Matrix, 291, 302
and philosophy of patterns, 75–77, 86, 110, 185–195
and principle of designing from context, 218–219, 222
and quality in design, 72–74, 192
and The Timeless Way of Building, 72, 185–186, 194–195, 309
algorithms
defining, 237, 238, 280, 283
encapsulating, 237, 239
analysis
commonality/variability, 119, 138–139, 199, 219, 307–309
paralysis by, 136, 225, 230
pitfalls, 64, 136
Analysis Matrix, 291–302
and Christopher Alexander, 291, 302
design patterns present in, 299
and e-tailing case study, 292–302
and Jim Coplien, 291, 302
steps for creating, 292
anthropology, origin of design patterns in, 72
architecture
Alexander's book on, 72, 185–186, 194–195
and origins of design patterns, 72–77
attach(Observer) method, 268
attribute, 27

B

base class, 19
Beck, Kent, 144
behavioral patterns, 264, 265
behaviors
hard-coding, 265, 266
stream input, 249
using objects to hold variations in, 116–119, 121
Benedict, Ruth, 72
books, recommended, 314–321
Bridge pattern, 123–161
and Adapter pattern, 150, 152
and Analysis Matrix, 299
C++ vs. Java implementation of, 150, 152
and CAD/CAM problem, 125, 200, 206–210
code examples, 127, 129–130, 147–149, 157–161
and commonality/variability analysis, 307, 308
deriving, 138–149
determining relationship with other patterns, 203–205
and GoF classification system, 264
handling variation with, 153
instantiating objects of, 152
intent/purpose of, 123–124, 133
key features of, 151
object-oriented principles used in, 156
and open-closed principle, 218
power and complexity of, 124
and principle of designing from context, 218–219
shape-drawing example, 125–136
simplified view of, 151
bugs
introducing with changes to code, 5, 218
time spent finding vs. fixing, 9, 10
building, Alexander's book on, 72, 185–186, 194–195, 309
business rules
defining, 238
encapsulating, 237, 239
ByteArrayInputStream class, 250

C

C++
and Bridge pattern, 150, 152
code examples
drawing circles/rectangles, 157–161
implementing CAD/CAM V1 methods, 67
implementing CAD/CAM V2 methods, 68
implementing ResFactory, 181
instantiating CAD/CAM V1 features, 66
instantiating CAD/CAM V2 features, 67–68
using Adapter pattern, 107
using Bridge pattern, 157–161
using Decorator pattern, 252–254
using Double-Checked Locking pattern, 262
using Observer pattern, 276–277
using polymorphism to solve problem, 180
using Singleton pattern, 262
using switch to control device driver, 180
recommended book on, 317
and Singleton pattern, 259
CAD/CAM problem
and Abstract Factory pattern, 179, 213
and Adapter pattern, 106, 200, 212
and Bridge pattern, 125, 200, 206–210
description of, 45, 48–55, 197–198
and Facade pattern, 92, 200, 210–211
solutions
design-pattern approach, 212
object-oriented approach, 57–68, 214
CAD/CAM system
extracting information from, 45–46, 49
maintenance considerations, 64, 65
supporting multiple versions of, 51–54, 57–68
terminology, 46–48
CalcTax class/object, 234–237, 256
canonical form, 208
cardinality, 36–37
carpenter example, design patterns, 81–84, 216
Case Diagram, 30
case study. See e-tailing case study chain, object, 244, 250, 252
Chain of Responsibility pattern, 299
change
anticipating and dealing with, 7–14, 23, 229–232
unintended consequences of, 5, 9
Circle class, 128, 129
circles, drawing, 129–130, 157–161
clarity, 8
Class Adapter pattern, 103
Class Diagram, 31–38
adding note to, 36
purpose of, 30, 31
showing cardinality with, 36–38
showing class information with, 32–33
showing relationship between classes with, 34–35
static nature of, 38
class explosion, 64, 65, 132, 134, 239–240
classes
abstract vs. concrete, 18
containing variation in, 223–225
controlling accessibility of data/methods, 33
defined, 17, 21, 27
organizing objects around, 16–17
reusing, 114
showing information about, 32–33
showing relationships between, 34–35
Coad, Peter, 150
COBOL, recommended book on, 317
code
anticipating changes in, 5, 6–7
debugging, 9, 10, 212
introducing bugs into, 5
modifiability of, 85
organizing around objects vs. functions, 14
problem requiring flexible, 45, 57
refactoring, 154
code examples. See C++; Java
cohesion, 8, 63, 236
collection, 18, 32
colon (:), connecting object and class with, 40
combinatorial explosion, 167. See also class explosion
Command pattern, 299
commonality/variability analysis, 119, 138–139, 199, 219, 307–309
communication, improving team, 80, 84, 86
companion Web site (for this book), 313–314
complexification, design, 189–190
Composite pattern, 152, 299
composition
contrasted with aggregation, 35–36
example of, 32
favoring over inheritance, 233, 235
compound design pattern, 152
computer-aided design and manufacturing. See CAD/CAM
conceptual perspective, 13–14, 15, 110, 119
concrete class, 18
Concrete class, 283
ConcreteComponent class, 251
ConcreteFactory class, 176
ConcreteImplementor class, 151
ConcreteProduct class, 288
ConcreteStrategy class, 238
CONNECT command, 279
consequences, design pattern, 79
constructor, 25, 26, 27
contained objects, 117–119
containing variation, principle of, 223–225
containment, 32, 35
context
looking for what creates, 200–204
principle of designing from, 218–222
"context first" rule, 192, 202
context-setting patterns, 203
contextual design, 310, 312
Coplien, Jim
and Analysis Matrix, 291, 302
and commonality/variability analysis, 138–139
and new perspective on design patterns, 110
coupling, 8–9, 63, 117. See also decoupling
coupons, e-tailing case study, 269–271
Courtyard pattern, 175–176, 191
creational patterns, 264
Creator class, 288
cultural anthropology, origin of design patterns in, 72
Customer class, 265–266
customers, understanding, 296. See also user requirements
CVA, 199. See also commonality/variability analysis

D

daemon rules, 267
dashed line, showing dependency with, 38
data-hiding, 1, 20, 112, 113, 140
database
instantiating, 285–286
querying, 279–282
dataset, CAD/CAM, 48
debugging, 9, 10, 212
decision tables, 291
decomposition, functional
and code changes, 5, 7–10
defined, 4–5, 26, 27
example of, 4
problems with, 5, 8, 10
decompression object, 249
decorator objects
chaining, 244, 250, 252
defined, 243
Decorator pattern, 243–254
and Analysis Matrix, 299
class diagram, 244
code examples, 246–247, 252–254
and e-tailing case study, 243, 244–248
and GoF classification system, 264
intent/purpose of, 243, 251
key features of, 251
power of, 250
simplified view of, 251
and stream I/O, 248–250
decoupling. See also coupling
and Bridge pattern, 123, 133, 151
defined, 124
as pattern category, 264, 265
decryption object, 249
deleteObserver method, 272
dependency relationship, 35, 38, 266, 274
Dependents pattern, 267
Deployment Diagram, 30
derived class, 18, 19, 27, 34
design. See also software design
Alexander's approach to, 181–195
complexification in, 189–190
and preformed parts, 188
as process of synthesis, 187, 194
rules for good, 192
design patterns. See also specific design patterns
alternate ways of viewing/studying, 136–137, 217
and Analysis Matrix, 299
carpenter example, 81–84, 216
categories of, 263–265
and commonality/variability analysis, 307–309
composite, 152
compound, 152
and contextual design, 310
deriving, 138
and encapsulation, 306–307
key features, 79
Abstract Factory pattern, 176
Adapter pattern, 102
Bridge pattern, 151
Decorator pattern, 251
Facade pattern, 90
Factory Method pattern, 288
Observer pattern, 273
Singleton pattern, 258
Strategy pattern, 238
Template Method pattern, 283
and object-oriented paradigm, 71, 85, 305–306
and open-closed principle, 218
origins of, 72–77
and principle of designing from context, 218–222
reasons for studying, 71, 80–86
recommended books on, 314–316
seminal work on, 69, 78
solving CAD/CAM problem with, 197–216
subscribing to e-zine, 314
Web site, 313–314
destructor, 25–26, 27
detach(Observer) method, 268
details, delaying commitment to, 64
device-driver, using switch to control, 164–171, 180
doQuery method, 281–282, 286
Double-Checked Locking pattern, 258–262
code examples, 261, 262
contrasted with Singleton pattern, 255, 261
intent/purpose of, 255
and multithreaded applications, 255, 258–259, 261
draw method, 144
draw_a_circle method, 126
draw_a_line method, 126
drawCircle method, 126, 129–130, 144
drawing programs, 125–136, 141–149, 157–161
drawLine method, 126, 127, 130, 144
driver, using switch to control, 164–171, 180

E

e-commerce system. See e-tailing case study
e-tailing case study
address verification, 265–266
and Analysis Matrix, 292–302
customer coupons, 269–271
database access, 279–282, 285–286
and design patterns
Abstract Factory pattern, 299
Decorator pattern, 243, 244–248
Observer pattern, 267–272
Singleton pattern, 256–257
Strategy pattern, 239–240, 298
Template Method pattern, 280–282
international order-processing, 292–302
printed sales ticket, 241–243, 244–248, 301
sales-order architecture, 232–234
tax rules, 234–237, 256–257
welcome letter, 265–266
e-zine, design patterns, 314
Eckel, Bruce, 178
electronic magazine, design patterns, 314
electronic-retailing. See e-tailing case study
encapsulation
advantages of, 24
and Bridge pattern, 156
defined, 20, 21, 27
and Facade pattern, 92, 93
and Observer pattern, 275
and Strategy pattern, 237, 239
tax-rules example, 234
traditional vs. new view of, 112–115, 140
types of, 114
errors. See bugs; debugging
ESPRIT consortium, 77
expert system
defined, 46
describing problem to be solved by, 48–51
extracting information for, 45–46, 49
understanding terminology, 46–48
explosion, class, 64, 65, 132, 134, 239–240
extensibility, software, 218
eXtreme Programming, recommended book on, 318

F

Facade pattern, 87–93
and CAD/CAM problem, 92, 200, 210–211
contrasted with Adapter pattern, 104–106
determining relationship with other patterns, 203–205
intent/purpose of, 87, 89
key features of, 90
and principle of containing variation, 224
and principle of designing from context, 222
simplified view of, 90
ways of using, 91–92, 93
Factory Method pattern, 285–289
intent/purpose of, 287, 288
key features of, 288
simplified view of, 288
and Template Method, 286
ways of using, 287, 289
Factory objects, 169, 175, 250
features, expert system
defined, 46–47
extracting from dataset, 49–50
generating NC set commands for, 50
FileInputStream class, 250
FilterInputStream class, 250
flexible code, problem requiring, 45, 57
forces, design pattern, 79
Fowler, Martin, 13, 154
Fowler's perspectives, 13–14, 15–16, 21
frameworks, defining, 287
functional decomposition
and code changes, 5, 7–10
defined, 4–5, 26, 27
example of, 4
problems with, 5, 8, 10
functions
changing, 9
organizing code around objects instead of, 14

G

Gamma, Erich. See Gang of Four
Gang of Four
and aggregation vs. composition, 32
authors included in, 69
and designing for change, 231
and encapsulation, 115, 140
and new perspective on design patterns, 110
and pattern classification system, 263–265
seminal work on design patterns, 69, 78
and specific design patterns
Abstract Factory pattern, 163
Adapter pattern, 96
Bridge pattern, 123
Decorator pattern, 243
Facade pattern, 87
Factory Method pattern, 287
Observer pattern, 265, 266
Singleton pattern, 256
Strategy pattern, 237
Template Method pattern, 280
and strategies for creating good designs, 85
garbage collection, 25–26, 152
Gardner, Karen, 77
generalized classes, 114
geometry
CAD/CAM, 48
object-oriented, 54
getEdgeType method, 212
getLength method, 213
getLocation method, 213 GoF reference, 79 gut instinct, paying attention to, 65

H

has-a relationship, 31, 34–35, 214
Helm, Richard. See Gang of Four
hiding data, 1, 20, 112, 113, 140
hierarchies
avoiding large, 85, 223
creating parallel, 287

I

implementation, decoupling abstraction from, 123–124, 133, 145–146
implementation perspective, 13–14, 16, 110–111, 119
Implementor class, 151
inheritance
alternate way of using, 114–115
avoiding large hierarchies, 85, 223
defined, 21, 27
favoring object composition over, 233, 235
and is-a relationships, 18
overusing, 65, 133–134
input/output, stream, 248–250
InputStream class, 250
instance, 17, 21, 27
instantiation
and abstract classes, 19
and Bridge pattern, 152
defined, 17, 27
and Factory Method pattern, 287, 288
instinct, paying attention to gut, 65
intent, design pattern, 79
Interaction Diagram, 30, 38–40
interface, object's public, 16, 20
Internet retailing. See e-tailing case study
is-a relationship, 18, 31, 34, 214
Ishikawa, Sara, 72
Iterator pattern, 299

J

Java
and Bridge pattern, 150, 152
code examples
drawing circles/rectangles, 127, 129–130
implementing CAD/CAM V1 methods, 61
implementing CAD/CAM V2 methods, 62
implementing ResFactory, 172
instantiating CAD/CAM V1 features, 60
instantiating CAD/CAM V2 features, 61–62
using Adapter pattern, 101
using Bridge pattern, 127, 129–130, 147–149
using Decorator pattern, 246–247
using Double-Checked Locking pattern, 261
using Observer pattern, 270–271
using polymorphism to solve problem, 168
using Singleton pattern, 257
using switch to control device driver, 165
and Observer pattern, 272
recommended books on, 316–317
and Singleton pattern, 259
and stream I/O, 250
java.io.InputStream class, 250
Johnson, Ralph, 80. See also Gang of Four

K

KADS, 77
Knowledge Analysis and Design Support, 77

L

locking, double-checked, 260

M

machine-readable instructions, 48
maintenance, effect of class explosion on, 64, 65
makeDB method, 286
McConnell, Steve, 8
Mediator pattern, 299
member, 27
memory leak, 259
methods
defined, 14, 27
defining parameters for, 235
encapsulation of, 114
redundancy among, 63
special types of, 24–26
Meyer, Bertrand, 15, 218
minus sign (-) access notation, 33
model, CAD/CAM, 48
modeling language, 29. See also UML
modifiability, code, 85
modularity, containing variation with, 7–8
motivation, object, 112
multithreaded applications, 255, 258–259, 261

N

NC machine, 48
NC set, 48, 49, 50, 206
Note symbol, UML, 36
notification, event, 266–267, 268, 274
notify method, 268
notifyObservers method, 272
NULL test, 258, 260
numerical control set. See NC set
numerically controlled machine, 48

O

Object Adapter pattern, 103
object-oriented geometry, 54
object-oriented paradigm, 14–27
and design patterns, 71, 85, 305–306
Bridge pattern, 156
Observer pattern, 275
Strategy pattern, 237
and encapsulation, 20, 21, 112
and Fowler's perspectives, 15–16, 19, 21
limitations of 1980s approach to, 1
modeling language for, 29 (See also UML)
and polymorphism, 20–21
recommended books on, 314–316
and reuse of classes, 114
summary of key concepts, 26, 305–306
terminology, 21, 27
types of accessibility in, 20
object-oriented programs. See also object-oriented paradigm
CAD/CAM example, 57–68
"Go to the next classroom" example, 17–18
Shapes example, 4, 22–23
strategies for designing, 85
object wrappers, 104
Object:Class notation, 40
ObjectInputStream class, 250
objects
advantage of using, 14–15
chaining, 243–244, 250, 252
creating new interface for, 96, 104
decoupling, 264
defined, 14, 21, 27
defining one-to-one dependency between, 266
encapsulation of, 114
organizing around classes, 16–17
public interface of, 16, 20
responsibilities of, 15–16, 110–111
traditional vs. new view of, 110–112
wrapping tests on, 252
Observable class, 267, 272
Observer interface, 267, 272
Observer pattern, 266–277
and Analysis Matrix, 299
code examples, 270–271, 276–277
and e-tailing case study, 267–272
intent/purpose of, 266, 273
Java implementation of, 272
key features of, 273
and object dependencies, 266, 274
object-oriented principles used in, 275
simplified view of, 273
when to use, 274–275
"once and only once" rule, 144–145
"one at a time" rule, 192
"one rule, one place" strategy, 144–145, 156
OOG, 54
OOGFeature object, 106
open-closed principle, 218
Oracle database, accessing, 279–282
order processing, e-tail system, 292–302
outermost patterns, 203

P

parallel hierarchies, 287
paralysis by analysis, 136, 225, 230
parameters, UML, 235
part, CAD/CAM, 48
Pattern-Accelerated Software Engineering, 318
pattern languages, 194, 195, 222
patterns. See also design patterns; specific patterns
categories of, 263–265
components required for describing, 76, 78–79
and contextual design, 310
defined, 1, 74
deriving, 138
determining relationships between, 203–205, 309–310
excerpts from Alexander's book on, 75–76, 137, 309
focusing on context of, 137, 200–203
key features, 79
Abstract Factory pattern, 176
Adapter pattern, 102
Bridge pattern, 151
Decorator pattern, 251
Facade pattern, 90
Factory Method pattern, 288
Observer pattern, 273
Singleton pattern, 258
Strategy pattern, 238
Template Method pattern, 283
rules for applying, 192, 195
seniormost, 203
solving CAD/CAM problem with, 197–216
steps for thinking in, 199–214
perspectives, Fowler's, 13–14, 15–16, 21
placeholder, abstract class as, 19
plus sign (+) access notation, 33
polymorphism
and Adapter pattern, 97, 101, 105
and Analysis Matrix, 299
and CAD/CAM system, 52, 63
defined, 20–21, 27
pound sign (#) access notation, 33
private accessibility
defined, 20
UML notation for, 33
programming, recommended books on, 316–318
protected accessibility
defined, 20
and makeDB method, 286
UML notation for, 33
Proxy pattern, 299
public accessibility
defined, 20
and makeDB method, 286
UML notation for, 33
public interface, object's, 16, 20
Publish-Subscribe pattern, 267

Q

quality, design, 73, 192
query, database, 280–282
QueryTemplate class, 281–282, 285–286

R

reading, recommended, 314–321
Rectangle class, 128
rectangles, drawing, 125–136, 157–161
redundancy, 63
refactoring, 154
relationships
between classes, 18, 31, 34–35
between patterns, 309–310
requirements
anticipating/dealing with changes in, 10–14, 23, 125, 227–232
how customers express, 296
problems associated with, 6
reasons for changes in, 6–7
responsibilities, object, 15–16, 110–111
retailing. See e-tailing case study
Riehle, Dirk, 152
rules
for applying patterns, 192, 195
daemon, 267
defining, 238
encapsulating, 237, 239
for good software design, 192
implementing, 144–145

S

sales-order architecture, e-tail system, 232, 233
sales-tax algorithm/rule, 234–237, 239–240, 256–257
scalability, 221
SELECT command, 279, 280
seniormost pattern, 203, 205, 222
Sequence Diagram, 30, 38–40, 131
SequenceInputStream class, 250
Shape class
creating, 97
deriving new classes from, 100, 128
implementing behaviors for, 98
shape-drawing programs, 125–136, 141–149, 157–161
Shape object, 111–112
Shapes program, 4, 22–23
sheet-metal expert system, 45–47. See also CAD/CAM
side effects, unwanted, 9, 10, 24
Silverstein, Murray, 72
single-threaded applications, 255, 261
Singleton pattern, 255–258
code examples, 257, 262
contrasted with Double-Checked Locking pattern, 255, 261
and e-tailing case study, 256–257
how it works, 256
intent/purpose of, 255, 256, 258
key features of, 258
and multithreaded applications, 255, 259, 261
simplified view of, 258
smart data, 110 software design
applying building-design principles to, 186, 188, 193–194
and open-closed principle, 218
and preformed parts, 188
and principle of containing variation, 223–225
and principle of designing from context, 218–222
rules for good, 192–193
software development
anticipating changes to code, 5, 6–7, 229–232
breaking problem into steps, 4–5
focusing on short-term vs. long-term issues, 229–232
Fowler's perspectives, 13–14, 15–16
object-oriented approach to, 1, 14–21 (See also object-oriented paradigm)
specialized classes, 114
specification perspective, 13, 16, 119–121
SQL database, accessing, 279–282
State Diagram, 30
Strategy pattern, 237–240
and Abstract Factory pattern, 300
and class explosion, 239–240
and e-tailing case study, 239–240, 298
intent/purpose of, 237, 238
key features of, 238
object-oriented principles used in, 237
simplified view of, 238
stream I/O, 248–250
StringBufferInputStream class, 250
structural patterns, 264
structured programming, 3, 10, 26
Structured Query Language, 279
subclass, 18, 114
superclass, 19, 27
switches, 165, 166, 167, 169
synchronization, 258, 260

T

target class, 102
tax-calculation algorithm/rule, 234–237, 239–240, 256–257
taxAmount method, 235
Template Method pattern, 280–284
and Analysis Matrix, 299
and e-tailing case study, 280–282
and Factory Method pattern, 286
intent/purpose of, 280, 283, 284
key features of, 283
simplified view of, 283
terminology
CAD/CAM, 46–48
object-oriented paradigm, 21, 27
Timeless Way of Building, The, 72, 185–186, 194–195, 309

U

UML, 29–41
accessibility notation, 33
defined, 29–30
defining parameters in, 235
diagrams and their purposes, 30 (See also specific diagrams)
Object:Class notation, 40
reasons for using, 31, 40
recommended books on, 314–316
using notes in, 36, 40–41
Unified Modeling Language. See UML
uninitialized variables, 25
unwanted side effects, 9, 10, 24
update method, 268
user requirements
anticipating/dealing with changes in, 10–14, 23, 125, 227–232
problems associated with, 6
reasons for changes in, 6–7
understanding, 296
uses relationship, 35

V

variability analysis, 119, 138–139, 199, 219, 307–309
variables
encapsulating, 115–119, 140
uninitialized, 25
variations
identifying relationships between, 224
principle of containing, 223–225
real-world examples, 291–292
steps for analyzing, 292
strategies for handling, 116–119, 121, 140, 146, 234
verification, address, 265–266
visibility, 20
Visitor pattern, 299
visual language, 29
Vlissides, John. See Gang of Four
vocabulary. See terminology

W

Web site, companion (for this book), 313–314
welcome letter, e-tailing case study, 265–266
WelcomeLetter class, 265–266
wrappers, 104
wrapping, 101, 104, 106

X

XP, 318

Updates

Submit Errata

More Information

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.

Overview


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information


To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.

Surveys

Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.

Newsletters

If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information


Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.

Security


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.

Children


This site is not directed to children under the age of 13.

Marketing


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information


If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.

Choice/Opt-out


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information


Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents


California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure


Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.

Links


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact


Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice


We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020