|
|
|
System Architecture
|
Building dynamic network models with GIS software components
Dr. Erik Heel
Environmental Systems Research Institute
380 New York Street
Redlands, CA 92373
Emailt: ehoel@esri.com
Software technology
Software technology continues to develop at an ever-increasing pace. Pronounced technological
advancements are being made in the areas of object-oriented analysis, design, and implementation
infrastructure. The ultimate goal of such advancement is to leverage technology in order to create more
flexible and robust systems with lowered development investment. An increased level of software reuse is
directly correlated with lowered error/defect density and increased programmer productivity (Basili, V.,
Briand, L., and Melo, W., 1996). Object-orientation has promised these gains for well over a decade, but
until recently it has been particularly difficult to achieve such results.
-
Evolution of Obiect-Orientation
Object-orientation is undergoing an evolution that has been characterized as having three fundamental
phases, termed the first, second, and third waves (Box, D., 1998(1)).
-
First Wave
The First Wave of object-orientation began in the late 1980s. This period can be characterized as
focussing on the concepts of classes - namely the bundling of state and behavior. Objects belong to
classes and clients manipulate objects via class-based references. Implementation inheritance was the
dominant characteristic of this wave. A programmer assembled classes into libraries that were often
documented in a manner that assumed that the end user would access the source code as the final
reference. The technical downside of this class-centric approach is tight coupling of the class library and
the client application classes. This type of implementation inheritance is often termed white-box reuse
you must have knowledge of the internals of the base class in order to ensure integrity of the derived
class. The class-centric approach also suffers from problems related to portability; class libraries differ by
compiler and platform, thus precluding a client application built using a different compiler from linking
against the class library. Additionally, this approach also suffers from the lack of binary encapsulation;
the client compiler must know the class layout in order to instantiate it or make method calls. We direct
the motivated reader to Box, D., 1998(2) for further details.
- Second Wave
The Second Wave of object-orientation began in the middle 1990s. This period can be considered as
advancing the concept of components (or interface-based development). Components and their associated
frameworks enhance modularity by hiding implementation details behind stable and well-defined
interfaces (Fayad, M,, and Schmidt, D., 1997; Wiederhold, 1998). This reduces coupling and retains the
benefits of polymorphism. This is a refinement of the classical 1980s object-orientation as the interface is
now the primary mechanism for expressing type relationships. Interfaces are separate from
implementation - the "what" and the "how" of an object are two distinct concepts. The developer views
implementation as a black box; all implementation details are opaque to the client of an object.
Essentially, implementation reuse is binary reuse - the client does not need to know any of the inner
details of the component, nor does the client know or care which language was used to implement the
component.
The key point to building reusable components is black-box reuse, which means the piece of code
attempting to reuse another component knows nothing, and needs to know nothing, about the internal
structure or implementation of the component being used. In other words, the code attempting to reuse a
component depends upon the behavior of the component and not the exact implementation. Frameworks
that were key to the adoption of interfaced-based development include Microsofi's COM (Microsoft,
1994), Object Management Group's CORBA (Object Management Group, 1995), and Java's RMI
(Arnold, K., and Gosling, J., 1997).
- Third Wave
The Third Wave of object-orientation is currently in its infancy. You can characterize this wave as
focussing on stateless objects and transaction monitors (which support scalable distributed component
architectures). You can logically model an object as state and behavior, but the implementation must
explicitly distinguish between the two. Developers can leverage this new infrastructure (concurrency,
error recovery, load balancing, and data consistency) to decouple the virtual function pointers (i.e.,
behavior) from the object state. Microsofl Transaction Server (MTS) is an example of such an
infrastructure. Another notable example is the Sybase Jaguar Component Transaction Server.
These technologies may prove to be the future of object-oriented software. At present, they are evolving
technologies that do not yet have the maturity necessary for incorporation into high-end AM/FM/GIS. An
important consideration is that AM/FM/GIS systems based upon component architectures will be well
positioned when stateless objects are ready for widespread commercial implementation.
|
|
|
|