Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Баг 1821 - не наследуется метод _ПолучитьКод (число прочтений - 8762 )
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Баг 1821 - не наследуется метод _ПолучитьКод
24. Мая 2006 :: 11:21
Печать  
Вопрос: нужно ли исправление бага 1821 http://www.1cpp.ru/bugs/show_bug.cgi?id=1821 ?

Проблема еще актуальна?

Как исправить, я знаю.
Вопрос: нужно ли это делать?


ЗЫ мое ИМХО - да, этот метод должен наследоваться.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг 1821 - не наследуется метод _ПолучитьКод
Ответ #1 - 24. Мая 2006 :: 12:11
Печать  
А еще было бы здорово добавить наследование метода _ПриЗаписиСвойства(...) и _ПриЧтенииСвойства(...)
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг 1821 - не наследуется метод _ПолучитьКод
Ответ #2 - 24. Мая 2006 :: 12:22
Печать  
Да, это можно сделать по такой же схеме.
Есть у кого-нибудь возражения?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг 1821 - не наследуется метод _ПолучитьКод
Ответ #3 - 24. Мая 2006 :: 13:25
Печать  
mash писал(а) 24. Мая 2006 :: 12:11:
А еще было бы здорово добавить наследование метода _ПриЗаписиСвойства(...) и _ПриЧтенииСвойства(...)


А вот нужно наследование этих методов?
Поподробнее, пожалуйста
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг 1821 - не наследуется метод _ПолучитьКод
Ответ #4 - 24. Мая 2006 :: 13:30
Печать  
Конечно нужно.  Это важный момент наследование поведения объекта при установке/чтени свойств.
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг 1821 - не наследуется метод _ПолучитьКод
Ответ #5 - 24. Мая 2006 :: 13:49
Печать  
В общем, у каждого КОП возможно описать методы, которые пока не наследуются.
Это
  • _ПолучитьКод
  • КлассСохраняемый
  • СохранитьКлассВСтроку
  • ЗагрузитьИзСтроки
  • _ПолучитьКолвоДСвойств
  • _ПолучитьИмяДСвойства
  • _ПриЧтенииСвойства
  • _ПриЗаписиСвойства
  • ПриЗаписи_ИмяАтрибута
  • ПриПолучении_ИмяАтрибута
  • ОбработкаСобытияОтКласса

Для каких методов, по-вашему, необходимо наследование?
« Последняя редакция: 25. Мая 2006 :: 13:32 - artbear »  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг 1821 - не наследуется метод _ПолучитьКод
Ответ #6 - 24. Мая 2006 :: 14:23
Печать  
Еще забыл
  • ПриЗаписи_ИмяАтрибута
  • ПриПолучении_ИмяАтрибута

ЗЫ пред. пост также обновил.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг 1821 - не наследуется метод _ПолучитьКод
Ответ #7 - 24. Мая 2006 :: 14:31
Печать  
Предлагаю сделать следующим образом:
если данные методы в классе-предке описаны с модификатор Экспорт (публичные методы), то они автоматом наследуются в наследнике.
Наследник при желании может их переопределить.
Если модификатор Экспорт нет (приватные методы), эти методы не наследуются.
И наследнику необходимо прописать все самостоятельно.

