|
The target candidate audience is an application designer/developer
skilled in OOA/OOD with 3 to 5 years or more experience with
OOA/OOD methodology. The question pertains to the essential
principles of OOA/OOD and anyone who has participated in a
lead role in more than one application development life-cycle
should be able to respond correctly regardless of the CASE
tool they used for modeling purposes or the OOA/OOD methodology
used (e.g.: Yourdon, Booch, Rumbaugh, etc).
How
OOA/OOD supports Software Reusability?
Scenario:
You are a software
developer in the design phase of a project using OOA/OOD to
develop a model of the software architecture for the client.
The client informs you that sometime post delivery of the
project, his company is planning a major re-architecture of
the existing IT infrastructure. They want assurances from
you that the software you are planning to deliver will be
reusable in the new environment. Assuming that you can identify
the key abstractions and reduce the dependencies between software
components as far as possible, how will designing the project
using OOA/OOD methodology help you to ensure that the software
you are planning to deliver will be maximally reusable?
What to look for in your candidate's response:
The technique of encapsulation which distinguishes between
what an object displays externally as its publicly accessible
interface and what an object retains as private internally
combined with the technique of polymorphism which allows objects
with many different private insides and different public interfaces
to conform to a single expected public interface support software
reuse. Inheritance aids in software reuse by supporting evolution
by extension rather than reimplementation. New features of
classes to be defined by specifying new subclasses. Subclasses
inherit all the existing features of the parent class, modified
where necessary, without changing the original class definition
itself or even the programs that will use the new subclass
(provided they use it in the same way they would use the parent
class).
Explanation:
Encapsulation
is a technique for minimizing interdependencies among separately
written modules (objects) by defining strict external interfaces.
The external interface of a module serves as a contract between
the module and its clients. If clients depend only on the
external interface, the module can be re-implemented without
affecting any clients, so long as the new implementation supports
the same external interface. The ability to reuse software
designed in this manner is a direct consequence of distinguishing
between the internal operations and data and the external
interfaces of each object. The inside of one object contains
assumptions about the external interfaces of the other objects
that it uses. Any object that offers an external interface
conforming to these expectations is a valid partner in this
relationship, an idea known as polymorphism. Software components
constructed in this manner rely as little as possible on the
details of the surrounding environment. The concept of inheritance
extends polymorphism and maximizes the reuse of design and
implementation information, while minimizing the parts of
the system that do have to be changed when extensions are
made.
A candidate who
answers with a simple "information hiding" or answers that
the CASE models provide a structured visible design that can
provide the future software engineers the documentation necessary
to reuse the software may not understand the essence of object
methodology. The reusability of a software component is inversely
related to the amount it depends upon the rest of the world.
Building reusable software requires the developer to identify
the abstractions that reduce dependencies between software
components as far as possible. The distinction between the
insides and outsides of objects contrasts strongly with the
more traditional distinction between data and processing.
A candidate who does not completely grasp this concept may
be very skilled at using CASE tools supporting OOA/OOD methodology,
but may not be designing the software in the most effective
manner. It would be highly beneficial if the interviewer can
encourage the candidate to discuss how these techniques were
used during analysis and design of a real world project or
two in which they have participated.
About the author
My background includes 15 years of progressively responsible
experience in software and systems engineering for a variety
of applications developed on multiple platforms and languages
including multi-tier client server systems. I have experience
in every aspect of the software life cycle from feasibility
analysis through deployment and maintenance. Additionally,
I have been responsible as a project manager for recruiting,
hiring, and developing IT staff for 9 years.
|