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