Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 ... 13 ОтправитьПечать
Очень популярная тема (более 25 ответов) Полиморфизм ЗаменитьЭксзБазовогоКласса (число прочтений - 77671 )
fez
Forum Administrator
1c++ power user
Отсутствует


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #45 - 30. Мая 2006 :: 15:39
Печать  
kms писал(а) 30. Мая 2006 :: 15:36:
fez писал(а) 30. Мая 2006 :: 15:28:
Почему не будет?

Если ЗаменитьБазовыйОбъект() будет работать для объекта класса, созданного функцией СоздатьОбъект(), то в данном случае он будет работать для класса "Документ_РКО", у которого среди базовых классов нет класса Справочник.Товары.

Как это? Вассал моего вассала - не мой вассал? Что же это за ООП?
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #46 - 30. Мая 2006 :: 15:39
Печать  
fez писал(а) 30. Мая 2006 :: 15:25:
Вот беру я мою иерархию. И в код класса Документы_СБухИтогами (который у меня сам по себе, и ни от кого не наследуется) вставляю вызов Сам(Контекст).Вид().
...
И называется это полиморфизм.

То, что оно работает, не значит, что это правильно.
Если ты создашь просто класс Документы_СБухИтогами и вызовешь Сам(Контекст).Вид(), что будет?
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #47 - 30. Мая 2006 :: 15:40
Печать  
kms писал(а) 30. Мая 2006 :: 15:36:
он будет работать для класса "Документ_РКО", у которого среди базовых классов нет класса Справочник.Товары.

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

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


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #48 - 30. Мая 2006 :: 15:42
Печать  
kms писал(а) 30. Мая 2006 :: 15:39:
fez писал(а) 30. Мая 2006 :: 15:25:
Вот беру я мою иерархию. И в код класса Документы_СБухИтогами (который у меня сам по себе, и ни от кого не наследуется) вставляю вызов Сам(Контекст).Вид().
...
И называется это полиморфизм.

То, что оно работает, не значит, что это правильно.
Если ты создашь просто класс Документы_СБухИтогами и вызовешь Сам(Контекст).Вид(), что будет?

Это зависит от того, реализован ли у меня метод Вид() в самом классе или выше по иерархии.
Если не реализован - я сам себе злобный баклан.
Но метод ЗаменитьЭксзБазовогоКласса у меня определен для всех КОП, так что тут проблем я не вижу.
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #49 - 30. Мая 2006 :: 15: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: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #50 - 30. Мая 2006 :: 15:44
Печать  
fez писал(а) 30. Мая 2006 :: 15:39:
kms писал(а) 30. Мая 2006 :: 15:36:
fez писал(а) 30. Мая 2006 :: 15:28:
Почему не будет?

Если ЗаменитьБазовыйОбъект() будет работать для объекта класса, созданного функцией СоздатьОбъект(), то в данном случае он будет работать для класса "Документ_РКО", у которого среди базовых классов нет класса Справочник.Товары.

Как это? Вассал моего вассала - не мой вассал? Что же это за ООП?

Хм. Действительно, что же это за ООП. Вопрос только в реализации метода ЗаменитьБазовыйОбъект(), и, пожалуй, это вопрос решаемый.
  

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: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #51 - 30. Мая 2006 :: 15:46
Печать  
artbear писал(а) 30. Мая 2006 :: 15:43:
Суперкласс "Документы_СБухИтогами"
Это как?
Как построена иерархия с его участием?

Поменял свое сообщение с описанием всей задачи целиком.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #52 - 30. Мая 2006 :: 15:47
Печать  
fez писал(а) 30. Мая 2006 :: 15:42:
Это зависит от того, реализован ли у меня метод Вид() в самом классе или выше по иерархии.
Если не реализован - я сам себе злобный баклан.
Но метод ЗаменитьЭксзБазовогоКласса у меня определен для всех КОП, так что тут проблем я не вижу.

ОК, я чуть про другое. У тебя в Документы_СБухИтогами как реализован Вид()?
  

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: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #53 - 30. Мая 2006 :: 15:50
Печать  
kms писал(а) 30. Мая 2006 :: 15:47:
fez писал(а) 30. Мая 2006 :: 15:42:
Это зависит от того, реализован ли у меня метод Вид() в самом классе или выше по иерархии.
Если не реализован - я сам себе злобный баклан.
Но метод ЗаменитьЭксзБазовогоКласса у меня определен для всех КОП, так что тут проблем я не вижу.

