From: dgeary@sierra.com (David Geary)
Newsgroups: comp.object
Subject: Re: Need basic OO information
Date: 29 Dec 92 16:10:34 GMT
Organization: Sierra Geophysics,  Kirkland WA

In article <1992Dec11.125457.36573@uservx.plk.af.mil> tollefson@uservx.plk.af.mil writes:
>Hi,
>
>     I was away from programming (doing management, yuk) during the time
>when object-oriented programming became popular.  Now, as I move closer
>to programming again, I need to quickly gain an understanding of what
>object-oriented programming really has to offer.
>
>     I'm looking for a good book (or E-mail replies) which can help me to
>understand some basics:
>
>      1)  What are the basic benefits?  (why use it over traditional)

  When done correctly, OO makes the following *much* easier:

  1.  Maintenance.
  2.  Extensibility.
  3.  Ability to change.


>      2)  How does it work, very generally.  

  *Very* generally, classes of objects which exhibit similar behavior are 
developed in a hierarchy of classes.  Using inheritance, specialized classes
are derived from existing, more generalized, classes.  This is a very natural
paradigm for us humans; grouping similar classes of objects in hierarchies
is something we do constantly in everyday life.

>          (the only examples I've seen
>          have been complex theoretical nightmares or simple contrived
>          situations easily handled by conventional code.)

  The benefits of using OO are proportional to the complexity of the software
being developed.  Therefore, it is difficult to showcase the benefits of OO
without dicussing "complex theoretical nightmares".  Many authors instead
resort to "simple contrived situations", which are of course, "easily
handled by conventional code".


>      3)  How do you tell when to use it and when to avoid it for
>          specific programs?

  OO is applicable across many different types of applications.  There is
some performance penalty for using OO in some situations; for speed critical
apps this may be a problem.
  
>      4)  Can old dogs learn new tricks?  (how hard is it for a programmer
>          to convert his thinking)
>

  I think it's a pretty natural thing to pick up.  Unfortunately, a
developer who is mired down in a procedural paradigm may have a harder time
making the switch to OO than someone who has never written a line of code
in their life.

  I would recommend getting Smalltalk.  Smalltalk is a pure OO language where
one can really see the benefits of having an existing hierarchy of very
useful classes for building complex applications in a short period of time.

>     A description of a case where the programming became much easier or
>the end product became much better would be very helpful.  I'm not looking
>for source code, but some textual information on how the new scheme helped.
>

  There are quite a few good books that cover simplistic case studies.  See
the reading list that follows:


--------------------------------------------------------------------------------
                   Object-Oriented Analysis/Design:
--------------------------------------------------------------------------------

Object-Oriented Modeling And Design, Rumbaugh, et al.
-----------------------------------

  Intended Audience:  OOP practitioners.
  -----------------   

  Excellent writing and presentation get mixed in with some pretty
  intense diagraming techniques for representing class hierarchies, and
  dynamic system behavior.  Many good ideas on how to approach OOA/OOD;
  however, symbology is somewhat complex.  This book also presents the
  OMT (Object Modeling Technique) notation, which is the basis of
  for some modeling tools.


Object-Oriented Design With Applications, Grady Booch.
----------------------------------------

  Intended Audience:  OOP practitioners.
  -----------------   

  Booch, like Budd, presents applications in different languages:  C++, 
  SmallTalk, CLOS, Object Pascal and Ada.  Booch's diagraming techniques
  seem more intuitive than Rumbaugh's.  Booch works at Rational which, among 
  others, provides tools for designing in the Booch notation.


--------------------------------------------------------------------------------
                      Object-Oriented Programming:
--------------------------------------------------------------------------------

Object-Oriented Software Construction, Bertrand Meyer
--------------------------------------

  Intended Audience:  Anyone interested in OOP.
  -----------------   

  Written by the father of the Eiffel programming language, this book is
  (obviously) biased towards Eiffel and the methodologies it imposes; however
  it is an excellent work on the construction of Object-Oriented software
  in any language.  Meyer also discusses a few things which I have not seen 
  addressed (to the same degree) by other OOP authors, such as assertions
  and programming by contract.  This is a true classic.


Object-Oriented Programming An Evolutionary Approach, Brad Cox
----------------------------------------------------

  Intended Audience:  OOP developers and OOP managers. 
  -----------------   

  Written by the father of Objective-C, this book is also biased towards
  Objective-C, but Brad explores many different areas of OOP and reusability
  other than the usage of programming languages to implement OOP methodologies.

  Brad stresses software reuse as an end, to which a programming language
  is (secondarily) a means, which is really the inverse of what Meyer does.

  This book gives a realistic viewpoint of where the software development
  industry is today, and where it may be tomorrow.  There is a very interesting
  analogy of the industrial revolution (and the events leading up to it),
  and the inevitable "evolution" of the software industry.


