In general, in object-oriented programming, a class is an abstract definition of both (1.) data types and (2.) actions that can be performed on that data. The latter are commonly known as object methods.

While classes only describe an object type in an abstract way, the objects that really exist in a program are called instances of a certain class.

Take a WPS program object, for example: every program object is an instance of the class WPProgram, defined by the WPS. The (1.) data of the program object would be, among others, the executable associated with it (e.g. "CMD.EXE"), while (2.) methods (that could be performed on this data) would be starting the executable (by double-clicking or choosing the "Open" menu item) or changing the executable in the settings notebook. While you cannot "see" methods from the user interface, methods are used all the time internally every time the WPS is doing something. If you're familiar with that term, methods can vaguely be described as an Application Programmer's Interface (API) to an object. If you know how to program REXX: every time you use one of those object setup strings to modify an object's data, you're actually calling a method upon an object.

Since methods are defined for each class, the methods that you can call on an object depend on the class of the object. I have not counted them, but already WPObject, the most basic WPS class, defines more than 100 methods.

What makes object-oriented programming so flexible (and popular) is that you can define relationships between classes. In order to understand this, the following two concepts are helpful:

While inheritance and polymorphism are concepts common to every object-oriented programming environment (and also to object-oriented languages, such as C++), the Workplace Shell is even able to provide their advantages across several applications. The WPS consists of many DLLs which are in part independent of each other, and programmer's outside of IBM can extend the WPS using these features without even having the WPS's source code, which is not possible with "normal" object-oriented languages.

This only works because the WPS uses IBM's own System Object Model (SOM), a complex system which provides object-oriented programming interfaces even across several code modules, and even independent of the programming language. SOM is so powerful because classes are instantiated and maintained at run-time instead of compilation time.

This is, by the way, where the WPS class list comes in: when the WPS is booting up, it creates all the classes (which, in SOM, are objects too, but this is a complex issue), and establishes the relationships between them only at this point. Only because of this is it possible to modify classes without IBM, who created the originals, even knowing about it.

Just as a short personal opinion, this is still something that makes &os2; unique in today's computer world. While most of its other advantages over other operating systems, such as its reliable multitasking, are not that unique any more (e.g. Linux is pretty good at that, too), the user interface is still not reached by any operating system that I know. Especially not Windows 95.