Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) ТП и ООП (проблема наследования или в чем дело?) (число прочтений - 9238 )
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
ТП и ООП (проблема наследования или в чем дело?)
16. Марта 2008 :: 08:30
Печать  
Предлагаю тестовую обработку и свои два класса. Проблема в том что ТП создается и на форме отображается а вот доступ к атрибутам (Колонки в частности) выдает ошибку...
Тест прилагается...

1С++ пробовал TF_EV (от 28.02.08)  и NightBuild_TF (от 18.12.07) итог один и тот же
  

1C_OOP_.rar ( 13 KB | Загрузки )

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #1 - 16. Марта 2008 :: 10:15
Печать  
vandalsvq

ИМХО, этот первый вариант у тебя нормальный, он должен (по дизайну) работать (только defcls в архиве кривой).
Второй, который канул в лету, как раз ни к чему.

Если поставить точку останова внутри класса, то получится примерно такая картинка:

ОбъектТабличноеПоле = Данные.СвойстваОбъекта
ОбъектТабличноеПоле.ЦветЛиний = -1
ОбъектТабличноеПоле.Шапка = ФиксированныеСтроки
ОбъектТабличноеПоле.ВыделенныеСтроки = ВыделенныеСтроки
ОбъектТабличноеПоле.ПоставщикДанных = ПоставщикДанныхТЗ
ОбъектТабличноеПоле.Колонки = Ошибка в выражении!

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

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #2 - 16. Марта 2008 :: 10:43
Печать  
vandalsvq

Хех, все оказалось довольно занятно.
В классе Данные.СвойстваОбъекта.ert : Общее.ТабличноеПоле

Перем Колонки;//:КолонкиТабличногоПоля

Проблемы две:
1. Скорее всего будет обычный цикл, который помешает разрушению ТП, когда придет время.
2. Свойство Колонки - конфликтует со свойством "Колонки" ТП.

Последняя проблема - это недостаток реализации ООП в 1cpp.
Не умеет пока 1cpp разруливать конфликты неоднозначности свойств в иерархии.

Уверен, такая ситуация должна диагностироваться хотя бы на этапе создания класса.
http://www.1cpp.ru/bugs/show_bug.cgi?id=3640
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #3 - 16. Марта 2008 :: 10:57
Печать  
kms писал(а) 16. Марта 2008 :: 10:43:
Последняя проблема - это недостаток реализации ООП в 1cpp.
Не умеет пока 1cpp разруливать конфликты неоднозначности свойств в иерархии.

Уверен, такая ситуация должна диагностироваться хотя бы на этапе создания класса.

