beautypg.com

Why design an rwcollectable class, An example of rwcollectable classes – HP Integrity NonStop J-Series User Manual

Page 214

background image

Click on the banner to return to the user guide home page.

©Copyright 1996 Rogue Wave Software

Why Design an RWCollectable Class?

Before we get to the nuts and bolts of how to design an

RWCollectable

class, let's discuss a concrete example of why you might choose to design

RWCollectable

classes.

Suppose you run a bus company. To automate part of your ridership tracking system, you want
to write classes that represent a bus, its set of customers, and its set of actual passengers. In
order to be a passenger, a person must be a customer. Hence, the set of customers is a superset
of the set of passengers. Also, a person can physically be on the bus only once, and there is no
point in putting the same person on the customer list more than once. As the developer of this
system, you must make sure there are no duplicates on either list.

These duplicates can be a problem. Suppose that the program needs to be able to save and
restore information about the bus and its customers. When it comes time to polymorphically
save the bus, if your program na_vely iterates over the set of customers, then over the set of
passengers, saving each one, any person who is both a customer and a passenger is saved twice.
When the program polymorphically restores the bus, the list of passengers will not simply refer
to
people already on the customer list. Instead, each passenger will have a separate instantiation
on both lists.

You need some way of recognizing when a person has already been polymorphically saved to
the stream and, instead of saving him or her again, merely saving a reference to the previous
instance.

This is the job of class

RWCollectable

. Objects that inherit from RWCollectable have the ability

to save not only their contents, but also their relationships with other objects that inherit from
RWCollectable. We call this feature isomorphic persistence. Class RWCollectable has
isomorphic persistence, but more than that, it can determine at run time the type of the object to
be saved or restored. We call the type of persistence provided by RWCollectable polymorphic
persistence
, and recognize it as a superset of isomorphic persistence.

An Example of RWCollectable Classes

The code below shows how we might declare the classes described in the previous section.
Later we'll use the macro RWDECLARE_COLLECTABLE and discuss our function choices.
You'll find the complete code from which this example is taken at the end of this chapter; it is

This manual is related to the following products: