Как на языке программирования выразить взаимоотношение между Office Open XML документом и XML документом? Наследовать нельзя, нарушается LSP. На C++ можно использовать следующее:
class XmlDocument {};
class OfficeOpenXmlDocument {
XmlDocument xd_;
public:
operator XmlDocument const&() { return xd_; }
};
void f(XmlDocument const&);
void use_f(OfficeOpenXmlDocument& ooxd)
{
f(ooxd);
}
А как оно будет на других языках?
PS. Если кому-нибудь вспомнилось про квадрат и прямоугольник, то пожалуйста, не переводите на них разговор. Дело в том, что от квадрата с прямоугольником многие объектно-ориентированные программисты привыкли отмахиваться как от надуманной проблемы.