Polymorphic System Architecture
Polymorphic System Architecture
Jeff Bryson
Lockheed Martin Simulation, Training, & Support Orlando FL.
[email protected]
[email protected]
Copyright © 2010 by Jeff Bryson. Published and used by INCOSE with permission.
Abstract. The complexity of tomorrows problems will be far greater then problems we face
today. This complexity will only increase the importance of systems engineering and systems
architecture activities. As the value of the activities rise, the cost of the activities must fall.
Neither a Multi-year analysis and development schedule nor a short term schedule with a high
risk of failure will be acceptable solutions. The solution for solving these complex problems
will be to move systems engineering and architecture artifacts from the Non-Recurring
Engineering cost over head to reusable company assets. A Polymorphic System Architecture
(PSA) is one way of achieving this goal.
Run-Time polymorphism (RTP) has been used in the software community for over 20 years to
satisfy dynamic reconfiguration, plug-n-play, extensibility, and system redundancy
requirements. RTP is also used to construct software Systems of Systems. Systems engineers
now have the same requirements applied to system architecture. A PSA utilizes the same
software technology but applies it to the system architecture (Bryson 2009). The goals of using
a PSA are:
• Reduce the complexity of the system architecture
• Satisfy functional requirements within the system architecture
• Define an architecture that has the potential to mature over time
• Move the system architecture from cost overhead artifacts to company assets
o Create an architecture library of reusable artifacts that can be reused to solve
new problems
Introduction
Polymorphic technology is a key component of advanced Object-Oriented software. The
purpose of this paper is to provide guidance on applying this technology to both software and
non-software systems. A PSA does not require software to be implemented. All that is really
required are formally defined abstract interfaces, objects (or components) that are developed
based on the abstract interface, and a good understanding of how to apply this technology to
produce a reusable and adaptable architecture.
Polymorphic from ancient Greek means ‘many forms’ (AtomicObject 2010). The phrase
Polymorphism is used in both Computer and Biological science. In the context of a PSA
polymorphism means ‘many types’. Within the PSA the system components (software,
hardware or other) can appear to be a different ‘Type’ of component at any point in time. It is
this ability of components to change types that allows the architect to create a system that can
dynamically change behavior and satisfy specific types of requirements.
Within a system design, functional requirements are allocated to decomposed elements of the
design. Within a PSA, specific types of requirements allocated directly to the architecture. The
design will often dictate an implementation, where a PSA will at most only imply an
implementation. This definition of architecture extends the definition provided within the
INCOSE SE Handbook v3.2 (INCOSE 2010). The ability to dynamically change components
also allows systems to plug-n-play new services. The key activity of the architecture team is to
identify and define these ‘Types’ and link them together with the relationships and patterns
presented in this paper. The results of this activity should allow the components created or
instantiated from the architecture to be assembled (dynamically) in multiple ways to solve
multiple, dynamic, and complex problems. In UML and SysML these ‘Types’ are defined as
‘Classes’, ‘Objects’ are instantiated from these ‘Classes’. This ability of the system to
reassemble itself and dynamically change behavior during execution creates ‘Run-Time
Polymorphism’.
The relationships between the design attributes (or architectural component types) are the
primary artifacts of the architecture (Bryson 2009). The relationships of ‘Shared
Aggregation’, ‘Inheritance’, and ‘Abstraction’ are specifically used to create a polymorphic
architecture. The system architect must understand these technologies, not only to create the
system architecture, but to explain how the system architect can directly satisfy specific
functional requirements. “When specific types of relationships between classes are identified,
the ‘whole’ of the ‘design’ (or architecture) becomes much more powerful than the sum of the
parts” (Bryson, 2008). Reference Appendix A for a detailed definition of these and other
concepts the System Architect must understand.
Abstract interfaces are used to create RTP in computer science. This same technology is now
being applied to software and non-software components within the system of Service Oriented
Architectures (SOA) and System of System solutions. The application of this technology at the
system level enables the creation of a ‘less’ complex system architecture that can solve one or
more complex problems.
Shared Aggregation allows the system to dynamically find and use (or reuse) a service
instance (or component) when required. Once the service instance is no longer needed it should
be released for use by other parts of the system. Composition defines one component as
permanently dependent on another component. Abstraction means that the system is going to
reuse the ‘control’ behavior within a system. Inheritance allows one defined
type/class/architecture to reuse behavior, functional requirements, interface requirements,
analysis, and testing associated with a previously defined type/class/architecture. This reuse of
systems engineering artifacts requires a formal linkage between the architecture elements and
the requirements, analysis, and testing (Bryson, 2009). These polymorphic concepts are
illustrated in the design pattern known as the ‘Strategy’ pattern (Gamma 1995). The Strategy
pattern is a common pattern for implementing SOA systems and is illustrated in the UML
diagram in Figure 1.
Polymorphic Mediators
A polymorphic architecture requires a ‘Polymorphic Mediator’ within the system. The
mediator allows the controller components to connect dynamically with the service
components regardless of location.
A standardized middleware application is generally used in software. In the Common Object
Request Broker Architecture (CORBA) an Object Request Broker (ORB) application executes
on each processor. The ORB is the polymorphic mediator which allows a polymorphic server
to register its service. The ORB also allows a polymorphic client to request and connect to a
specific server. In Web Services, the Universal Description Discovery and Integration (UDDI)
service provides the same functionality.
In system architecture, the software components should use a standardized middleware
product. However, non-software portions of the system require different types of polymorphic
mediators. This mediator could be as simple as a call center that links the client with an
available server or as complicated as an airborne, space borne, or sea based communications
network. A well defined and managed abstract interface is required to provide a reliable
linkage between clients and servers in the system architecture. The abstractions within the
architecture should be independent of any specific middleware implementation.
A Maturing Architecture
Even if there is little or no software associated to the architecture, a PSA is an Object-Oriented
product. “OO” technology and (good) refactoring allows the product developer to create a
product (or product line) that can mature over time. A PSA by itself does not guarantee a
system that matures. Refactoring (reinvestment) activities must occur over the entire life cycle
of the product line. This activity implies that the architecture and related engineering artifacts
are evolving and maturing over the system life cycle. The architecture(s) become an evolving
and maturing asset for multiple products.
How does this maturing behavior occur? Some examples show us this process. Figure 4 and
Figure 5 shows how the Strategy pattern is matured to create the composite pattern.
Case value is
If (value = red) when red =>
doSomething(); doSomething();
elseif(value=blue) when blue =>
doSomethingElse() doSomethingElse();
elseif(value=green) when green =>
doAnotherThing(); doAnotherthing();
endif; end case;
Conclusion
As projects become more complex, there is a growing need to reuse software, hardware, and
system engineering artifacts. Polymorphism exists specifically to create reuse of control and
service behavior. A Polymorphic System Architecture adds value by creating extendable and
reusable systems engineering artifacts. The abilities of a Polymorphic System Architecture that
matures over time and moves systems engineering artifacts from Non Recurring Engineering
cost to corporate assets can make the system architecture invaluable. When the system
architecture satisfies requirements, the complexity of the system can be reduced. Polymorphic
technology applied to software and non-software systems provides a means to achieve these
goals. This depends on the ability of the architects, customers, and program managers to
identify and understand the specific types of ‘Relationships’ used to create a Polymorphic
System Architecture. The end goal of applying polymorphic technology to systems
architecture is to be able to start solving a new problem with an 80% proven solution.
Appendix A PSA Terms and Technology
To define these relationships the system architect needs to understand the following specific
Object-Oriented terms and technology.
Containment Object Composition
Encapsulation Polymorphism Inheritance
Type Object Reference Abstraction
Class Aggregation Composite & Shared Polymorphic Servers
Polymorphic Clients Polymorphic Mediator
Containment – A primitive pattern in which one construct (structure) contains a collection of
other constructs.
Encapsulation – A primitive pattern where data and behavior are grouped (or tied) together in
a single construct. “Encapsulation simply says that there should be a way to associate the two
(data and behavior) closely together and treat them as a single unit of organization”. (Linden
1999) Encapsulation extends the pattern of containment and creates a new construct where
specific Data and Behavior related to that Data are grouped together as a single entity. Figure
12 illustrates a UML class that binds together Data (attributes) and Behavior (operations). In
Object-Oriented environments encapsulation provides one form of code reuse. The construct
that provides this grouping is the class.
Linden, Peter Van Der. Just Java 2. Sun Microsystems Press, 1999.
Unknown. 2009.
BIOGRAPHY
Jeff Bryson has his masters in Computer Science from Florida Institute of Technology. Mr.
Bryson has worked in the commercial and defence software industry for over 25 years. He has
provided solutions for Sprint Telecom, NASA, Perot Systems and has taught Computer
Science at DeVry University. Mr. Bryson is a staff software engineer at Lockheed Martin
Simulation, Training & Support in Orlando FL. He has received the OMG UML Certification
and is an IBM certified SOA associate. Mr Bryson has presented at INCOSE, OMG, and
OOPSLA conferences.