Office Open XML документ и XML документ
От: igna Россия  
Дата: 11.08.10 05:53
Оценка:
Как на языке программирования выразить взаимоотношение между 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. Если кому-нибудь вспомнилось про квадрат и прямоугольник, то пожалуйста, не переводите на них разговор. Дело в том, что от квадрата с прямоугольником многие объектно-ориентированные программисты привыкли отмахиваться как от надуманной проблемы.
Re: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.08.10 07:54
Оценка: +1
Здравствуйте, igna, Вы писали:

I>Как на языке программирования выразить взаимоотношение между Office Open XML документом и XML документом? Наследовать нельзя, нарушается LSP. На C++ можно использовать следующее:



I>
I>class XmlDocument {};

I>class OfficeOpenXmlDocument {
I>    XmlDocument xd_;
I>public:
I>    operator XmlDocument const&() { return xd_; }
I>};

I>void f(XmlDocument const&);

I>void use_f(OfficeOpenXmlDocument& ooxd)
I>{
I>    f(ooxd);
I>}

I>


А какие операции планируется делать с таким классом? Без этого непонятно почему нарушается LSP (имхо вообще не нарушается).
Re[2]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 11.08.10 09:33
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А какие операции планируется делать с таким классом? Без этого непонятно почему нарушается LSP (имхо вообще не нарушается).


Ну если допустить неявное преобразование OfficeOpenXmlDocument к неконстантному XmlDocument, то можно вставить туда что-нибудь неразрешенное в OfficeOpenXmlDocument.
Re[3]: Office Open XML документ и XML документ
От: fmiracle  
Дата: 11.08.10 09:41
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, gandjustas, Вы писали:


G>>А какие операции планируется делать с таким классом? Без этого непонятно почему нарушается LSP (имхо вообще не нарушается).


I>Ну если допустить неявное преобразование OfficeOpenXmlDocument к неконстантному XmlDocument, то можно вставить туда что-нибудь неразрешенное в OfficeOpenXmlDocument.


А если сделать XmlDocument снабженный схемой и возможность проверки, что после вставки все будет хорошо, то OfficeOpenXmlDocument будет частным случаем XmlDocument со схемой. Но придется делать регулярные проверки по схеме. Хорошо это или плохо? Зависит от задачи.

Зря ты отмахнулся от задачи квадрата и прямоугольника. Она же как раз наглядно демонстрирует, что в зависимости от операций совершаемых над фигурам (которые, в свою очередь, диктуются решаемой задачей), правильным может быть как одно наследование, так и другое.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[3]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.08.10 09:49
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, gandjustas, Вы писали:


G>>А какие операции планируется делать с таким классом? Без этого непонятно почему нарушается LSP (имхо вообще не нарушается).


I>Ну если допустить неявное преобразование OfficeOpenXmlDocument к неконстантному XmlDocument, то можно вставить туда что-нибудь неразрешенное в OfficeOpenXmlDocument.


Теоретизировать можно до бесконечности, но все равно сначала нужен публичный контракт классов, чтобы потом можно было говорить об их отношениях.
Re[4]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 11.08.10 10:08
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Теоретизировать можно до бесконечности, но все равно сначала нужен публичный контракт классов, чтобы потом можно было говорить об их отношениях.


Ну возьми публичный контракт XmlDocument из .NET. Можно отнаследовать от него OfficeOpenXmlDocument?
Re[4]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 11.08.10 10:10
Оценка:
Здравствуйте, fmiracle, Вы писали:

F>Зря ты отмахнулся от задачи квадрата и прямоугольника. Она же как раз наглядно демонстрирует, что в зависимости от операций совершаемых над фигурам (которые, в свою очередь, диктуются решаемой задачей), правильным может быть как одно наследование, так и другое.


В случае изменяемых фигур не может. Кроме того, в каком это случае наследование прямоугольника от квадрата не нарушает LSP?
Re[5]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.08.10 10:12
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, gandjustas, Вы писали:


G>>Теоретизировать можно до бесконечности, но все равно сначала нужен публичный контракт классов, чтобы потом можно было говорить об их отношениях.


I>Ну возьми публичный контракт XmlDocument из .NET. Можно отнаследовать от него OfficeOpenXmlDocument?


Мне незачем

Контракт должен соответствовать твоим задачам. Опиши какие задачи решают твои классы и тебе все таки подскажут что делать.
Re[6]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 11.08.10 10:18
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Контракт должен соответствовать твоим задачам. Опиши какие задачи решают твои классы и тебе все таки подскажут что делать.


А это без разницы. Что бы не делал OfficeOpenXmlDocument, его нельзя без нарушения LSP унаследовать от XmlDocument из .NET
Re[7]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.08.10 10:29
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, gandjustas, Вы писали:


G>>Контракт должен соответствовать твоим задачам. Опиши какие задачи решают твои классы и тебе все таки подскажут что делать.


I>А это без разницы. Что бы не делал OfficeOpenXmlDocument, его нельзя без нарушения LSP унаследовать от XmlDocument из .NET


