|
А бывает?....
|
|||
---|---|---|---|
#18+
1) Существуют ли какие-либо ОО-системы (ОО системы програмирования, ОО БД или еще чего-либо ОО) где можно менять класс существующего объекта? 2) А оно это нужно? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2003, 09:40 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
А Вы сперва на последний вопрос (хотя бы для себя) ответьте... И как вы это себе представляете - изменеие класса объекта. Типа вот был котёнок, а вырос в кота.. или в тигра... И что? Предложите варианты использования такого действия - будет что обсуждать. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2003, 09:43 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
Например можно было бы отказался от использования состояния объекта, а использовать изменение типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2003, 09:51 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
Был рядовой сотрудник. Стал начальником. Однако на этого сотрудника есть куча данных в бухгалтерии (дескать он 100 рублей авансом получил), в библиотеке(книжку взял), в столовой(в рыбный день не приходит). В терминах О-системы эта информация представлена с помощью ссылок.Таким образом словами скопировать объект в другой или просто низя, или это большая заморочка - надо отыскивать все ссылки на него и править их. ИМХО идеальный вариант - просто поменять класс. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2003, 09:54 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
Да, бывают языки программирования, в которых можно не только динамически конструировать классы, но и менять класс существующего объекта. Например, Newton Script, в котором класс и объект - вещи почти тождественные. Но это большая редкость, обычно стараются не смешивать ужа с ежом. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2003, 10:09 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
Естесвенно, изменение класса может подразумевать некие активные действия, описываемые соответсвующей процедурой. Что-то типа конструктора копирования.... только не копирования, а изменения класса и соответсвенно структуры, данных и т.п.... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2003, 12:26 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
а чем JavaScript не устраивает? Добавляй себе свойств на-ходу в объект. Но динамические свойства я тебе сэмулирую на любом языке. Что надо-то? Чем классы должны отличаться-то? На COM-технологии это вообще элементарно делается. Еще 5 мин назад не было у объекта этого интерфейса, а потом вдруг может появиться (т.е. динамически создали объект-имплементатор интерфейса, стали учитывать его при QueryInterface). Способы есть. Только зачем? Почему бы именно не обойтись состоянием и интерфейсами? Ведь тип (по смыслу), это нечто, определенное на этапе компиляции... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2003, 19:14 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
Чем отличаются? По предложенному ранее примеру. У объекта "сотрудник" нет массива ссылок на подчиненных, у объекта "начальник" есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.10.2003, 22:21 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
ну, тогда повторюсь, динамическое изменение (расширение) типа легко сделать на COM-технологии, причем 2-мя путями (можно использовать их одновременно или порознь): - динамическое создание имплементаторов интерфейсов с последующим их учетом в QueryInterface; - использование IDispatch для динамического оперирования методами и свойствами объекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 01:40 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
И что, у объекта в атрибутах после этого массив ссылок появится? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 09:47 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
Давайте сузим вопрос. То что все можно сделать (с трудом и через ж.пу) никто не сомневается. Вопрос - где это делается естественным путем. Пока я так понял появился только один кандидат - Newton Script Я честно говоря ничего о нем не слышал, а слово Script настораживает. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 10:10 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
Не только сузим, а еще и пример придумаем действительно требующий изменения класса. А то в этом получается класс = смесь оргштатной единицы (сотрудник) с физическим лицом (занимающим данную должность). ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 10:42 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
да, давайте ставьте-ка задачку, а мы посмотрим... если действительно будет интересная задачка - вывалю сюда исходник. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 11:31 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
Если нормально систему спроектировать, то никаких проблем не будет. У нормальных людей у сотрудника есть тип - начальник он или дворник. И все делается изменением одного значения. А если у вас все вот так, через ж..., то тут ничего не поможет -- Tygra's -- ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 13:53 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
ИМХО ничего не через жопу... и ни хочу я никаких задач ставить...просто хотел узнать, существуютли ОО-системы, где можно ПРОСТО поменять класс существующего объекта, не копируя его про этом в другой объект. Ситуацию я описал, мне кажется понятно..... Могу усугубить (я понимаю, видимо меня сейчас закидают тухлыми помидорами, но... )....Скажите мне, существуют ли ОО-системы позволяющие добавить класс (например, унаследовав его от существующего) в функционирующей систему...? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 15:13 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
И, кстати, а оно это нужно? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 15:19 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
Добавить класс в работающую систему - да. Зачем далеко ходить - .NET А вот смена класса у объекта ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 15:25 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
На COM-технологии это вообще элементарно делается. Еще 5 мин назад не было у объекта этого интерфейса, а потом вдруг может появиться (т.е. динамически создали объект-имплементатор интерфейса, стали учитывать его при QueryInterface). нет, не может, спецификация COM такие вещи запрещает ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 16:10 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
Осмелюсть предложить еще один пример - объекты недвижимости с точки зрение риэлтора. Казалось бы что может быть стабильней структуры.... однако новые свойства даже новые категории свойств возникают внезапно и периодически эти изменения приводят к изменению класса. Например: Есть у нас пустырь и описывает его некая совокупость признаков первоочередных - площадь, стостояние территории, стартовая цена, глубина залегания грунтовых вод, р-фон,наличие каналов под учаском и их принадлежность, окружение,ограждение, возможность проведение коммуникаций и кой чего еще. Поставили на нем двухэтажку (школу совковой планировки или детский садик) - получили совершенно другой объект ! Но заводить новую сущность мне кажется глупо! А вот если бы поменять класс и получить доступ к новым свойствам (это например высота потолков,охрана,наличие отопления и водоснабжения и пром электропитания .... и еще 12-23 пункта! ). Конечно можно эти свойства как второстепеные выкинуть в примечания, но второстепенные они сегодня а завтра ситуация меняется и они становятся главными и по ним нужно делать фильтры строить группировки объектов и прочая. Решений в которых разработчик тупо сваял простыню из 80-200 колонок лучше не упоминайте - плавали, знаем. И еще одно - у меня сложилось впечатление что в подобных реляцонная модель неудобна. Приходится громоздить надстройки что заведомо приведет дополнительным затратам времени на доступ к свойствам объекта. А реализация подобных вещей требуется все чаще. И отнюдь не так как в совке гланды удаляли 8)) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 20:44 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
автор писал:нет, не может, спецификация COM такие вещи запрещает речь не о спецификации, а о том - можно или нет? В базе данных я такое делал. По ошибке ввели кого-то как частное лицо, а он оказывается юр-лицо, ну вот и были у меня несколько процедур взаимного преобразования типов. Правда у меня была единая основная таблица, так что трансформировал только данные в таблицах-аттрибутах. Нечто подобное можно сделать и на объектном уровне. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.10.2003, 22:38 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
ИМХО вопрос надо ставить так - "А МОЖНО?" Когда задаються такие вопросы стоит обратить внимание на то, можно ли это реализовать в принципе....в неких конкретных условиях. Под конкретными условиями я понимаю оргнизацию данных в конкретных системах, в конкретной памяти и в тому подобных конкретных вещах.... хотя слово "конкретный" можно понимать достаточно, я бы сказал очень широко :). Понятно? Тогда объясню :) Я уже писал тут, что говоря об ОО-системах програмирования в настоящее время по умолчанию, обычно (псокольку альтенатив практически не существует) подразумевают ОО-системы, выполняемые на Фон-Неймановских машинах. В таких системах в свете заданного вопроса важны два момента - 1) линейная организация памяти и 2) привязка OID к адресному пространству машинной памяти (OID = адрес объекта в памяти). Говоря по простому, изменяя класс объекта (в примере мы меняем его структуру) мы должны изменить размер лежащих в памяти данных этого объекта. Однако, поскольку, память линейная , эти данные ограничены "спереди" и "сзади" другими объектами. таким бразом мы не можем впихнуть новые данные на старое место (ну, либо, мы должны перенести соседний объект, который здесь вообще ни при чем....на колу мочало - начинай сначала :) В общем объекты толкаюьтся локтями... Можно конечно делать некую таблицу переадресации, где OID каждого объекта соответствует его адресу в физической памяти..но ИМХО эта та еще заморочка :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 10:29 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
2 U-gene сейчас очень модно адресовать объекты по хендлам, так в этом случае - никаких описанных проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 10:37 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
А у меня встречный вопрос: а каким образом объект-клиент (вызывающий объект) будет использовать тот факт, что тип объекта-сервера поменялся? ИМХО объект-клиент изначально рассчитан на конечное число типов объектов-серверов и если добавляется новый тип сервера, то бизнес-логика клиента должна быть изменена, то есть переписана ручками, а не динамически во время исполнения ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 11:05 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
А никак :). ИМХО это может иметь смысл, когда класс объекта меняется на его класс-наследник. Предложенный пример тому иллюстрация. Для других частей системы объект не меняется , поскольку класс "Начальник" наследует класс "Сотрудник". ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 11:11 |
|
А бывает?....
|
|||
---|---|---|---|
#18+
в таком случае задачка сводится к использованию тн прокси-объекта который бы делегировал вызовы разным объектам в зависимости от к-л условий при этом клиент держит ссылку только на прокси-объект вообщем, имхо, это уровень проектных решений, а не фундаментальных изменений в ОО-системе ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2003, 11:48 |
|
|
start [/forum/topic.php?fid=32&fpage=176&tid=1546789]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
68ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 179ms |
0 / 0 |