To implement Jag, we needed abstraction, encapsulation, and inheritance. Perhaps a similar package could be implemented in a more procedural language, but we do not know how. Abstraction enforces the collaboration of Jag's diverse classes. Encapsulation gives each Jag programmer a maximum of independence when implementing a class. Finally, inheritance permits a programmer to implement and maintain the bare minimum of code.