[gnu.g++] Oasys on Sun, what is OOPS?

tower@WHEATIES.AI.MIT.EDU (Leonard H. Tower Jr.) (02/19/89)

As FSF has started distributing OOPS on the compiler/beta tape, I
thought the list would be interested in this:

Path: mit-eddie!uw-beaver!cornell!batcomputer!rpi!leah!csd4.milw.wisc.edu!bionet!agate!ucbvax!decwrl!sun!pitstop!sundc!seismo!uunet!nih-csl!keith
From: nih-csl!keith (keith gorlen)
Newsgroups: comp.lang.c++
Subject: Re: Oasys on Sun, what is OOPS?
Summary: OOPS is a library of basic Smalltalk-80 -like classes.
Date: 17 Feb 89 16:25:46 GMT
Organization: NIH-CSL, Bethesda, MD

In article <1410@umbio.MIAMI.EDU>, aem@ibiza.Miami.Edu (a.e.mossberg) writes:
> I just installed Oasys C++ on our Sun 3/60, and on the distribution tape
> was a subdirectory called "oops".  There's no information either in the
> directories or the included manuals on what this is -- so, could somebody
> explain what OOPS is, and what I could expect to do with it. I gather that
> its some sort of extensions to C++.

The Object-Oriented Program Support (OOPS) class library is a portable 
collection of classes similar to those of Smalltalk-80 that has been
developed using the C++ programming language under the UNIX operating
system.  The OOPS library includes generally useful data types such as
String, Date, and Time, and most of the Smalltalk-80 collection
classes such as OrderedCltn (indexed arrays), LinkedList
(singly-linked lists), Set (hash tables), and Dictionary (associative
arrays).  Arbitrarily complex data structures comprised of OOPS and
user-defined objects can be stored on disk files or moved between UNIX
processes by means of an Object I/O facility.  Classes Process,
Scheduler, Semaphore, and SharedQueue provide multiprogramming with
coroutines.

Here's the hierarchy of the OOPS classes implemented in Version 2, Release 3:

