Books and Couses_CACM_two_thirds_page:Layout 1 8/6/10 3:17 PM Page 1
& Courses Programs! ACM’s
Helping Members Meet Today’s Career Challenges
Over 3,500 Online Courses and 1,000 Virtual Labs
from Element K!
ACM’s Online Course Collection includes over 3,500 online courses, 1,000
virtual labs, e-reference tools and offline capability. Program highlights:
The ACM E-Learning Catalog - round-the-clock access to 3,500 online courses
on a wide range of computing and business topics, in multiple languages.
Exclusive vLab® Virtual Labs - 1,000 unique vLab® exercises place users on systems using real hardware and software allowing them to gain important job-re-lated experience.
Reference Tools - an e-Reference Library extends technical knowledge outside
of the classroom, plus online Executive Summaries and quick reference cards to
answer on-the-job questions instantly.
Offline Player - members can access assessments and self-study courses offline,
anywhere and anytime, without a live Internet connection. A downloadable
Quick Reference Guide and a 15-minute site orientation course for new users are
also available to help members get started.
The ACM Online Course Program is open to ACM Professional and Student Members.
600 Online Books
ACM members are eligible
for a special 40% savings offer
to upgrade to a Premium
or Full Library subscription.
For more details visit:
The ACM Online Books Collection
includes full access to 600 online
books from Safari® Books Online,
featuring leading publishers includ-
ing O’Reilly. Safari puts a complete
IT and business e-reference library
right on your desktop. Available to
ACM Professional Members, Safari
will help you zero in on exactly the
information you need, right when
you need it.
All Professional and Student Members also have full access to 500
online books from Books24x7®, in
ACM’s rotating collection of complete unabridged books on the
hottest computing topics. This
virtual library puts information at
your fingertips. Search, bookmark, or read cover-to-cover. Your
bookshelf allows for quick retrieval
and bookmarks let you easily
return to specific places in a book.
500 Online Books
designed according to the principles
of OOP, and the quality of the design
and programming was excellent.
I developed the first concurrency
simulator for teaching based upon a
Pascal interpreter written by Niklaus
Wirth. Several years ago, while looking
for a modern concurrency simulator, I
found a third-generation descendant
of my simulator: an interpreter written in Java, extended with a debugger
that had a Swing-based GUI. I wished
to modify this software to interpret
additional byte codes and to expand
the GUI by including an editor and a
command to invoke the compiler.
The heart of an interpreter is a large
switch/case-statement on the instruction codes. An often-cited advantage
of OOP is its ability to replace these
statements with dynamic dispatching.
In the Java program, an abstract class
for byte codes was defined, and from
it, other abstract and concrete classes
were derived for each of the byte codes.
I simply found it more difficult (even
with Eclipse) to browse and modify
80 classes than I did when there were
80 alternatives of a case-statement in
This was only an annoyance; the
real problem quickly surfaced. The
extreme encapsulation encouraged
by OOP caused untold complexity,
because objects have to be passed to
various classes via constructors. For
example, in the original program,
when a button is clicked to request
the display of the history window, the
statement performed in the event
handler is as shown in Figure 2. Well,
the history window is derived from an
abstract window class, so OOP makes
sense here, but there is one debugger,
one debugger frame, one interpreter,
and one window manager. Why can’t
these subsystems be declared publicly
(and implemented privately) without
the baggage of allocated objects and
constructors? My attempt to modify
the software was continually plagued
by the need to access one of these subsystems from a class that had not been
passed the proper object. This resulted in cascades of modifications and
complicated the task considerably; in
addition, it led to a decline in coherence and cohesion. As a result of this
experience, I have ceased to automatically encapsulate everything; instead,