[net.lang.st80] Object-Oriented Class Library for C++

keith@cecil.UUCP (keith gorlen) (03/24/86)

Several people requested additional information on the Object-Oriented
Program Support (OOPS) class library I am developing for C++.  Here are
the first few paragraphs of the (incomplete) OOPS Reference Manual:

I.  INTRODUCTION

The Object-Oriented Program Support (OOPS) class library is a collection
of C++ classes, loosely modeled after those of SMALLTALK-80, that can be
used by programs written in C++ and run under the UNIX operating system.
The purpose of OOPS is to provide high-level, general-purpose,
extensible, portable, and convenient run-time facilities to make writing
application programs faster and easier.  OOPS may also serve as an
example of how to use the advanced features of the C++ programming
language.

Version 1 of OOPS features a few generally useful data types such as
String, Date, and Time, and classic data structures such as hash tables
(class Set), associative arrays (class Dictionary), and linked lists
(class LinkedList).  Arbitrarily complex data structures comprised of
OOPS- and user-defined objects can be transmitted across computing
boundaries or saved on disk files by means of the OOPS Object I/O
facility.  An exception handling mechansim is available which can
improve a program's readability and efficiency.  Multi-programming with
co-routines is provided by classes Process, Scheduler, and Semaphore.
Also, dependent objects can be established such that when an object
changes in some way, its dependent objects are notified.

It is planned to extend OOPS to support interactive graphics,
communications, and data acquisition.

---

Here's the hierarchy of the OOPS classes implemented in Version 1:

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
		Arraychar -- Byte Array
			String -- Character String
		Arrayobid -- Array of Object Pointers
		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
		Linkobid -- 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
	Nil -- The Nil Object
	Point -- X-Y Coordinate Pair
	Random -- Uniform Random Number Generator
	Rectangle -- Rectangle
	Scheduler -- Co-routine Process Scheduler
	Semaphore -- Process Synchronization Class
	SharedQueue -- Shared Queue of Objects
	Time -- Time of Day
	Vector -- Abstract Class for Math Vector Functions
		ByteVec
		DoubleVec
		FloatVec
		IntVec
		LongVec
		ShortVec
		UnsignedVec

Current Status:

OOPS consists of over 8K lines of C++ source code running under
Masscomp's Real-Time UNIX, a System III derivative.  I've tried to make
it portable, however.  There is one small module written in 68000
assembler to do coroutine calls.

There is a suite of test programs that exercises most of the functions
of the classes, and I have 1 user who is implementing a forms management
system with OOPS.

The class Vector is a minimal implementation -- doing everything
everyone could ever want with vectors is simply too big a job to get
into at this time.

OOPS is in the public domain, and I plan to make the source code
available when I have the documentation written.  I estimate that there's
another 2 man-months of work left on the documentation, and I won't be
able to devote full time to it.  I'm willing to send out a "guru-only"
distribution to those who are interested enough to try working with it
sans documentation.  Release 1.0 of the C++ Translator is required.

-- 
---
	Keith Gorlen
	Computer Systems Laboratory
	Division of Computer Research and Technology
	National Institutes of Health
	Bethesda, MD 20892
	phone:	(301) 496-5363
	uucp:	{decvax!}seismo!elsie!cecil!keith