CONTENTS Title Page Copyright Page Preface Caution 1 Overview 1.1 Object-Oriented Features of Trellis 1.1.1 Objects and Types 1.1.2 Subtyping and Inheritance 1.1.3 Abstract Types 1.1.4 Benefits of Object-Oriented Features of Trellis 1.1.5 Type-Checking 1.2 Programming Language 1.2.1 Language Features 1.2.2 Program Structure 1.2.3 Subtype Compatibility 1.3 Programming Tools 1.3.1 Browsing Tools 1.3.2 Code Development Tools 1.3.3 Debugging Tools 1.3.4 Environment Tools 1.4 Programming Environment 1.4.1 Information 1.4.2 Workspaces 1.4.3 Incremental Compiler 1.4.4 Storage Management 1.4.5 Persistent Objects 1.5 DECwindows Interface 1.6 Type Library 1.6.1 Type Categories 1.7 Integration with Other Programming Languages 1.8 SQL Facility 1.9 Activity Facility 2 Comparing Trellis to Conventional Programming Approaches 2.1 Conceptual Differences 2.2 Design Differences 2.3 Programming Process Differences 2.3.1 Traditional Programming Process 2.3.2 Trellis Programming Process 3 Invoking Trellis 4 Trellis Design Concepts 4.1 Creating Types 4.1.1 Modeling Processes in the Application Domain 4.1.2 Modeling Intangible Entities 4.2 Determining Placement of Functionality 4.2.1 Reusability 4.2.2 Complexity 4.2.3 Applicability 4.2.4 Dependence on Implementation Knowledge 4.2.5 Applying Criteria for Placing Functionality 4.3 Uses of Type Hierarchies 4.3.1 Specialization Hierarchy 4.3.2 Implementation Hierarchy 4.3.3 Combination Hierarchy 4.4 Nonstandard Uses of Type Hierarchies 4.4.1 Generalization 4.4.2 Variance 4.5 Extended Example 4.5.1 Designing an Inspector Facility 4.5.2 Placing Inspector Functionality 4.5.3 Describing How Inspectors Are Associated with Objects 4.5.4 Considering the Inspector Type Hierarchy 5 Overview of the Development Process 5.1 Designing a Program 5.2 Coding a Program 5.3 Testing and Debugging a Program 5.4 Running and Creating a Command for a Program 5.4.1 Creating a Workspace for a Program 5.4.2 Creating a Command for a Program 5.5 Additional Development Tasks Glossary of Trellis Terms abstract type . . . Callout client . . . fixed name garbage collection . . . multiple inheritance mutable . . . selector_value single inheritance . . . type definition type hierarchy . . . workspace FIGURES 1-1 A Simple Type Hierarchy 2-1 Traditional Programming Process 2-2 Trellis Programming Process 3-1 Trellis Toolbox 3-2 Trellis Icon 4-1 Input_device Hierarchy 4-2 Hierarchy Showing Multiple Supertypes 4-3 Incorrect Use of Multiple Inheritance 4-4 Subtyping for Generalization 4-5 Subtyping for Variance 4-6 Removing Subtyping for Variance by Factoring Out Behavior 4-7 Final Inspector Hierarchy Design TABLES 1-1 Browsing Tools 1-2 Code Development Tools 1-3 Debugging Tools 1-4 Environment Tools