Как на языке программирования выразить взаимоотношение между Office Open XML документом и XML документом? Наследовать нельзя, нарушается LSP. На C++ можно использовать следующее:
PS. Если кому-нибудь вспомнилось про квадрат и прямоугольник, то пожалуйста, не переводите на них разговор. Дело в том, что от квадрата с прямоугольником многие объектно-ориентированные программисты привыкли отмахиваться как от надуманной проблемы.
Здравствуйте, igna, Вы писали:
I>Как на языке программирования выразить взаимоотношение между Office Open XML документом и XML документом? Наследовать нельзя, нарушается LSP. На C++ можно использовать следующее:
Здравствуйте, gandjustas, Вы писали:
G>А какие операции планируется делать с таким классом? Без этого непонятно почему нарушается LSP (имхо вообще не нарушается).
Ну если допустить неявное преобразование OfficeOpenXmlDocument к неконстантному XmlDocument, то можно вставить туда что-нибудь неразрешенное в OfficeOpenXmlDocument.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, gandjustas, Вы писали:
G>>А какие операции планируется делать с таким классом? Без этого непонятно почему нарушается LSP (имхо вообще не нарушается).
I>Ну если допустить неявное преобразование OfficeOpenXmlDocument к неконстантному XmlDocument, то можно вставить туда что-нибудь неразрешенное в OfficeOpenXmlDocument.
А если сделать XmlDocument снабженный схемой и возможность проверки, что после вставки все будет хорошо, то OfficeOpenXmlDocument будет частным случаем XmlDocument со схемой. Но придется делать регулярные проверки по схеме. Хорошо это или плохо? Зависит от задачи.
Зря ты отмахнулся от задачи квадрата и прямоугольника. Она же как раз наглядно демонстрирует, что в зависимости от операций совершаемых над фигурам (которые, в свою очередь, диктуются решаемой задачей), правильным может быть как одно наследование, так и другое.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, gandjustas, Вы писали:
G>>А какие операции планируется делать с таким классом? Без этого непонятно почему нарушается LSP (имхо вообще не нарушается).
I>Ну если допустить неявное преобразование OfficeOpenXmlDocument к неконстантному XmlDocument, то можно вставить туда что-нибудь неразрешенное в OfficeOpenXmlDocument.
Теоретизировать можно до бесконечности, но все равно сначала нужен публичный контракт классов, чтобы потом можно было говорить об их отношениях.
Здравствуйте, gandjustas, Вы писали:
G>Теоретизировать можно до бесконечности, но все равно сначала нужен публичный контракт классов, чтобы потом можно было говорить об их отношениях.
Ну возьми публичный контракт XmlDocument из .NET. Можно отнаследовать от него OfficeOpenXmlDocument?
Здравствуйте, fmiracle, Вы писали:
F>Зря ты отмахнулся от задачи квадрата и прямоугольника. Она же как раз наглядно демонстрирует, что в зависимости от операций совершаемых над фигурам (которые, в свою очередь, диктуются решаемой задачей), правильным может быть как одно наследование, так и другое.
В случае изменяемых фигур не может. Кроме того, в каком это случае наследование прямоугольника от квадрата не нарушает LSP?
Здравствуйте, igna, Вы писали:
I>Здравствуйте, gandjustas, Вы писали:
G>>Теоретизировать можно до бесконечности, но все равно сначала нужен публичный контракт классов, чтобы потом можно было говорить об их отношениях.
I>Ну возьми публичный контракт XmlDocument из .NET. Можно отнаследовать от него OfficeOpenXmlDocument?
Мне незачем
Контракт должен соответствовать твоим задачам. Опиши какие задачи решают твои классы и тебе все таки подскажут что делать.
Здравствуйте, gandjustas, Вы писали:
G>Контракт должен соответствовать твоим задачам. Опиши какие задачи решают твои классы и тебе все таки подскажут что делать.
А это без разницы. Что бы не делал OfficeOpenXmlDocument, его нельзя без нарушения LSP унаследовать от XmlDocument из .NET
Здравствуйте, igna, Вы писали:
I>Здравствуйте, gandjustas, Вы писали:
G>>Контракт должен соответствовать твоим задачам. Опиши какие задачи решают твои классы и тебе все таки подскажут что делать.
I>А это без разницы. Что бы не делал OfficeOpenXmlDocument, его нельзя без нарушения LSP унаследовать от XmlDocument из .NET
Так может его и не нужно наследовать. Без публичного контракта обоих невозможно сказать какая между ними связь вообще.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, gandjustas, Вы писали:
G>>Контракт должен соответствовать твоим задачам. Опиши какие задачи решают твои классы и тебе все таки подскажут что делать.
I>А это без разницы. Что бы не делал OfficeOpenXmlDocument, его нельзя без нарушения LSP унаследовать от XmlDocument из .NET
Кстати чтобы говорить об LSP надо знать этот самый контракт. Иначе все можно
public class OfficeOpenXmlDocument : XmlDocument
{
//а тут ничего нет
}
Здравствуйте, gandjustas, Вы писали:
G>Так может его и не нужно наследовать. Без публичного контракта обоих невозможно сказать какая между ними связь вообще.
Конечно не нужно. Я спрашивал, как выразить взаимоотношение между Office Open XML документом и XML документом. Показал как это сделать на C++, спросил как сделать на других языках. Поскольку не знаю, как это сделать на отчасти известных мне C# и Java. Похоже никак.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, gandjustas, Вы писали:
G>>Так может его и не нужно наследовать. Без публичного контракта обоих невозможно сказать какая между ними связь вообще.
I>Конечно не нужно. Я спрашивал, как выразить взаимоотношение между Office Open XML документом и XML документом. Показал как это сделать на C++, спросил как сделать на других языках. Поскольку не знаю, как это сделать на отчасти известных мне C# и Java. Похоже никак.
Еще раз. Не существует такого взаимоотношения.
Это еще при моделировании каких-то физических объектов взаимоотношения могут возникать из постановки задачи, а в таких классах только при проектировании.
Здравствуйте, gandjustas, Вы писали:
G>Еще раз. Не существует такого взаимоотношения. G>Это еще при моделировании каких-то физических объектов взаимоотношения могут возникать из постановки задачи, а в таких классах только при проектировании.
Еще раз. Того, что я показал на примере на C++, на C# и Java сделать нельзя.
Здравствуйте, igna, Вы писали:
I>Здравствуйте, gandjustas, Вы писали:
G>>Еще раз. Не существует такого взаимоотношения. G>>Это еще при моделировании каких-то физических объектов взаимоотношения могут возникать из постановки задачи, а в таких классах только при проектировании.
I>Еще раз. Того, что я показал на примере на C++, на C# и Java сделать нельзя.
Без знания зачем это делать смысл обсуждения пропадает. Если задачу опишешь — тебе сразу решение набросают на любом языке.
ЗЫ. Для .NET существует довольно мощная библиотека OpenXML SDK, можешь там посмотреть как оно делается.
Здравствуйте, igna, Вы писали:
F>>Зря ты отмахнулся от задачи квадрата и прямоугольника. Она же как раз наглядно демонстрирует, что в зависимости от операций совершаемых над фигурам (которые, в свою очередь, диктуются решаемой задачей), правильным может быть как одно наследование, так и другое.
I>В случае изменяемых фигур не может. Кроме того, в каком это случае наследование прямоугольника от квадрата не нарушает LSP?
А кто говорил про изменяемые фигуры? Изменяемые фиругы или неизменяемые — это уже часть описания доступных для них операций.
И я про то и говорю — сперва надо определиться с возможными операциями над объектами, потом уже их классифицировать (и в частности — строить иерархии наследования).
Здравствуйте, fmiracle, Вы писали:
F>А кто говорил про изменяемые фигуры? Изменяемые фиругы или неизменяемые — это уже часть описания доступных для них операций. F>И я про то и говорю — сперва надо определиться с возможными операциями над объектами, потом уже их классифицировать (и в частности — строить иерархии наследования).
А ответ на второй вопрос? В каком случае наследование прямоугольника от квадрата не нарушает LSP?