ООП и формы

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

S_Gur
постоялец
Сообщения: 133
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

CynicRus, спасибо, я попробую
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

Из азов ООП
Каждый класс не зависимо от его предков и потомков создается в своем разделе памяти.
Эти участки памяти никак не пересекаются с памятью предков и генетической памятью. Потомок только
в момент своего создания хватает ЗНАЧЕНИЯ свойств предка. И все. На этом взаимодействия
предка и потомка заканчиваются, как правило. Если не принять специальные меры.
Да предок и потомок имеют ссылки на общие методы, а вот свойства у них находятся
по разные стороны баррикады. При вызове метода, первый параметр (который вы не видите)
это ссылка на область памяти класса из которого метод дергается. Self так называемый (иди, например, this в других языках программирования).
Соответственно, доступ к полям класса, отсчитывается от этого Self. Если вы волевым решением
Присвоите этому Self другой адрес, получите по носу.
Упрощенно, класс в памяти выглядит как массив ссылок на методы и свойства.
Воспользоваться свойствами предка можно. Для этого вы в класс предка делегируете как одно из полей
класс предка. Ну и дальше ковыряйтесь с ними по вашему усмотрению.
CynicRus
постоялец
Сообщения: 106
Зарегистрирован: 28.06.2012 14:31:11

Сообщение CynicRus »

Разговор про визуальное наследование в рамках IDE :D
S_Gur
постоялец
Сообщения: 133
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

vada, я так понимаю, что вы тоже решили поучить меня азам ООП, не поняв суть моего вопроса? Может, все-таки не стоит так торопиться нести просвещение в массы? Для начала разберитесь с разницей между DesignTime и RunTime, потом ВНИМАТЕЛЬНО почитайте мой вопрос, потом (если к этому времени до вас еще не дойдет) выполните набор действий, которые я рекомендовал выполнить господину DedFrend 3-4 поста назад. А потом я с удовольствием обсужу с вами азы ООП, Self и прочие тонкости.
Аватара пользователя
vada
энтузиаст
Сообщения: 691
Зарегистрирован: 14.02.2006 12:43:17

Сообщение vada »

S_Gur Вы, коллега, хам. Сами почитайте свой первый пост. Из которого следует что вы ничего не понимаете в ООП.
S_Gur
постоялец
Сообщения: 133
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

vada, понятно. Вместо того, чтобы обратить внимание на то, что уже два человека объяснили вам, что вы не понимаете, о чем идет речь, вы предпочли обострить конфликт. Бывает, и таких видели. Изучайте азы ООП дальше, "коллега"... :D

Добавлено спустя 1 час 30 секунд:
В общем, результатов я не добился. Пытался и закрывать формы, и удалять из проекта, чтобы добавить после изменения в предке. Те же яйца, только в профиль. Подозреваю, что все будет работать, если спроектировать систему полностью, и прописывать каждого предка от начала и до конца перед созданием потомков, чтобы потом совсем ничего не изменять. Поэтому пока с этим проектом перехожу в обычную Дельфи и пишу там - благо, там таких проблем нет. Потом попробую модуль за модулем перенести все это в Лазарус. Но такая работа, конечно, дико некомфортная.
Аватара пользователя
serbod
постоялец
Сообщения: 449
Зарегистрирован: 16.09.2016 10:03:02
Откуда: Минск
Контактная информация:

Сообщение serbod »

Это из-за кеширования скомпилированных модулей предков. В дельфях та же проблема. Нужно удалить все временные файлы, пересобрать Lazarus, пересобрать компоненты и проект.
S_Gur
постоялец
Сообщения: 133
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

serbod, это все хорошо, но проблема в том, что в течении большего времени я при разработке вношу изменения то в одного, то в другого предка, а конечный потомок при этом в идеале должен находиться у меня перед глазами, чтобы оттестировать эти изменения. Если после каждого такого изменения пересобирать Лазарус, компоненты и проект, разработка несколько затянется... :D В принципе, я даже особо не помню, когда я в Дельфях натыкался на такую проблему - разве что известная проблема с тулбарами, но она, кажется, несколько не из той серии
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

serbod писал(а):Нужно удалить все временные файлы, пересобрать Lazarus, пересобрать компоненты и проект.

serbod, имхо вы сильно сгущаете краски. По крайней мере простейший пример вроде даже работает.
S_Gur
постоялец
Сообщения: 133
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

iskander писал(а):простейший пример вроде даже работает


Насколько простейший? У меня уже на дедушке (предке предка) начинаются проблемы
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

S_Gur писал(а):У меня уже на дедушке (предке предка) начинаются проблемы

Т.е. при одном уровне наследования (типа, родитель-потомок) при изменении чего-либо в родителе, у потомка наследованые свойства автоматом меняются, а при двух уровнях (типа, родитель-потомок-потомокПотомка), у потомокПотомка при изменениях в родителе ничего не меняется, я правильно понял?
А в Дельфи второй случай работал?
S_Gur
постоялец
Сообщения: 133
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

Vadim, я вчера перенес этот проект на Дельфи и сейчас работаю с 6-ю уровнями наследования, периодически внося доработки в каждый из предков. Пока никаких проблем. Я, правда, еще не возился с тулбарами, поэтому очень надеюсь, что в 10.3.2 эту проблему исправили, но в любом случае у меня есть для нее решение. Больше никаких траблов пока не вижу. В Лазарусе я создавал форму, кидал на нее грид и на FormShow писал самый примитивный Grid.SetFocus. После чего создавал от нее потомка, работающего со справочником списковых переменных, а от этого потомка - форму, которая работает с конкретным справочником (передает предку идентификатор этого справочника). При открытии этой формы грид не фокусируется. Но если перекрыть ему FormShow и уже в конечном наследнике прописать тот же самый Grid.SetFocus, все отрабатывает. Это одна из многих проблем, на которые я натыкался. Честно говоря, не особо тестировал, через сколько поколений начинаются проблемы, вряд ли это будет жестко фиксированное количество
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

S_Gur писал(а):У меня уже на дедушке (предке предка) начинаются проблемы

Хмм, звучит забавно...

Простейший пример - три формы, каждая унаследована от предыдущей, с одним ActionList,
несколькими контролами и обработчиком OnClick. Но сильно долго его мучать мне как-то лениво было.
S_Gur
постоялец
Сообщения: 133
Зарегистрирован: 30.12.2018 21:17:42

Сообщение S_Gur »

iskander, пробовали после создания в дизайне всех трех форм убивать акции из ActionList? Из всех наследников убиваются?
iskander
энтузиаст
Сообщения: 627
Зарегистрирован: 08.01.2012 18:43:34

Сообщение iskander »

Мне не сильно интересна эта фича, поэтому я просто подобавлял/поудалял на первой форме несколько контролов/экшенов и проверил, что они добавляются/исчезают в дочерних формах. Если для вас она важна, сильно рекомендую лазаревский форум и багтрекер.

Кстати, одному мне кажется, что сегодня День Программиста?
Ответить