Так может его и не нужно наследовать. Без публичного контракта обоих невозможно сказать какая между ними связь вообще.
Re[7]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.08.10 10:30
Оценка: +1
Здравствуйте, igna, Вы писали:

I>Здравствуйте, gandjustas, Вы писали:


G>>Контракт должен соответствовать твоим задачам. Опиши какие задачи решают твои классы и тебе все таки подскажут что делать.


I>А это без разницы. Что бы не делал OfficeOpenXmlDocument, его нельзя без нарушения LSP унаследовать от XmlDocument из .NET


Кстати чтобы говорить об LSP надо знать этот самый контракт. Иначе все можно

public class OfficeOpenXmlDocument : XmlDocument
{
  //а тут ничего нет
}


И ничего не нарушено.
Re[8]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 11.08.10 10:35
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Так может его и не нужно наследовать. Без публичного контракта обоих невозможно сказать какая между ними связь вообще.


Конечно не нужно. Я спрашивал, как выразить взаимоотношение между Office Open XML документом и XML документом. Показал как это сделать на C++, спросил как сделать на других языках. Поскольку не знаю, как это сделать на отчасти известных мне C# и Java. Похоже никак.
Re[8]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 11.08.10 10:37
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>public class OfficeOpenXmlDocument : XmlDocument
G>{
G>  //а тут ничего нет
G>}


А имя класса ты в контракт не включаешь?
Re[9]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.08.10 10:44
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, gandjustas, Вы писали:


G>>Так может его и не нужно наследовать. Без публичного контракта обоих невозможно сказать какая между ними связь вообще.


I>Конечно не нужно. Я спрашивал, как выразить взаимоотношение между Office Open XML документом и XML документом. Показал как это сделать на C++, спросил как сделать на других языках. Поскольку не знаю, как это сделать на отчасти известных мне C# и Java. Похоже никак.


Еще раз. Не существует такого взаимоотношения.
Это еще при моделировании каких-то физических объектов взаимоотношения могут возникать из постановки задачи, а в таких классах только при проектировании.
Re[9]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.08.10 10:45
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, gandjustas, Вы писали:


I>
G>>public class OfficeOpenXmlDocument : XmlDocument
G>>{
G>>  //а тут ничего нет
G>>}
I>


I>А имя класса ты в контракт не включаешь?


Нет.
Re[10]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 11.08.10 10:55
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Еще раз. Не существует такого взаимоотношения.

G>Это еще при моделировании каких-то физических объектов взаимоотношения могут возникать из постановки задачи, а в таких классах только при проектировании.

Еще раз. Того, что я показал на примере на C++, на C# и Java сделать нельзя.
Re[11]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.08.10 11:04
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, gandjustas, Вы писали:


G>>Еще раз. Не существует такого взаимоотношения.

G>>Это еще при моделировании каких-то физических объектов взаимоотношения могут возникать из постановки задачи, а в таких классах только при проектировании.

I>Еще раз. Того, что я показал на примере на C++, на C# и Java сделать нельзя.


Без знания зачем это делать смысл обсуждения пропадает. Если задачу опишешь — тебе сразу решение набросают на любом языке.

ЗЫ. Для .NET существует довольно мощная библиотека OpenXML SDK, можешь там посмотреть как оно делается.
Re[5]: Office Open XML документ и XML документ
От: fmiracle  
Дата: 11.08.10 11:19
Оценка:
Здравствуйте, igna, Вы писали:

F>>Зря ты отмахнулся от задачи квадрата и прямоугольника. Она же как раз наглядно демонстрирует, что в зависимости от операций совершаемых над фигурам (которые, в свою очередь, диктуются решаемой задачей), правильным может быть как одно наследование, так и другое.


I>В случае изменяемых фигур не может. Кроме того, в каком это случае наследование прямоугольника от квадрата не нарушает LSP?


А кто говорил про изменяемые фигуры? Изменяемые фиругы или неизменяемые — это уже часть описания доступных для них операций.
И я про то и говорю — сперва надо определиться с возможными операциями над объектами, потом уже их классифицировать (и в частности — строить иерархии наследования).
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[6]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 11.08.10 12:41
Оценка:
Здравствуйте, fmiracle, Вы писали:

F>А кто говорил про изменяемые фигуры? Изменяемые фиругы или неизменяемые — это уже часть описания доступных для них операций.

F>И я про то и говорю — сперва надо определиться с возможными операциями над объектами, потом уже их классифицировать (и в частности — строить иерархии наследования).

А ответ на второй вопрос? В каком случае наследование прямоугольника от квадрата не нарушает LSP?
Re[12]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 11.08.10 13:19
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>ЗЫ. Для .NET существует довольно мощная библиотека OpenXML SDK, можешь там посмотреть как оно делается.


Посмотрел. Просто способа использовать, к примеру, WordprocessingDocument как read-only XmlDocument не нашел. Похоже его вообще нет.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.