В рамках парадигмы КОП (Компонентно Ориентированное Программирование), запрещено (или очень порицается) межмодульное наследование. Межмодульно разрешается наследоваться только от абстрактных типов. Так вот, можно это требование еще более ужесточить. Этот исходный абстрактный тип не должен быть типом-значением, а должен быть (ссылочным/указательным)-типом. А объясняется это очень просто. Дело в том, что тип-значение имеет такой "скрытый" параметр как размер переменной (ведь переменные этого типа размещаются на стеке, а значит зависимым модулям надо знать размер переменной). Если вдруг, потом в исходном модуле внести изменение изменяющее размер переменных этого типа (добавить или удалить скрытое/приватное/неэкспортируемое поле), то все зависимые модули придется ПЕРЕКОМПИЛИРОВАТЬ даже не смотря на то, что в открытом/публичном интерфейсе этого типа изменений не было.
В общем, то это очевидно. Но пока сам на это не нарвешься — до конца не осознаешь.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Небольшое замечание.
"Просто так"? Или к чему-то?
СГ>В рамках парадигмы КОП (Компонентно Ориентированное Программирование)...
вопрос — чья это парадигма? Кто где когда и как её опубликовал/воплотил и т.п.? Т.е. ты уверен, что нет других систем, где, возможно, это обходится каким-либо образом?
Здравствуйте, Курилка, Вы писали:
К>"Просто так"? Или к чему-то?
Просто так, поделился своим наблюдением.
К>вопрос — чья это парадигма? Кто где когда и как её опубликовал/воплотил и т.п.? Т.е. ты уверен, что нет других систем, где, возможно, это обходится каким-либо образом? К>И вообще что под КОП можно подразумевать? К>(т.е. назови пророков копов )
Вот какраз такие вопросы и говорят, что далеко это ещё до реального внедрения и признания, хотя, если честно, я об этом гораздо больше знаю (наверное), чем ост. большинство программистов.
Небольшое замечание к небольшому замечанию:
Я правильно понял, что ты критикуешь межмодульное наследование от абстрактных типов-значений?
Если да, то уверен ли ты что бывают абстрактные типы-значения, от которых можно межмодульно унаследоваться?
Если да, то где?
И не лучше ли пользоваться полноценной компонентно-ориентированной средой типа .Net или Java, где такие звери явно запрещены?
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Небольшое замечание к небольшому замечанию: Я правильно понял, что ты критикуешь межмодульное наследование от абстрактных типов-значений? Если да, то уверен ли ты что бывают абстрактные типы-значения, от которых можно межмодульно унаследоваться? Если да, то где?
Здравствуйте, Сергей Губанов, Вы писали:
СГ>В рамках парадигмы КОП (Компонентно Ориентированное Программирование), запрещено (или очень порицается) межмодульное наследование. Межмодульно разрешается наследоваться только от абстрактных типов.
Такого требования в КОП нет, ссылку на современное определение я уже приводил.
СГ> Так вот, можно это требование еще более ужесточить. Этот исходный абстрактный тип не должен быть типом-значением, а должен быть (ссылочным/указательным)-типом. А объясняется это очень просто. Дело в том, что тип-значение имеет такой "скрытый" параметр как размер переменной (ведь переменные этого типа размещаются на стеке, а значит зависимым модулям надо знать размер переменной). Если вдруг, потом в исходном модуле внести изменение изменяющее размер переменных этого типа (добавить или удалить скрытое/приватное/неэкспортируемое поле), то все зависимые модули придется ПЕРЕКОМПИЛИРОВАТЬ даже не смотря на то, что в открытом/публичном интерфейсе этого типа изменений не было.
Все верно. Именно поэтому в дотнете от структур наследоваться нельзя. Еще одна проблема с наследованием value-типов всплывает если покурить над массивами из value-типов.
Здравствуйте, Сергей Губанов, Вы писали: СГ>BlackBox 1.4, Component Pascal:
почему-то меня это совершенно не удивляет. СГ>Ой, давайте не будем, а?
Давай будем сразу указывать контекст применимости своих "универсальных утверждений", чтобы не смущать публику. Если ты берешься рассуждать о Компонентном Программировании, а не Компонентном Паскале, то будь любезен поинтересоваться тем, что происходит в окружающей действительности.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Сергей Губанов, Вы писали: СГ>>BlackBox 1.4, Component Pascal: S>почему-то меня это совершенно не удивляет. СГ>>Ой, давайте не будем, а? S>Давай будем сразу указывать контекст применимости своих "универсальных утверждений", чтобы не смущать публику. Если ты берешься рассуждать о Компонентном Программировании, а не Компонентном Паскале, то будь любезен поинтересоваться тем, что происходит в окружающей действительности.
В чем смысл Вашего сообщения:
1) Вы знаете способ межмодульного наследования от типов-значений не приводящий к перекомпиляции зависимых модулей при внесении изменений в исходный тип?
2) Вы нашли какую-то другую ошибку в моем сообщении?
3) Вам просто "подраться" захотелось?
4) Что-то другое?