ОК, я чуть про другое. У тебя в Документы_СБухИтогами как реализован Вид()?


у меня - никак. но просто потому, что я не создаю объектов типа Документы_СБухИтогами. Если бы создавал - тогда я бы знал, какое поведение я хочу увидеть от этого метода.
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #54 - 30. Мая 2006 :: 15:50
Печать  
Ага, теперь все понятно.
Т.е. ты хочешь, чтобы при использовании метода ЗаменитьБазовыйОбъект был настоящий полиморфизм, т.е. чтобы иерархия просматривалась не с текущего класса, в котором выполнен вызов ЗаменитьБазовыйОбъект, а с самого верха иерархии ?
  

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


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #55 - 30. Мая 2006 :: 15:52
Печать  
artbear писал(а) 30. Мая 2006 :: 15:50:
Ага, теперь все понятно.
Т.е. ты хочешь, чтобы при использовании метода ЗаменитьБазовыйОбъект был настоящий полиморфизм, т.е. чтобы иерархия просматривалась не с текущего класса, в котором выполнен вызов ЗаменитьБазовыйОбъект, а с самого верха иерархии ?

"...а с самого низа иерархии". Базовые классы сверху, подчиненные снизу.
  
Наверх
www  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #56 - 30. Мая 2006 :: 15:52
Печать  
fez

Цитата:
Сам(Контекст).ЗаменитьЭксзБазовогоКласса("Документ."+КонтекстДокумента.Вид(), КонтекстДокумента)


Нет, еще раз. Не правильно в классе Документы_СБухИтогами пытаться менять иерархию класса Документ_РКО, вызывая метод у объекта Сам(Контекст).

Правильно будет передать кроме КонтекстДокумента еще и объект _Сам типа Документ_РКО и уже у него вызывать ЗаменитьЭксзБазовогоКласса.

Понимаешь?

Изменено:
Вот так:

При этом в методе Документы_СБухИтогами::__Инит__(КонтекстДокумента, __Документ) первой строчкой будет стоять вот такое:

Цитата:
__Документ.ЗаменитьЭксзБазовогоКласса("Документ."+КонтекстДокумента.Вид(), КонтекстДокумента)


  

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: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #57 - 30. Мая 2006 :: 15:55
Печать  
kms писал(а) 30. Мая 2006 :: 15:52:
fez

Цитата:
Сам(Контекст).ЗаменитьЭксзБазовогоКласса("Документ."+КонтекстДокумента.Вид(), КонтекстДокумента)


Нет, еще раз. Не правильно в классе Документы_СБухИтогами пытаться менять иерархию класса Документ_РКО, вызывая метод у объекта Сам(Контекст).

Правильно будет передать кроме КонтекстДокумента еще и объект _Сам типа Документ_РКО и уже у него вызывать ЗаменитьЭксзБазовогоКласса.

Понимаешь?


Нет, не понимаю.
Почему для вызова метода Вид() класса Документ.РКО мне не нужно передавать объект _Сам? Почему для Вид() я могу обойтись работой через Сам(Контекст) ?

P.S. Ну то есть я понимаю, что твой вариант скорее всего заработает. Но почему мой вариант неправильный с точки зрения ООП?
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #58 - 30. Мая 2006 :: 15:56
Печать  
kms писал(а) 30. Мая 2006 :: 15:52:
Правильно будет передать кроме КонтекстДокумента еще и объект _Сам типа Документ_РКО и уже у него вызывать ЗаменитьЭксзБазовогоКласса.


Да, имхо также лучше явно задавать подобное поведение.

Иначе при другом, неявном преобразовании, можно глюков получить.
ЗЫ явно/неявно - перекликается с полемикой по ПолучитьКонтекстОкружения Улыбка
  

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


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

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Полиморфизм ЗаменитьЭксзБазовогоКласса
Ответ #59 - 30. Мая 2006 :: 15:57
Печать  
artbear писал(а) 30. Мая 2006 :: 15:56:
Иначе при другом, неявном преобразовании, можно глюков получить.

Приведи пример.
  
Наверх
www  
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 ... 13
ОтправитьПечать