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

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


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


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


Значит без надобности.

Приведи конкретную задачу, которую тебе решить надо.
Re[7]: Office Open XML документ и XML документ
От: Roman Odaisky Украина  
Дата: 11.08.10 13:32
Оценка:
Здравствуйте, igna, Вы писали:

I>В каком случае наследование прямоугольника от квадрата не нарушает LSP?


Ни в каком, а вот квадрат вполне может наследоваться от прямоугольника, если весь интерфейс — get_width, get_height и (только для квадрата) get_side.
До последнего не верил в пирамиду Лебедева.
Re[7]: Office Open XML документ и XML документ
От: fmiracle  
Дата: 11.08.10 13:45
Оценка:
Здравствуйте, igna, Вы писали:

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

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

I>А ответ на второй вопрос? В каком случае наследование прямоугольника от квадрата не нарушает LSP?


Самый простой — неизменные фигуры.
Или частично неизменные — ну нет у них SetWidth/SetHeight и проблема решена в корне, зато цвет и местоположение менять можно.
А кто сказал что по в любой задаче работющей с квадратами и прямоугольниками им объязательно требуется менять ширину и высоту?
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Re[2]: Office Open XML документ и XML документ
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 11.08.10 13:46
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


Проще говоря, для OpenOfficeXmlDocument, должны быть доступны все константные методы XmlDocument, которые не изменяют класс. Подразумевается, что Xml можно читать методами XmlDocument и дополнительными методами OpenOfficeXmlDocument, но модифицировать его можно только методами OpenOfficeXmlDocument (например, нельзя вставлять теги методами XmlDocument).

Если брать Рихтера, то

В некоторых языках, в том числе в неуправляемом C++, можно определять методы и параметры как константы, которые запрещают коду экземплярного метода менять какие-либо поля метода, или объекты, передаваемые в метод. CLR не поддерживает этой возможности, и многие программисты (igna, примечание мое) жаловали на ее отсутствие. Так как исполняемая среда не поддерживает этой функции, естественно, что она отсутствует во всех языках (в том числе в C#)

Re[3]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 11.08.10 14:03
Оценка:
Здравствуйте, Mystic, Вы писали:

M>

В некоторых языках, в том числе в неуправляемом C++, можно определять методы и параметры как константы, которые запрещают коду экземплярного метода менять какие-либо поля метода, или объекты, передаваемые в метод.


Честно говоря и в C++ все далеко не так замечательно. Мой пример позволяет преобразовывать OfficeOpenXmlDocument& в const XmlDocument&, но не OfficeOpenXmlDocument* в const XmlDocument*. И писанины больше чем следовало бы. А вот как было бы можно:

class XmlDocument {};

class OfficeOpenXmlDocument : public XmlDocument const {
    // . . .
};

void f(XmlDocument const&);

void use_f(OfficeOpenXmlDocument& ooxd)
{
    f(ooxd);
}
Re[4]: Office Open XML документ и XML документ
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 11.08.10 14:45
Оценка: 1 (1)
Здравствуйте, igna, Вы писали:

I>Честно говоря и в C++ все далеко не так замечательно. Мой пример позволяет преобразовывать OfficeOpenXmlDocument& в const XmlDocument&, но не OfficeOpenXmlDocument* в const XmlDocument*. И писанины больше чем следовало бы. А вот как было бы можно:


Это потому, что никто об этом не думал

Лично для меня деление на const и не const методы в некоторых местах напрягает. Главным образом тем, что решив выдерживать везде, где надо, const, я про это забываю и натыкаюсь на ошибки. Ошибки обычно многострочные, и копируются в текстовый редактор, где выравниваются оба типа и выясняется, чего же именно ему не нравится. Конечно, чаще это происходит с очепятками. Так что я не сильно страдаю по этом поводу.

Но а если так сильно надо, то просто на этапе проектирования разделить интерфейсы IXmlReader и IXmlBuilder. Соответственно, XmlDocument поддерживает оба интерфейса, а наш класс агрегирует XmlDocument но поддерживает только IXmlReader.
Re[13]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 12.08.10 06:20
Оценка:
Здравствуйте, igna, Вы писали:

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


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


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


Если что файл OOXML это zip-архив с xml и другими файлами (Parts) и связями между ними (Relations).
Поэтому сам WordprocessingDocument как XmlDocument представить нельзя в принципе. Зато можно у корневого элемента некоторого Part-а получить OuterXml и использовать его как захочется, в том числе сделать XmlDocument.

Что касается первого вопроса в теме. То никакой связи WordprocessingDocument и XmlDocument не существует, поэтому ничего не надо делать.
Re[8]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 12.08.10 06:22
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Ни в каком, а вот квадрат вполне может наследоваться от прямоугольника, если весь интерфейс — get_width, get_height и (только для квадрата) get_side.


Аналогично прямоугольник вполне может наследоваться от квадрата, если весь интерфейс — set_width, set_height и (только для квадрата) set_side.
Re[14]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 12.08.10 06:41
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Зато можно у корневого элемента некоторого Part-а получить OuterXml и использовать его как захочется, в том числе сделать XmlDocument.


То есть сначала преобразовать "корневой элемент некоторого Part-а" в строку, а затем создать XmlDocument распарсив эту строку.

G>Что касается первого вопроса в теме. То никакой связи WordprocessingDocument и XmlDocument не существует, поэтому ничего не надо делать.ocument и XmlDocument не существует, поэтому ничего не надо делать.


Хорошо, тогда как выразить связь "корневого элемента некоторого Part-а" и XmlDocument-а?
Re[15]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 12.08.10 07:06
Оценка:
Здравствуйте, igna, Вы писали:

G>>Что касается первого вопроса в теме. То никакой связи WordprocessingDocument и XmlDocument не существует, поэтому ничего не надо делать.ocument и XmlDocument не существует, поэтому ничего не надо делать.


I>Хорошо, тогда как выразить связь "корневого элемента некоторого Part-а" и XmlDocument-а?

Ты еще не понял? Этой связи просто нет.
Re[16]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 12.08.10 07:17
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

G>Ты еще не понял? Этой связи просто нет.


Ты еще не понял? Этой связи только в том смысле нет, что .NET не позволяет ее выразить.
Re[17]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 12.08.10 07:30
Оценка:
Здравствуйте, igna, Вы писали:

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


G>>Ты еще не понял? Этой связи просто нет.


I>Ты еще не понял? Этой связи только в том смысле нет, что .NET не позволяет ее выразить.

А причем тут .NET?

1)Контракты Part_ов ни какой частью не похожи на контракты XmlDocument, поэтому связей is-a быть не может.
2)Реализация Part_ов никак не использует XmlDocument, поэтому has-a и uses тоже отсутствуют.