Object -- Root of the OOPS Class Inheritance Tree
	Bitset -- Set of Small Integers (something like Pascal's type SET)
	Class -- Class Descriptor
	Collection -- Abstract Class for Collection Functions
		ArrayOb -- Array of Object Pointers
		Arraychar -- Byte Array
		Bag -- Unordered Collection of Objects
		Set -- Unordered Collection of Non-Duplicate Objects
			Dictionary -- Set of Associations
				IdentDict -- Dictionary Keyed by Object ID
		SeqCltn -- Abstract Class for Ordered, Indexed Collections
			LinkedList -- Singly-Linked List
			OrderedCltn -- Ordered Collection of Object Pointers
				SortedCltn -- Sorted Collection of Objects
			Stack -- Stack of Object Pointers
	Date -- Calendar Date
	Float -- Floating Point Number Object
	Fraction -- (Toy) Rational Arithmetic
	Link -- Abstract Class for LinkedList Links
		LinkOb -- Link Containing Object Pointer
		Process -- Co-routine Process Object
	LookupKey -- Abstract Class for Dictionary Associations
		Assoc -- Association of Object Pointers
		AssocInt -- Association of Object Pointer with Integer
	Integer -- Integer Number Object
	Iterator -- Collection Iterator
	Nil -- The Nil Object
	Point -- X-Y Coordinate Pair
	Random -- Uniform Random Number Generator
	Range -- Integer Range
	Rectangle -- Rectangle
	Scheduler -- Co-routine Process Scheduler
	Semaphore -- Process Synchronization Class
	SharedQueue -- Shared Queue of Objects
	String -- Character String
		Regex -- Regular Expression Pattern
	Time -- Time of Day
	Vector -- Abstract Class for Math Vector Functions
		BitVec
		ByteVec
		ShortVec
		IntVec
		LongVec
		FloatVec
		DoubleVec
		ComplexVec


Current Status:

Version 2 Release 3 of OOPS is intended to compile under the AT&T C++
Translator Release 1.2.1.

The Vector classes are still experimental and are useful mainly as a
compiler test suite.

The documentation is hopelessly incomplete and out-of-date.  The best
sources of information are the paper "An Object-Oriented Class Library
for C++ Programs" by Keith E. Gorlen, published in the December, 1987
issue of "Software -- Practice and Experience" and also in the
Proceedings of the First USENIX C++ Workshop, and the source code of
the test suite and library.

Because the OOPS reference manual is in such bad shape, we never made
it available in machine-readable form.  This creates a problem now that several
vendors such as OASYS, Oregon Software, and Austin Code Works are
distributing OOPS without the paper documentation that we send to folks
who request the software from us directly.

But relief is on the way.  We've written a book (tentatively) titled "Data Abstraction
and Object-Oriented Programming in C++" to be published by John Wiley later
this year.  It describes OOPS (which we're now calling the NIH Class Library --
there's too many things called "OOPS" these days), its philosophy, and how to extend
it.  We're also preparing a new release of the library which the publisher plans to
distribute for a small fee.  The software in this distribution will be public domain,
except for a few files that are covered by the GNU "copyleft", and will also include the
example programs described in the book.  We also hope to make the distribution
available via anonymous FTP.

The NIH Class Library will be somewhat different from OOPS, and will require
an AT&T C++ R2.0 -compatible compiler (although it will probably not require
support for MI).  In the process of writing the book, we discovered some embarassing
quirks in the library which we either had to explain in public or fix, so we decided
to fix them.

Here's the planned table of contents for the book (subject to change, of course).
The reason I'm posting this is so that we're not deluged by requests for
copies of the old OOPS Reference Manual.

Data Abstraction and Object-Oriented Programming in C++
by Keith Gorlen, Sandy Orlow, and Perry Plexico

Preface

Introduction

PART I: PROGRAMMING WITH ABSTRACT DATA TYPES IN C++

Chapter 1 -- Data Abstraction in C++
	Introduction
	A C++ Example
	Specifications and Implementations
	Encapsulation
	Overview of C++ Support for Data Abstraction
	Chapter Summary

Chapter 2 -- An Example Specification
	Introduction
	Classes
	Member Variables
	Encapsulation
	Member Functions
	Function Argument Type Checking
	Function Name Overloading
	Default Function Arguments
	Calling Member Functions
	Constructors
	Default Constructors
	Constructors with More than One Argument
	Constructors for Static Class Instances
	Constructors and Type Conversion
	Constructors and Initialization
	Operator Overloading
	Destructors
	Chapter Summary

Chapter 3 -- An Example Implementation
	Introduction
	The BigInt(const char*) Constructor
	Scope Resolution Operator
	Constant Types
	Implicit Member Variable and Function References
	The new and delete operators
	Declarations in Blocks
	The BigInt(unsigned) Constructor
	The BigInt Initialization Constructor
	References
	The BigInt Addition Operator
	The BigInt(char*,unsigned) Constructor
	Class DigitStream
	Class-based vs. Object-based Encapsulation
	Friend Functions
	Friend Functions and Binary Operators
	The Keyword this
	The Semantics of return
	The BigInt Assignment Operator
	The Member Function BigInt::print()
	The BigInt Destructor
	Inline Functions
	Chapter Summary

Chapter 4 -- Applications for Abstract Data Types
	Introduction
	Stream I/O
	Dynamic Character Strings
	Regular Expressions
	Dates and Times
	Numeric Data Types
		Extensions of Ordinary Arithmetic
		Higher Algebra
		Automatic Derivatives as an ADT
	Chapter Summary

PART II -- OBJECT-ORIENTED PROGRAMMING IN C++

Chapter 5 -- Object-Oriented Programming Concepts
	Introduction
		What is Object-Oriented Programming?
		Advantages of Object-Oriented Programming
		Derived Classes
		Virtual Member Functions
		switch Considered Harmful
	Geometry Example
		Class Point
		Class Line and Class Circle
		Class Instances as Member Variables
		Class TransformStack
		The Member Function move()
		The Member Function draw()
		Class Shape
		Class Picture
		Type Compatibility
		Subpictures
		An Improved Class Shape
		Base Class and Member Class Instance Initialization
		Single and Multiple Inheritance
		Abstract Classes
		Protected Members
		Polymorphism
	Chapter Summary

Chapter 6 -- Class Libraries
	Introduction
	Geometry Example with NIH Class Library
		NIH Library Class Point
		NIH Library Class Stack
		NIH Library Class OrderedCltn
	Copying Objects
		shallowCopy()
		deepCopy()
	Object I/O
		Object Output
		Object Input
		Object I/O Summary
	Chapter Summary

Chapter 7 -- Programming with the NIH Library Collection Classes
	Introduction
	Class Object
	Identifying and Testing an Object's Class
	Comparing Objects
	Printing Objects
	Terminology
	Class Patient
	Class Collection
	Class Iterator
	Class SeqCltn
	Class OrderedCltn
	Class SortedCltn
	Class KeySortedCollection Class LookupKey, and Class Assoc
	Class LinkedList
	Class Set
	Class Dictionary
	Class IdentDict
	Good Programming Practices in Using Container Classes
	Chapter Summary

Chapter 8 -- Extending the NIH Class Library
	Introduction
		Class ArrayOb Example
	Object-Oriented Design
		When to Use Classes
		Member Functions
			minimal set
			virtual vs. inline
		Member Variables
		Member Accessibility
			private member variables
			private member functions
			protected member function
			summary of member accessibility
		Organizing Classes
			Inheritance
			Member class instances
			Member pointer to class instances
			When to use inheritance
			When not to use inheritance
			An example problem
			Summary of guidelines for organizing classes
		Member Instances vs. Member Pointers to Instances
	Chapter Summary

Chapter 9 -- An Example Library Class
	Introduction
	NIH Class Template Files
	Writing the Specification
	Writing the Implementation
	Chapter Summary

Chapter 10 -- Processes
	Introduction
	Lightweight Processes
	Lightweight Processes in the NIH Class Library
	Class Process
	Class Scheduler
	Class Semaphore
	Class SharedQueue
	Relaying Signals to Lightweight Processes
	Chapter Summary

Chapter 11 -- A Case Study
	Introduction
	Developing a Model of the Real System.
	The Object-Oriented Design
	An Implementation Based on the NIH Class Library
	Implementation of a Data Base with the NIH Class Library
	Inter-Process Communication and Light-Weight Processes
	Chapter Summary

Chapter 12 -- Multiple Inheritance
	Introduction
	Multiple Linked List Example
	Ambiguities
	Virtual Functions
	Virtual Base Classes
	Base Class and Member Initialization
	Base Class and Member Finalization
	Programming with Virtual Base Classes
	Chapter Summary

Chapter 13 -- Future Directions
	Introduction
	Exception Handling
		A Hypothetical Exception Handling Mechanism for C++
		Exception Handling in the NIH Class Library
	Parameterized Types
		A Hypothetical Parameterized Type Facility for C++
		Parameterized Types in the NIH Class Library
		Summary of Parameterized Types
	Garbage Collection
		Counted Pointers
		Garbage-Collecting Versions of malloc()
	Dynamic Linking
	Chapter Summary

Appendix A -- The NIH Class Library Hierarchy

Appendix B -- NIH Class Template Files

Appendix C -- Tips for C Programmers 
-- 
	Keith Gorlen			phone: (301) 496-5363
	Building 12A, Room 2017		uucp: uunet!nih-csl!keith
	National Institutes of Health	Internet: keith@alw.nih.gov
	Bethesda, MD 20892

tower@WHEATIES.AI.MIT.EDU (Leonard H. Tower Jr.) (02/19/89)

It appears from the following, that there will be no or little quality
documentation in the future ftp distributions of OOPS (aka NIH Class
Library).  And that a user only choice will be to buy a non-freed book
from John Wiley.

This is a loss:
    - there will be no quality on-line documentation for users.  
    - there will be no freely-redistributable documentation for users
to share and improve.
    - it will discourage people from using OOPS, because extra cost
and effort is needed to learn and use the library.  This particularly
hits individual users and those who have lengthy authorization
proceedures with a purchashing bureaucracy in order to buy a book.

I hope Keith Gorlen and NIH will reconsider their decision on this
point.  

thanx -len 

   Path: mit-eddie!uw-beaver!cornell!batcomputer!rpi!leah!csd4.milw.wisc.edu!bionet!agate!ucbvax!decwrl!sun!pitstop!sundc!seismo!uunet!nih-csl!keith
   From: nih-csl!keith (keith gorlen)
   Newsgroups: comp.lang.c++
   Subject: Re: Oasys on Sun, what is OOPS?
   Summary: OOPS is a library of basic Smalltalk-80 -like classes.
   Date: 17 Feb 89 16:25:46 GMT
   Organization: NIH-CSL, Bethesda, MD

   In article <1410@umbio.MIAMI.EDU>, aem@ibiza.Miami.Edu (a.e.mossberg) writes:
   > I just installed Oasys C++ on our Sun 3/60, and on the distribution
   tape > was a subdirectory called "oops".  There's no information
   either in the > directories or the included manuals on what this is --
   so, could somebody > explain what OOPS is, and what I could expect to
   do with it. I gather that > its some sort of extensions to C++.

   ...

   Current Status:

   ...

   Because the OOPS reference manual is in such bad shape, we never made
   it available in machine-readable form.  This creates a problem now
   that several vendors such as OASYS, Oregon Software, and Austin Code
   Works are distributing OOPS without the paper documentation that we
   send to folks who request the software from us directly.

   But relief is on the way.  We've written a book (tentatively) titled
   "Data Abstraction and Object-Oriented Programming in C++" to be
   published by John Wiley later this year.  It describes OOPS (which
   we're now calling the NIH Class Library -- there's too many things
   called "OOPS" these days), its philosophy, and how to extend it.
   We're also preparing a new release of the library which the publisher
   plans to distribute for a small fee.  The software in this
   distribution will be public domain, except for a few files that are
   covered by the GNU "copyleft", and will also include the example
   programs described in the book.  We also hope to make the distribution
   available via anonymous FTP.

   The NIH Class Library will be somewhat different from OOPS, and will
   require an AT&T C++ R2.0 -compatible compiler (although it will
   probably not require support for MI).  In the process of writing the
   book, we discovered some embarassing quirks in the library which we
   either had to explain in public or fix, so we decided to fix them.

   Here's the planned table of contents for the book (subject to change,
   of course).  The reason I'm posting this is so that we're not deluged
   by requests for copies of the old OOPS Reference Manual.

   Data Abstraction and Object-Oriented Programming in C++ by Keith
   Gorlen, Sandy Orlow, and Perry Plexico

   Keith Gorlen			phone: (301) 496-5363
   Building 12A, Room 2017		uucp: uunet!nih-csl!keith
   National Institutes of Health	Internet: keith@alw.nih.gov
   Bethesda, MD 20892