Dear Marina and Tim,
I could be wrong about my assumption as it's how I perceive things at the moment from a functional design point of view.
I agree with Tim with the format_renderer_base still being abstract.
Understanding this from an OO / Java / C++ background perspective I would think that the theme would want to override certain functionality and a course format another. If you have the structure:
format_renderer_base -> format_renderer_course_format_overrides -> format_renderer_theme_overrides
Because the theme wants to override some of what the course format is doing then you would need a class for each course format you wanted to support unless PHP supports multiple inheritence (nasty).
But as I understand it with what Tim is saying you would have:
plugin_renderer_base -> core_course_commonbits_renderer(abstract) -> format_renderer_base(abstract) -> format_renderer_course_format_overrides
and
plugin_renderer_base -> core_course_commonbits_renderer(abstract) -> theme_renderer_base(abstract) -> theme_renderer_theme_overrides
Such that the theme and the course format can perform overrides. But what happens when there is a conflict? Should themes and course formats do the same thing or should there be a distinction in functionality of responsibility? Such that a theme does specific things and a course format does other specific things and never the twain shall meet.
Cheers,
Gareth