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