On to some analysis examples
This is meant to be a C++ course, not a tutorial how to use any particular Phenix analysis framework. I want show that we can achieve a lot of flexibility in our code by using a well-designed object model. We saw that we achieved polymorphism through inheritance and associations, and that we used two design patterns (the factory and the singleton pattern).
The point that I want to drive home is the following: The core designers and programmers still have a lot of work making all the class libraries (it is not more difficult than in the Fortran days, though). But for the end user of the class libraries the job becomes a lot easier because of the “service provider” concept we introduced in the beginning. Where you were exposed to a lot of the “mechanics” of the software before, you can now just request services and a lot of the internal stuff is hidden from you. You can better concentrate on the problem at hand.
Now it comes down to actually see what services can be provided by a certain object, rather than understanding what in which order has to be called in order to accomplish a given task.