Ood Chapter1
Ood Chapter1
Object-Oriented Paradigm
In the process of learning about the object-oriented paradigm and all that
it encompasses, you will first become aware of the many divisions within
our community.
Each division implies two or more camps who are generally very
religious about their point of view.
One of the first divisions of importance is the revolutionists versus the
evolutionists.
The revolutionists believe that a group of developers woke up at 3
o'clock one morning and realized that we have been developing software
the wrong way all along.
They believe they have found the solution to the software crisis, and the
name of that solution is object-oriented programming.
The evolutionists feel that object-oriented programming is no revolution
in software development.
It is simply the next logical step in a long series of steps that take the
software developer further and further away from the machine details.
A software crisis does not come about because we are incorrectly
developing software.
A software crisis comes about because our paradigm of programming is
no longer sufficient to handle the complexity of problems we are asked
to solve.
Using octal and/or hexadecimal opcodes to write programs is a great
paradigm when there are only 8 instructions and 1K of memory in our
machine..
When my hardware becomes more sophisticated I begin using assembly-
language mnemonics. This works great until a point where the
complexity of my problems outgrows this paradigm.
I similarly upgrade to using a high-level language whose instructions
each replace many assembly-language mnemonics, allowing me to think
at a higher level.
Aside from reducing the language complexity, I also seek out a better
way of thinking about my problem.
Instead of stringing instructions into small functions and small functions
into programs, I use a structured method for breaking my problem into
smaller pieces, each of which is manageable.
We are currently at a point in software development where structured,
top-down design methods are no longer sufficient for handling the
complexity of problems possible with today's hardware.
We need to find a paradigm of software development that can handle the
added complexity. Very recently—in 1985—menu-driven systems were
the norm.
Today, a software application must have a graphical user interface if it is
to be marketable.
Within the next few years, the consumer will demand multimedia
applications that talk to them, listen to them, and display moving video
across the screen.
Why is the object-oriented paradigm generating so much interest as
a method for handling these more complex applications?
One of the biggest reasons for moving to the object-oriented
paradigm for developing complex applications is that it allows
designers more closely to model the real world.
Structured methods are built on the idea of centralized control.
The strength of a decentralized architecture is the fact that any one
problem will affect one area of the application, which, in a good
design, will be loosely coupled to the other areas of the application.
This limits the impact of change on our system should there be a
problem with one application area, or should we wish to extend the
same.
If decentralization allows the real world, with all of its
complexities, to operate, shouldn't we attempt to handle complex
software problems in the same way?
Accidental Versus Essential Complexity
• Frederick Brooks published a very interesting article in the October
1987 issue of IEEE Computer, titled “Conceptual Essence of Software
Engineering or There Is No Silver Bullet” .
• The “No Silver Bullet” article is a follow-up on his insights for
software engineering.
• In it he discusses why we have a software crisis, why there is no magic
methodology that will cure all of our problems, and what promising
techniques we can use in the future to lessen the crisis.
• A fundamental point the article makes is that there are two types of
complexity feeding the software crisis; accidental complexity and
essential complexity.
Accidental complexity
Accidental complexity occurs due to a mismatch of paradigms,
methodologies, and/or tools in our application.
This type of complexity can be eliminated given sufficient resources
to build or buy tools that complement one another.
Object-oriented programming helps to eliminate accidental
complexity by providing a consistent paradigm for software
development that encompasses analysis, design, and implementation.
This is not to say that object-oriented software projects do not
contain accidental complexity.
The MIS (management information science) world and other
domains are faced with a particular type of accidental complexity.
These groups have invested large sums of money in relational
database technology and are now moving from the action-oriented to
the object-oriented paradigm.
Essential complexity
The real culprit of the software crisis is essential complexity.
Essential complexity revolves around the fact that software is
intrinsically complex, and no methodology or tool is going to
eliminate this complexity.
There are several reasons why software possesses essential
complexity:
(i)Software applications, for their size, are the most complex
entities that humans build.
(ii)Software is intangible and, for the most part, invisible.
(iii)Software does not wear out in the traditional sense of
machinery with moving parts wearing out.
However, software is constantly being used in ways its authors
never expected (often uncovering errors), and end users are
constantly demanding extensions to their software.
The Waterfall Model
Fig 1.1