Software Development Consulting
Software Process Improvement · Design Patterns and Principles · Reuse
Training, Mentoring and Consulting Corporate America for over 16 years











NASA Vision2000 Object-Oriented Design Workshop

Every Wednesday at noon, from late 1997 through most of 1998, the NASA Hubble Space Telescope (HST) Command and Control System (CCS) software development group participated in a “brown-bag” workshop focusing on Object-Oriented Design issues. The attendees had diverse backgrounds ranging from recently graduated Computer Science students to hard-core VAX FORTRAN experts nearing retirement. All had received training in either Java or C++, but few had had any specific instruction on Object-Oriented Design.

Each week’s topic focused on specific issues and concerns confronting these developers as they worked to meet the very aggressive schedules and expectations demanded from management. The Microsoft PowerPoint® presentations on this page were developed to guide and focus these meetings.


The core topics of these workshops were: Reuse, Design Patterns, Principles, Frameworks and Component-based Design and Design Analysis.

The workshops represent part of the value delivered to NASA by Korson-McGregor, Inc. (formally Software Architects) to help “jump start” the CCS project and transition it from an initial structured approach to a true object-oriented effort. The success of this effort was hailed by Ken Lehtonen (NASA), the project manager, at the Third Annual Conference On Object Technology Centers (Comsoft), April 23-25, 1997. This paper explains the technical challenges, architecture and approach taken for this project.

You can find references and links (where available) at the bottom of this page.

This work was performed under contract NAS5-50000  for the NASA-Goddard Hubble Space Telescope Vision2000 Control Center System in Lanham, Maryland.

Weekly Presentations

1.     Designing for Reuse: Introduction the OOD approach and discussion of the key rules for enhancing flexibility and extensibility.

2.     Components and Frameworks: Introduction and comparison of Component vs. Framework-based Development.

3.     OO Architectures and Framework Design: Overview of standard architectures (Shaw), Client-Server, 3-tier). Commercial frameworks vs. Custom-built.

4.     Design Patterns and Flexible OO Design: Introduction to Design Patterns. The Template Method (GOF) and Objectifier (Zimmer) patterns. Combining Patterns.

5.     Some Patterns of Distributed Design: The Proxy and Façade patterns. Real-time cross network communications.

6.     Some Patterns for Implementing Associations, Part 1: The Relationship Objects, Relationship Attribute, Attribute Object, Collection Objects and Mutual Friends patterns (Noble).

7.     Some Patterns for Implementing Associations, Part 2: The Null Object (Wolf), Timed Relationship (Boyd) and Connected Group (Li) patterns.

8.     Patterns of Object Creation, Part 1: The Abstract Factory, Builder and Factory Method (GOF) patterns.

9.     Patterns of Object Creation, Part 2: The Prototype and Singleton (GOF) patterns.

10.  Patterns of Object Creation, Part 3: Singleton Revisited. Multiple instances, to kill a singleton (Vlissides) and double-checked locking (Schmidt).

11.  Patterns for Adaptable Designs: The Adapter and Bridge (GOF) patterns.

12.  Patterns for Flexible Delegation of Responsibility: The Strategy, State and Command (GOF) patterns.

13.  Down casting, Part 1: The Liskov Substitution Principle (LSP) (Liskov)

14.  Down casting, Part 2: Dual Inheritance Hierarchies (Martin)

15.  Down casting, Part 3: Traversing Complex Structures. The Iterator and Visitor (GOF) Patterns.

16.  Down casting, Part 4: Reducing Risk and Simulating RTTI. The NamedObject, IsKindOf, CastingMethod (Meyers) and RTTI Visitor (Martin) Patterns.

17.  Some Principles and Heuristics of Good Design: What makes design bad? Design by Contract. The Open/Closed, LSP, Dependency Inversion, Narrow Inheritance Interface, Common Reuse and Law of Demeter (Lieberherr) principles, and related heuristics.

18.  Metapatterns and Hot Spots of Flexibility: Designing flexible frameworks. Structural design analysis. The seven Metapatterns (Pree).

19.  An Analysis of Some Patterns of Recursive Design: Design analysis using Metapatterns and Principles. The Chain of Responsibility, Decorator and Composite (GOF) patterns.

20.  Generating Designs with Patterns: Case studies of applying Design Patterns to solve difficult design issues with four examples.

Some References and Links

o     Boyd: “Patterns of Event Objects in Large Scale Business Systems”, Lorraine L. Boyd, EuroPLoP-96 Writer's Workshop 1 Papers

o     GOF: Design Patterns: Elements of Reusable Object-Oriented Software, Gamma, Helm, Johnson and Vlissides

o     Lehtonen: “A Small, Highly-Integrated OTC Infrastructure for Re-engineering the Hubble Space Telescope (HST) Control Center System (CCS)”, Lehtonen, Barrett, Rice and Van Camp, The Third Annual Conference On Object Technology Centers, April 23-25, 1997

o     Li: “Connected Group”, Jiarong Li, EuroPLoP-96 Writer's Workshop 3 Papers

o     Lieberherr: "Assuring Good Style for Object-Oriented Programs", Karl J. Lieberherr and Ian Holland, IEEE-software, September 1989, p 38-48

o     Liskov: "A Behavioral Notion of Subtyping", Barbara Liskov and Jeanette Wing, ACM Transactions on Programming Languages and Systems, Volume 16, No 6, November, 1994, pages 1811-1841

o     Martin: “Design Patterns for Dealing with Dual Inheritance Hierarchies in C++”, “The Open-Closed Principle”, “The Liskov Substitution Principle”, “The Dependency Inversion Principle”, “Granularity” and many other papers, Robert C. Martin. (available at Object Mentor, Inc.)

o     Meyers: More Effective C++, Scott Meyers, Addison-Wesley, 1996

o     Noble: “Some Patterns for Implementing Relationships”, James Noble, MRI, School of MPCE, Macquarie, University, Sydney

o     Pree:  Design Patterns for Object-Oriented Software Development, Wolfgang Pree, Addison-Wesley, MA, 1995

o     Schmidt: “Double-Checked Locking -- An Optimization Pattern for Efficiently Initializing and Accessing Thread-safe Objects.,” Douglas C. Schmidt, . PLoP ’96 Final Papers

o     Shaw: “An Introduction to Software Architecture”, David Garlan and Mary Shaw, School of Computer Science, Carnegie Mellon University, Technical Report CMU-CS-94-166, Pittsburgh, PA, January 1994.

o     VanCamp: “Reusing the Wheel”, “PacketHandler: An Object-Oriented Framework for Satellite Telemetry Processing”, David Van Camp,

o     Vlissides: “To Kill A Singleton,” John Vlissides, C++ Report, June 1996

o     Wolf: “The Null Object Pattern”, Bobby Wolf,. PLoP ’96 Final Papers

o     Weinad:, “Design and implementation of ET++, a seamless object-oriented application framework.”, Weinad A., Gamma E. and Marty R , Structured Programming, 10(2), Springer Verlag, 1989

o     Zimmer: “Relationships between Design Patterns,” W. Zimmer, Pattern Languages of Program Design(Vol. 1),