1.4. Key Software Trend: Object
Technology
One of the authors, Harvey Deitel,
remembers the great frustration felt in the 1960s by software development
organizations, especially those working on large-scale projects. During his
undergraduate years, he had the privilege of working summers at a leading
computer vendor on the teams developing timesharing, virtual memory operating
systems. This was a great experience for a college student. But, in the summer
of 1967, reality set in when the company "decommitted" from producing as a
commercial product the particular system on which hundreds of people had been
working for many years. It was difficult to get this software right—software is
"complex stuff."
Improvements to software
technology did emerge, with the benefits of structured programming (and the
related disciplines of structured systems analysis and design) being realized in
the 1970s. Not until object-oriented programming became widely used in the
1990s, though, did software developers feel they had the necessary tools for
making major strides in the software development process.
Actually, object technology dates back to
the mid 1960s. The C++ programming language, developed at AT&T by Bjarne
Stroustrup in the early 1980s, is based on two languages—C, which initially was
developed at AT&T to implement the UNIX operating system in the early 1970s,
and Simula 67, a simulation programming language developed in Europe and
released in 1967. C++ absorbed the features of C and added Simula's capabilities
for creating and manipulating objects. Neither C nor C++ was originally intended
for wide use beyond the AT&T research laboratories. But grass roots support
rapidly developed for each.
What are objects and why are they
special? Actually, object technology is a packaging scheme that helps us create
meaningful software units. These can be large and are highly focused on
particular applications areas. There are date objects, time objects, paycheck
objects, invoice objects, audio objects, video objects, file objects, record
objects and so on. In fact, almost any noun can be reasonably represented as an
object.
We live in a world of objects. Just look
around you. There are cars, planes, people, animals, buildings, traffic lights,
elevators and the like. Before object-oriented languages appeared, procedural
programming languages (such as Fortran, COBOL, Pascal, BASIC and C) were focused
on actions (verbs) rather than on things or objects (nouns). Programmers living
in a world of objects programmed primarily using verbs. This made it awkward to
write programs. Now, with the availability of popular object-oriented languages
such as C++ and Java, programmers continue to live in an object-oriented world
and can program in an object-oriented manner. This is a more natural process
than procedural programming and has resulted in significant productivity
gains.
A key problem with procedural
programming is that the program units do not effectively mirror real-world
entities, so these units are not particularly reusable. It's not unusual for
programmers to "start fresh" on each new project and have to write similar
software "from scratch." This wastes time and money, as people repeatedly
"reinvent the wheel." With object technology, the software entities created
(called classes), if properly designed, tend to be reusable on
future projects. Using libraries of reusable componentry can greatly reduce
effort required to implement certain kinds of systems (compared to the effort
that would be required to reinvent these capabilities on new projects).
Software Engineering Observation 1.2
|
Extensive class libraries of reusable software
components are available on the Internet. Many of these libraries are
free. |
Some organizations report that the key
benefit object-oriented programming gives them is not software reuse but,
rather, that the software they produce is more understandable, better organized
and easier to maintain, modify and debug. This can be significant, because
perhaps as much as 80 percent of software costs are associated not with the
original efforts to develop the software, but with the continued evolution and
maintenance of that software throughout its lifetime.
Whatever the perceived benefits,
it's clear that object-oriented programming will be the key programming
methodology for the next several decades.