Duration: 2 days
Recommended Class Size: 10 to 20 
Prerequisites: Basic to Advanced OOP understanding

Frameworks are reusable designs for an application or a subsystem expressed as a set of classes and the way that instances of these classes collaborate. A framework describes not only how to partition the responsibilities of a system among its components, but also how to think about a problem. It is therefore not only a way to reuse code, but a way to reuse design and analysis information, as well. 

Frameworks are difficult to design because they are abstract. Framework designers must look at many concrete applications to ensure that the abstractions that they are designing make sense. Frameworks are difficult to learn because the user of a framework must adopt the collaborative model of the framework. It is usually not possible to learn a framework one class at a time, but instead several classes have to be learned together. Nevertheless, there is a great advantage to learning a well-designed framework, and mature frameworks (like some of the user interface frameworks) can provide order of magnitude increases in programmer productivity. 

 

Course Objectives

  • Describes what frameworks are, how to use them, and their importance
  • Teaches how to design and document frameworks
  • Shows how patterns can make the design process more efficient
  • Discuss the evolutionary process of frameworks
  • Discuss the Do’s and Don’ts of framework development

 

 
This course teaches how to design frameworks. It describes what they are, describes an example-driven iterative development process for designing them, and describes a set of object-oriented design patterns and a set of transformations for applying the design patterns. The design patterns and the set of transformations (refactorings) are useful for making any object-oriented design more flexible and reusable, but they are essential in framework design. The tutorial also describes how to document a framework, and it covers a little bit of topics like testing, scheduling. and performance tuning. 
 
We've worked on several different frameworks, and the examples used depend partly on our audience, though we always use several frameworks as examples. Our examples include technical computer science topics like code generation, file systems, and virtual memory, more general interest topics like structured drawing editors and user interface systems, and one application area: a framework for accounting.