И как ты видишь эту диагностику?
ИМХО в обычном режиме она не очень нужна - например, разработчик намеренно создает такое же свойство, как у базового класса, чтобы переопределить поведение в наследнике.
Если мы будем выдавать сообщение об этом в реал-тайме, будет некрасиво Печаль
Предлагаю подобные диагностики выдавать в режиме проверки типов!
ЗЫ или новую тему заведем?
  

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: ТП и ООП (проблема наследования или в чем дело
Ответ #4 - 16. Марта 2008 :: 11:00
Печать  
Цитата:
ЗЫ или новую тему заведем?

Я думаю, вопрос Александра мы закрыли, а в багзилле я ссылку на эту ветку поставил.
Так что, думаю, можно продолжить.
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #5 - 16. Марта 2008 :: 11:22
Печать  
artbear писал(а) 16. Марта 2008 :: 10:57:
И как ты видишь эту диагностику?
ИМХО в обычном режиме она не очень нужна - например, разработчик намеренно создает такое же свойство, как у базового класса, чтобы переопределить поведение в наследнике.
Если мы будем выдавать сообщение об этом в реал-тайме, будет некрасиво Печаль
Предлагаю подобные диагностики выдавать в режиме проверки типов!

Да в принципе, все равно как. Можно и при проверке типов, наверное.

Я тут просто задумался, зачем может потребоваться переопределять свойства в подклассе.


, тем более, что как я вижу, в 1cpp вообще при этом теряется возможность обращения к оригинальному свойству суперкласса.
У меня, по крайней мере, полчаса назад не получилось, даже через ПолучитьБазовыйКласс("ТабличноеПоле").

Нет, можно получить, это все же ошибка измерения.


А вот поиск проблемы может растянуться надолго, особенно если никого не окажется рядом, кто знает про эти грабли.
И даже если знает, то не так просто будет сопоставить все свойства суперклассов и понять, что вот эти два из ста - конфликтные.

А если будет хоть какой-то механизм, можно будет сказать "а нажми-ка кнопку "проверка типов"" - и система все проверит сама.
В принципе, если ты придумаешь, как это можно сделать - будет замечательно.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #6 - 16. Марта 2008 :: 11:22
Печать  
kms писал(а) 16. Марта 2008 :: 10:43:
2. Свойство Колонки - конфликтует со свойством "Колонки" ТП.
Последняя проблема - это недостаток реализации ООП в 1cpp.
Не умеет пока 1cpp разруливать конфликты неоднозначности свойств в иерархии.

А чего, там не так же, как с методами? То есть какой класс первым определен в defcls.prm - оттуда и возьмеццо?
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #7 - 16. Марта 2008 :: 11:26
Печать  
fez писал(а) 16. Марта 2008 :: 11:22:
А чего, там не так же, как с методами? То есть какой класс первым определен в defcls.prm - оттуда и возьмеццо?

Да скорее всего, та же фигня.
Здесь просто чуть другой ситуэйшн - здесь конфликт не между базами а между подклассом и суперклассов - простое переопределение.
В принципе, и в C++ можно так писать, если здоровья не жалко или коллег сильно не любишь Улыбка
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #8 - 16. Марта 2008 :: 11:43
Печать  
Ну, не знаю, как вам понравится идея привязать проверку таких конфликтов даже не к проверке типов, а сделать новый отдельный режим проверки.
И для свойств, и для методов.

Я бы иногда прогонял такие тесты, и чем сложнее иерархии - тем это становится более актуальной задачей.
С методами, кстати, тоже неплохо знать, что простое изменение порядка наследования вот для этих классов - приведет к проблемам при разрешении вот таких вот имен.
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #9 - 16. Марта 2008 :: 11:50
Печать  
kms писал(а) 16. Марта 2008 :: 11:43:
Ну, не знаю, как вам понравится идея привязать проверку таких конфликтов даже не к проверке типов, а сделать новый отдельный режим проверки.
И для свойств, и для методов.

Для свойств понятно, что нужно.
А для методов вопрос - как ты отличишь подобную ошибку переопределения метода и виртуальный метод ?
  

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: ТП и ООП (проблема наследования или в чем дело
Ответ #10 - 16. Марта 2008 :: 12:23
Печать  
artbear писал(а) 16. Марта 2008 :: 11:50:
kms писал(а) 16. Марта 2008 :: 11:43:
Ну, не знаю, как вам понравится идея привязать проверку таких конфликтов даже не к проверке типов, а сделать новый отдельный режим проверки.
И для свойств, и для методов.

Для свойств понятно, что нужно.
А для методов вопрос - как ты отличишь подобную ошибку переопределения метода и виртуальный метод ?

С методами чуть по-другому.

Нам бы для методов надо анализировать уровень контекста, в котором идет поиск.
При разрешении имени мы ищем имя не до первого контекста, в котором мы его находим, а все контексты одного уровня.
Если мы находим 1 вариант - используем его, если ни одного - ищем на уровне выше.
Если находим неоднозначность - выдаем сообщение (и используем первый из найденных, как сейчас и происходит).

В принципе, тоже можно сделать при (можно только первом) создании класса, а не при вызове.

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

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



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #11 - 16. Марта 2008 :: 12:59
Печать  
имхо, в (0) явно баг дизайна, потому как переменная-член Колонки класса Данные.СвойстваОбъекта приватная, а коллекция Колонки класса ТабличноеПоле публичная. Следовательно, по хорошему, тут проблемы выбора не должно быть.
« Последняя редакция: 16. Марта 2008 :: 16:15 - spock »  
Наверх
ICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #12 - 16. Марта 2008 :: 13:33
Печать  
spock писал(а) 16. Марта 2008 :: 12:59:
имхо, в (0) явно баг, потому как переменная-член Колонки класса Данные.СвойстваОбъекта приватная, а коллекция Колонки класса ТабличноеПоле публичная. Следовательно, по хорошему, тут проблемы выбора не должно быть.

Ну, внутри класса автор и получает свою приватную переменную вместо публичной из базового.
Судя по всему, его это не сильно радует, раз в этот воскресный день ему пришлось вместо похода в кино обратиться за помощью зала.

vandalsvq
Саша, сколько времени у тебя заняло определение причин проблем доступа к колонкам ТП в твоем классе?
  

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


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #13 - 16. Марта 2008 :: 14:42
Печать  
kms писал(а) 16. Марта 2008 :: 11:00:
Цитата:
ЗЫ или новую тему заведем?

Я думаю, вопрос Александра мы закрыли, а в багзилле я ссылку на эту ветку поставил.
Так что, думаю, можно продолжить.


Да мой вопрос на этом закрыт. Спасибо  Подмигивание

kms писал(а) 16. Марта 2008 :: 13:33:
vandalsvq
Саша, сколько времени у тебя заняло определение причин проблем доступа к колонкам ТП в твоем классе?


В общем я пытался (без помощи зала) разрулить данную проблему в течении двух дней (отвлекаясь конечно же от нее и возвращаясь снова) и каждый раз меня все больше и больше заводило в тупик. Что ж .... интересная проблема получилась, не подумал я как то такая на первый взгляд "странная ошибка" окажется столь интересна народу.

Всем огромное спасибо. А я как то и не подумал что проблема будет именно в этих переменных.

ЗЫ. поехал покатался по городу с супругой, но всю дорогу только и думал, ну что я сделал не так.
Еще раз большое спасибо тем кто принял участие. Подмигивание
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ТП и ООП (проблема наследования или в чем дело
Ответ #14 - 17. Марта 2008 :: 00:03
Печать  
Михал, Артур, я так и не понял, чего вы хотите исправить?
Вы хотите добавить способ, с помощью которого в коде 1С++ можно будет искать по иерархии классов "конфликты" имен методов и свойств?

Я вот что думаю.

Конечно же это полезная педалька. Наверное кому-то она даже поможет. Но при первом же использовании полиморфизма эта педалька станет абсолютно бессмысленной, поскольку сообщение о реальной ошибке утонет в массе сообщений, которые будут говорить только "а вот тут мы снова применили полиморфизм, ага".

А учитывая "утиную" типизацию 1С++ ((с) Саша Орефков), сделать такую утилиту 100% рабочей, будет просто невозможно. То есть даже если она будет работать в рантайме - все равно, ##па прилетит.
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать