This article is from the Object-Oriented Technology FAQ, by Bob Hathaway email@example.com with numerous contributions by others.
Accelerates Application Development
Odapter accelerates application development by
integrating with familiar development environments
and by providing a robust object-oriented model.
Odapter's choice of development environments
includes those which support the Smalltalk, C++ and
Odapter's robust object model enables the
integration of legacy data and business processes
in the context of one sharable business object
model, shielding the developer from the data
The following Odapter features accelerate
Automatic mapping of objects to relational
The application developer is shielded from the task
of converting complex object models to two
dimensional relational tables.
Smalltalk Class Builder
Once an OSQL schema is created, whether using
available analysis and design tools or manually,
Odapter's Smalltalk Class Builder can generate
corresponding Smalltalk classes and methods. The
developer can select the relevent part of the
Odapter schema to generate. As the Odapter object
model changes, developers can also incrementally
update the Smalltalk classes.
Each object manipulated by Odapter has a unique,
system-provided handle called an object identifier
(OID). OIDs eliminate the need for creating unique
keys to identify stored information. Additionally,
OIDs reduce duplication of information when several
attributes would be needed to uniquely identify
information in the database. OIDs are also a
powerful way to tune data access and performance.
Odapter objects can use functions defined on parent
types in the type hierarchy. For example, as shown
in Figure 5, a subtype of Employee called Pilot
could inherit functions from Employee like hire and
name, while defining unique functions like
hoursflown and status.
Functions defined on a type can be inherited by one
or more subtypes. In Figure 5, functions accessible
by the type ManagingPilot are inherited from its
parents, namely all functions defined on Employee,
Pilot and Manager. By inheriting rather than
redefining functions, you can easily add
functionality to your application.
If you already know SQL, you can quickly be
productive using Odapter's OSQL. Both query
languages are set-based, that is they retrieve sets
of information based upon queries. Thus, OSQL does
not require users to navigate through the database
chasing pointers or object references.
Odapter protects end-user applications from changes
to the internal definition of objects. Since
Odapter only allows access to data through
functions with well defined arguments and results,
your applications are protected from changes to the
function body and you have control over how
information is used.
Aggregates are used to represent collections, such
as crew members (maybe several pilots, flight
attendants and a mechanic) for a particular flight,
or the employees reporting to a particular manager.
Aggregates are not required to have a predetermined
size. Odapter manages the memory associated with
aggregates, relieving your application of this
User-defined Data Types
You can construct user-defined data types in
Odapter, such as a type called Flight, Employee or
Aircraft, as shown in Figure 6. Functions defined
on these types can manipulate data stored within
the current object, within other related objects or
outside of Odapter. User-defined types maximize
flexibility and lead to more manageable, clearer
With Odapter you can construct complex objects from
simpler objects. For example, Figure 6 shows the
relationships between the types Flight, Aircraft
and Employee. Complex objects relieve applications
from managing such relationships.