ЗЫ данное поведение вполне возможно. На своих рабочих исходниках я его проверил на своих же юнит-тестах, все работает нормально !
Старое поведение не пострадало.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Баг 1821 - не наследуется метод _ПолучитьКод
Ответ #8 - 24. Мая 2006 :: 14:56
Печать  
В общем, часть выполнена
   Решение бага 1821 [http://www.1cpp.ru/bugs/show_bug.cgi?id=1821]
           [+] появилась возможность наследовать метод "_ПолучитьКод()"
       Если в классе-предке метод описан с модификатором "Экспорт",
       данный метод наследуется.
       Если  модификатор  "Экспорт"  не  установлен,  метод  будет
       использован  только  в текущем классе, и не будет унаследован.
PS изменения подтверждены юнит-тестами.

По остальным методам давайте думать.
ИМХО нужно разрешить возможность наследования всех указанных функций, кроме, возможно, методов по сериализации объекта
КлассСохраняемый
СохранитьКлассВСтроку
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Баг 1821 - не наследуется метод _ПолучитьКод
Ответ #9 - 24. Мая 2006 :: 20:02
Печать  
artbear

Посмотрел.
С _ПолучитьКод() проблем нет, только смысл надо понять. Иметь то же представление для наследника?
Впрочем, возможность - это лучше, чем ее отсутствие. Почему бы и нет.

С остальными возможны подводные камни, рассмотри:
  • КлассСохраняемый
  • СохранитьКлассВСтроку
  • ЗагрузитьИзСтроки (добавь себе в список, кстати)

    Небезопасно. Если класс сохраняет private переменные, сохранение в строку будет обламываться.
    Равно как и не сможет сохранять добавленные члены класса-наследника.
    Думаю, эти методы не нужно наследовать. Это функции типа конструктора/деструктора - индивидуальные для класса.

    Кстати, напомните мне, в 1cpp при создании объекта-наследника конструкторы базовых классов выполняются или нет?
    Если да, то в каком порядке?
  • _ПолучитьКолвоДСвойств
  • _ПолучитьИмяДСвойства

    Здесь возможны варианты, когда пользователь объявит одну функцию как экспортную, вторую - нет.
    Это будет работать в базовом классе, но приведет к ошибке, должны присутствовать обе (согласно документации).
    Думаю, наследовать можно, с учетом этого момента. Если хотя бы одна не является экспортной - не наследовать всю пару.
  • _ПриЧтенииСвойства
  • _ПриЗаписиСвойства
  • ПриЗаписи_ИмяАтрибута
  • ПриПолучении_ИмяАтрибута

    Здесь возможны варианты, когда атрибут является private. Что будет в этом случае?
    Вроде бы ничего не будет, но и соотв. функции наследовать не нужно.
    Само наследование этих функций мне представляется наиболее полезным.
  • ОбработкаСобытияОтКласса

    Здесь проблем не вижу.

    Кроме того, все функции должны быть виртуальными, т.е. должны иметь возможность переопределения в наследниках.
    _ПолучитьКолвоДСвойств/_ПолучитьИмяДСвойства - это виртуальная атомарная пара.
  •   

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    artbear
    1c++ developer
    1c++ moderator
    Отсутствует


    Эх, дайте что-нибудь новенькое
    да полезное потести

    Сообщений: 6303
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Баг 1821 - не наследуется метод _ПолучитьКод
    Ответ #10 - 25. Мая 2006 :: 13:33
    Печать  
    Согласен, так и сделаю.

    kms писал(а) 24. Мая 2006 :: 20:02:
    ЗагрузитьИзСтроки (добавь себе в список, кстати)


    Добавил.
      

    OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
    Наверх
    GTalkSkype/VoIPICQ  
    IP записан
     
    artbear
    1c++ developer
    1c++ moderator
    Отсутствует


    Эх, дайте что-нибудь новенькое
    да полезное потести

    Сообщений: 6303
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Баг 1821 - не наследуется метод _ПолучитьКод
    Ответ #11 - 25. Мая 2006 :: 13:40
    Печать  
    kms писал(а) 24. Мая 2006 :: 20:02:
    Кстати, напомните мне, в 1cpp при создании объекта-наследника конструкторы базовых классов выполняются или нет?
    Если да, то в каком порядке?


    Конечно, вызываются - это основа ООП.
    Добавил соответствующий юнит-тест в конфу тестирования 1С++.

    Порядок вызова соответствует порядку объявления предков.
      

    OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
    Наверх
    GTalkSkype/VoIPICQ  
    IP записан
     
    artbear
    1c++ developer
    1c++ moderator
    Отсутствует


    Эх, дайте что-нибудь новенькое
    да полезное потести

    Сообщений: 6303
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: Баг 1821 - не наследуется метод _ПолучитьКод
    Ответ #12 - 25. Мая 2006 :: 14:09
    Печать  
    Это видно из кода CComponentClass::InvokeConstructor()
      

    OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
    Наверх
    GTalkSkype/VoIPICQ  
    IP записан
     
    Переключение на Главную Страницу Страницы: 1
    ОтправитьПечать