Software can be designed in a way that enhances
its ability to be reused. This paper examines several concepts or
rules to follow when designing reusable software components. The
paper then gives examples of how to implement designs in both Java
and C#, as well as some problems that occur when using both languages.
The concept of software reuse has been discussed for decades,
yet software developers fight the same battles over software reuse
that have been fought time and time again. One of the sources used
for this paper, The Mythical Man Month, is actually the 20th
anniversary edition of the original material. Even though the
technology involved in the book (IBM System/360) is obsolete, its
discussion of reuse is still relevant (Brooks 222). Consider that
a Google search for software reuse on 7/20/04 returned 1,640,000
results. With so much material available on the topic of software
reuse, is there anything left to discuss?
This paper was born from two experiences working with software reuse
at Lockheed Martin for the Common Training Instrumentation
Architecture program. The first experience was the porting of the
OpenMap application from Java to C#. The other ongoing experience
is viewing the design of a common component library to be implemented
simultaneously in C# and Java. Using multiple languages to implement
the same design provided an interesting view of software reuse. There
are design methodologies, which, if followed, will enhance the ability
of a particular software design to be reused.
In today’s world of object-oriented languages, a software component’s
design can be reused as opposed to its code. There are books on design
patterns, refactoring, and even a Unified Modeling Language (UML) for
expressing a software design in a standard format. Tools can be found
for generating source code from UML diagrams in a number of languages,
leaving the developer to write much less code to implement the design.
Language vendors may also provide translators that will translate
software from one programming language to another.