Имеется абстрактный класс Document, его необходимо отобразить в виде некой абстрактной формы, скажем, DocumentForm. Document имеет два конкретных воплощения — входящий документ (InDocument) и исходящий документ (OutDocument). Отображаться необходимо на InDocumentForm и OutDocumentForm, соответственно.
Насколько я понял, идея отрыва абстракции от реализации заключается в том числе и в том, что про связь между ними знает только абстракция (причем "абстрактная" абстракция, т.е. базовый класс). Потомки же используют декларированные методы в базовом классе для доступа к фактической реализации (т.е. сами они про реализацию не в курсе).
Если предыдущий абзац не заблуждение, возникает следующий вопрос.
Допустим, я трактую как абстракцию — DocumentForm, а в качестве "утонченной" абстракции — InDocumentForm, реализация — Document, конкретная реализация — InDocument.
Как мне быть с тем, что InDocument имеет дополнительные поля, соответственно методы для доступа к ним, которых нет в Document? (Либо DocumentForm, либо InDocumentForm должен знать про InDocument)
Помогите разобраться, целесообразно ли использовать в данном случае шаблон мост? И как следует поступать если наследники не только конкретизируют базовый класс но и расширяют его функциональность (дело попахивает dynamic_cast<>)