An Introduction To Object-Oriented Programming, Timothy Budd
----------------------------------------------

  Intended Audience:  OOP practitioners.
  -----------------   

  This one is my favorite.  Examples are done in 4 different languages:  
  C++, Objective-C, SmallTalk, and Object Pascal.

  Budd is an entertaining writer, and explores many aspects of OOP that
  are lost when an author sticks to one programming language.  He also
  advocates a very simplistic method of OO design, which may be much more
  palletable than the books listed below by Rumbaugh and Booch concerning
  OOA/OOD.


Software Components In Ada, Grady Booch.
--------------------------

  Intended Audience:  Ada programmers, and software engineers in general.
  -----------------   

  Obviously slanted towards Ada, Booch nonetheless presents many excellent
  ideas that can be mapped to any programming language.  The design/coding
  of classes one would normally expect to find in a class library, such
  as container classes is explored.  It is enlightening to see how
  many of the advantages of OOP are exploited without the use of
  inheritance.


Object-Oriented Programming With the X Window System Tookits, Jerry Smith
------------------------------------------------------------

  Intended Audience:  X Window developers.
  -----------------   

  This (thick) book provides an interesting look at the "object-oriented" 
implementation of the X Window system in C.  Although I disagree with
some of Jerry's statements concerning what is/is not OOP, and whether the X
Window's OOP technique is on par with C++, nonetheless, exploring the 
implemention of OOP in a non-OOP language is worthwhile in and of itself. 
This book also provides a pragmatic view of developing X apps, and is one
of the better references for "subclassing" X Widgets (not for the faint
of heart!).


--------------------------------------------------------------------------------
                                  C++:
--------------------------------------------------------------------------------

C++ Primer, Stanley Lippman
----------

  Intended Audience:  Beginning and intermediate C++ programmers as a text.
  -----------------   Useful to all C++ programmers as a reference.

  Probably the best introduction to C++.  Contains information hard to find
  elsewhere (such as ifstreams and ofstreams).  Now out in a 2nd edition,
  Lippman covers topics ranging from: C++ data types, and naming of variables
  to templates, exception handling, and object-oriented design.


Effective C++, Scott Meyers
-------------

  Intended Audience:  Intermediate C++ programmers.  Much of what Scott
  -----------------   discusses will make a lot more sense if you've actually
		      been writing C++ code for a while.

  An excellent set of (50) specific methodologies/constructs which one 
  can use to write "effective" C++.  This book will keep you out of 
  trouble, and make your C++ life much easier.  Buy it.


C++ Programming Style, Tom Cargill
---------------------

  Intended Audience:  Intermediate C++ programmers.  Intended audience is 
  -----------------   much the same as "Effective C++".
  
  Looks like Addison-Wesley (publisher) wanted this book to be viewed as
  a sequel to "Effective C++" (the covers are very similar).  Whereas
  Scott Meyers presents 50 techniques for improving C++ programs, 
  most of which are reinforced by a small code fragment, Cargill presents
  case studies of existing C++ code, and then proceeds to point out flaws in 
  the design/code, and ways to implement the functionality better.  While 
  "Effective C++" presents many small rules to follow, such as:  
  "Have operator= return a reference to *this", "C++ Programming Style"
  covers broader issues, such as:  Abstraction, and the mis-use of Inheritance.


The Annotated Reference Manual, Bjarne Stroustrup
------------------------------

  Intended Audience:  C++ experts/language-lawyers/compiler writers.  Good
  -----------------   reference for all C++ programmers.

  The "ARM" is for heavyweights.  In addition to being a reference for compiler
  writers (it's the ANSI base document), Bjarne waxes eloquent about
  many of the nuances of C++, and the rationale behind them (where
  the "annotated" comes from).

  What I especially like is you get to see how certain constructs, such
  as multiple inheritance may be implemented by your compiler.  While it is 
  not essential to know this information to use C++, reading the ARM 
  will improve your debugging skills in C++ by an order of magnitude,
  and give you a deeper understanding of why certain features have/have not
  been included in the language.


Advanced C++, Programming Styles and Idioms, Coplien
-------------------------------------------

  Intended Audience:  Intermediate to expert C++ programmers. 
  -----------------  

   This book covers a lot of ground.  From canonical forms for certain
   categories of C++ classes (such as: orthodox, inheritance, etc.)
   to OOD (Coplien espouses Booch's notation) to envelope and letter
   classes, Coplien explores many implementation techniques not
   found in other literature.  Coplien addresses many of the issues Scott
   Meyers talks about, and in addition, presents many idioms to use
   in certain circumstances.  Coplien assumes you are a fluent C++
   programmer who understands OOP. 
-- 
David Geary           	|   Seattle - America's most attractive city ... 
Sierra Geophysics	|	
dgeary@sierra.com	|   to the jetstream ;-(