.. index::
   single: Object Oriented Suite Design (tutorial)

.. _tutorial-object-oriented-suite-design:

Object Oriented Suites
----------------------

Python's object oriented design features allows considerable flexibility 
in how we design and structure our :term:`suite definition`.

Each suite will have a different set of forces which determine how it should
be designed. 

Lets consider how we would design the tutorial examples in a more object oriented manner. 
We start with some design criteria we must meet.

* The default variables (ECF_HOME,etc) must be configurable and independent of the suites
* New suites must enable automatic job creation checking 
* We need to write out definition as a separate file
* New suites should be able to re-use the "boiler plate" code defined by the above requirements

Here is possible design, that uses inheritance and the template design pattern:

.. literalinclude:: ../src/object-oriented-suites.py
   :language: python
