Note that, back in those days, C++ was only starting and had neither multiple inheritance nor templates, Java was not invented yet, and it was three years before the Booch's book was published.
DOL is interesting because since as early as 1989 it used two concepts which are popular today: The model driven architecture, and representing relations among classes in terms of associations -- as in UML diagrams. When you use DOL, your describe all relations among classes in a small block of code which is like a database schema. It automatically and tranparently inserts all the data structures into your source. DOL has no graphical display but by looking at the schema you can instantly see the interaction among classes.
Note the difference between associations and containers. Container are usually used as members of some classes, while associations is not a part of any class. Containers are inside a class, associations control the classes from the outside. You can see this on the typical example of hierarchical relation between the Department and its Employees:
// ------ style commonly used today --------
class Employee {
Department *myDept;
...
};
class Department {
Collection employees; // container is a class member
...
};
// example of use
Employee *e; Department *d;
d->employees.add(e);
e->myDept=d; // two statements are needed
// ------ using an association --------
OneToMany employees;
class Employee { ... };
class Department { ... }; // required members automat. inserted
// example of use
Employee *e; Department *d;
employees.add(d,e); // both operations in one statement
IMPORTANT: Associations are not replacing or eliminating existing containers, they only expand them into another dimension. For data structures that can be implemented as a single container, the corresponding association can be just a wrapper which provides a new interface.
DOL was purchased by over 500 companies and was successfully used in a variety of applications on four continents. There was not a single user who would report that his/her productivity and code quality did not improve.
Examples of applications:
Reported reasons for the productivity increase: