### Introduction to the Open Class Library

This introduction to the Open Class Library lists the frameworks and libraries included in this release; it specifies the navigation route to the Open Class Library documentation and describes graphics conventions. This documentation assumes that you are proficient with both the C++ programming language, and with object-oriented programming concepts and techniques.

#### Frameworks and Classes

To assist you in learning about the classes and to guide you as you start developing portable applications, we have organized the classes and frameworks into the following basic categories:

- Application Control
- Collections
- Error Handling and Testing
- Graphics
- Math
- Multimedia
- Streams and Storage
- Text and Internationalization
- User Interface

Here is a brief summary of the contents of each of these categories:

- The Application Control classes provide support for multi-threaded execution environments.
  - Processes classes support the creation and manipulation of processes.
  - Threads classes support the creation and manipulation of threads.
  - Reference Counting classes manage thread-safe access to multiply referenced objects.
  - Notification classes support notifying interested objects of changes in other objects.

- The Collection Classes provide a set of commonly used abstract data types used to build collections. Collections can have properties such as sorted or unsorted; ordered or unordered; unique-element or multiple-element.

- The Error Handling and Testing classes provide support for building robust and well-behaved applications.
  - Test Framework creates and runs unit tests in the Open Class environment.
  - Exceptions classes provide support for detecting and conveying information about unusual circumstances in applications.

- The 2D Graphics Framework supports the platform-independent creation, manipulation, and rendering of 2D graphic objects based on patented mathematical algorithms. The framework includes these class groups:
  - Geometry classes define forms for path, area, and image geometries.
  - Attributes describe graphic characteristics such as paint, pen and joints, that let you create groups of attributes to apply to graphic objects when rendering them.
  - Transformations let you apply mathematical transformations such as scaling, rotating, and translating to 2D graphic objects.
  - Modeling classes combine geometry objects with attributes and transforms for rendering and storing graphics and creating hierarchies of graphics.
  - Rendering pipeline classes implement the rendering of 2D graphic objects.

- The Math classes define objects, operators and syntax which create, manipulate, and translate values set into short, int, long, float, double, complex, and scientific formats and provide support for binary coded decimal format. These classes will be deprecated in favor of the new STL Class Numerics library in a future release.

- The Multimedia classes support the creation of applications that integrate text and graphics with a combination of audio, motion video, images, and animation. Using the multimedia classes and the window control classes, you can implement an interface for your application that looks like the controls of common electronic devices, such as stereo components and video cassette recorders (VCRs). Your application can use these controls as interfaces to control audio and video media that is presented to the user. Support for media devices is abstracted into classes that contain the data and functions essential for the operation of the real-world devices that they model. This framework includes these device classes groups from which you can directly instantiate device objects:
  - An audio amplifier-mixer class
  - A CD audio player class
  - A CD Extended-Architecture player class
  - A Digital video player class
  - A Master audio class
  - a MIDI sequencer class
  - A Waveform audio player class

- The Streams and Storage classes implement persistent storage mechanisms for Open Class components, and includes:
  - Streaming classes that support streaming data in C++ objects in and out of persistent storage.
  - The IOStreams Classes create and manage predefined and user-defined streams objects, which transfer data among files, buffers and peripherals. These classes will be deprecated in favor of the new STL Class library in a future release
  - File System classes, which provide portable abstractions that allow you to manipulate physical file system entities such as volumes, directories, and files.

- The Text and International Frameworks provide support for Unicode text strings and for building easily localizable components. These frameworks include the following components:
  - The Unicode support classes, which support inquiries about the stylistic and symantic properties of characters, character sets, and scripts (writing systems).
  - The Text display classes support user editing, and display and storage of text.
  - The International frameworks support the creation of international applications and manipulation of international text, including language-sensitive comparison of text strings, conversion between character sets, and a locale mechanism for access to portable and host-specific resources.

- The User Interface classes provide support for building the graphical user interface of an application.
  - Base Window, Menu, Handler, and Event classes provide support for the basic windows, handlers, events, and menus used by the applications you develop. These classes encapsulate the basic graphical building blocks that are used to construct application windows. This encapsulation allows window position and appearance (windows and menus) to be separated from event-handling (handlers and events).
  - Standard Control Classes provide support for the standard controls such as entry field, static text, and buttons used by the applications you develop.
  - Advanced Control, Dialog, and Handlers Classes provide support for the advanced controls such as container, notebook, tool bar, and the font and file dialogs used by the applications you develop.
  - Direct Manipulation Classes provide support for the direct manipulation used by the applications you develop.