Наличие какой-либо связи — только у тебя в голове, а переносить такое в код — верный путь к хреновому дизайну.
Совершенно независимо от языка.
Re[18]: Office Open XML документ и XML документ
От: igna Россия  
Дата: 12.08.10 07:46
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>1)Контракты Part_ов ни какой частью не похожи на контракты XmlDocument, поэтому связей is-a быть не может.

G>2)Реализация Part_ов никак не использует XmlDocument, поэтому has-a и uses тоже отсутствуют.

Хорошо, хрен с ними, с Part-ами, возьмем другой пример. Положим я использую библиотеку, в которой есть XmlDocument и хочу при его помощи реализовать MyXmlDocument. MyXmlDocument является read-only XmlDocument-ом, и C++ позволяет это выразить наличием оператора преобразования MyXmlDocument-а в XmlDocument const&, C# похоже никакой сравнимой возможности не имеет, только вот через строку и будешь преобразовывать, причем повторяя преобразование каждый раз при изменении документа.
Re[19]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 12.08.10 08:08
Оценка:
Здравствуйте, igna, Вы писали:

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


I>Положим я использую библиотеку, в которой есть XmlDocument и хочу при его помощи реализовать MyXmlDocument. MyXmlDocument является read-only XmlDocument-ом, и C++ позволяет это выразить наличием оператора преобразования MyXmlDocument-а в XmlDocument const&, C# похоже никакой сравнимой возможности не имеет, только вот через строку и будешь преобразовывать, причем повторяя преобразование каждый раз при изменении документа.

Ну во-первых const легко обмануть, он не дает никаких гарантий, только немного помогает. Во-вторых, как уже выяснилось в куче холиваров, для mutable и immutable лучше иметь разные интерфейсы. А вот immuutable дает гарантий очень много.
Re[9]: Office Open XML документ и XML документ
От: Roman Odaisky Украина  
Дата: 12.08.10 12:44
Оценка:
Здравствуйте, igna, Вы писали:

RO>>Ни в каком, а вот квадрат вполне может наследоваться от прямоугольника, если весь интерфейс — get_width, get_height и (только для квадрата) get_side.


I>Аналогично прямоугольник вполне может наследоваться от квадрата, если весь интерфейс — set_width, set_height и (только для квадрата) set_sid


Контравариантность? Теперь бы понять, зачем нужен такой интерфейс «только для записи»?
До последнего не верил в пирамиду Лебедева.
Re[20]: Office Open XML документ и XML документ
От: OlgaNaft Украина Энтомология
Дата: 19.08.10 09:11
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Ну во-первых const легко обмануть, он не дает никаких гарантий, только немного помогает. Во-вторых, как уже выяснилось в куче холиваров, для mutable и immutable лучше иметь разные интерфейсы. А вот immuutable дает гарантий очень много.


А какие именно преимущества immuutable? Не могли бы обьяснит чайнику? Или ссылочку на статью какую-то... )))
Мыс святого Ильи (Феодосия)
Биологическое земледелие
Re[21]: Office Open XML документ и XML документ
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.08.10 09:33
Оценка:
Здравствуйте, OlgaNaft, Вы писали:

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


G>>Ну во-первых const легко обмануть, он не дает никаких гарантий, только немного помогает. Во-вторых, как уже выяснилось в куче холиваров, для mutable и immutable лучше иметь разные интерфейсы. А вот immuutable дает гарантий очень много.


ON>А какие именно преимущества immuutable? Не могли бы обьяснит чайнику? Или ссылочку на статью какую-то... )))


1)Не требуются блокировки
2)Возможность шарить части объектов
3)Проще писать, immutable можно передать куда угодно и принять откуда угодно и знать что никто ничего плохо с ним не сделает (в отличие от const).

В КСВ этот вопрос обсуждался, но я не помню в какой теме.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.