Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Обращение к методам класса (число прочтений - 8486 )
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Обращение к методам класса
04. Июля 2008 :: 01:04
Печать  
Обращение к экспортным методам КОПа из методов самого класса как правильно делать, например можно

    [1]  Метод(...)
    [2]  Сам().Метод(...)

Какой вариант  предпочтительней, если не затруднит то почему именно так ?

ЗЫ: если боян сильно не пинайте.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Обращение к методам класса
Ответ #1 - 04. Июля 2008 :: 01:10
Печать  
Если писать  Метод(...) то будет всегда вызыватся родной метод класса, а если Сам().Метод(...) то метод его потомка, если есть потомок.
Соответственно если тебе нужно чтоб нельзя было изменить действие кода при перекрытии метода потомком то не используй Сам()
Вот как то так
Надеюсь общий смысл понятен Улыбка
  
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #2 - 04. Июля 2008 :: 01:16
Печать  
Nick писал(а) 04. Июля 2008 :: 01:10:
Если писать  Метод(...) то будет всегда вызыватся родной метод класса, а если Сам().Метод(...) то метод его потомка, если есть потомок.
Соответственно если тебе нужно чтоб нельзя было изменить действие кода при перекрытии метода потомком то не используй Сам()
Вот как то так
Надеюсь общий смысл понятен Улыбка


да, полностью понятно

ЗЫ: не вижу применения наследованию, нет пока такой задачи, хватает просто инкапсуляции
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #3 - 04. Июля 2008 :: 01:19
Печать  
кстати,  по этой логике выходит что если класс не наследуется 2 вариант не нужен, а вот если появляются наследники в наследнике можно и так и сяк, как автору класса удобно.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Обращение к методам класса
Ответ #4 - 04. Июля 2008 :: 01:29
Печать  
ev-kov писал(а) 04. Июля 2008 :: 01:19:
кстати,  по этой логике выходит что если класс не наследуется 2 вариант не нужен, а вот если появляются наследники в наследнике можно и так и сяк, как автору класса удобно.

Что значит и так и сяк? В наследнике вызвать метод базового класса можно только через ПолучитьБазовыйКласс
  
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #5 - 04. Июля 2008 :: 01:43
Печать  
Nick писал(а) 04. Июля 2008 :: 01:29:
Что значит и так и сяк? В наследнике вызвать метод базового класса можно только через ПолучитьБазовыйКласс

Например есть класс Родоначальник с методом Получить, объявляем наследника  class Наследник:Родоначальник
в наследнике переопределяем метод получить, т.е. полностью переписываем его, в Наследнике создаем метод Обработать в котором в завимости от входных условий нужно использовать либо Родоначальник.Получить, либо Наследник.Получить, я понял так что если нужно использовать Родоначальник.Получить пишем Сам().Получить, а если свой метод Получить нужно применить, то пишем просто Получить
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Обращение к методам класса
Ответ #6 - 04. Июля 2008 :: 01:52
Печать  
ev-kov писал(а) 04. Июля 2008 :: 01:43:
Nick писал(а) 04. Июля 2008 :: 01:29:
Что значит и так и сяк? В наследнике вызвать метод базового класса можно только через ПолучитьБазовыйКласс

Например есть класс Родоначальник с методом Получить, объявляем наследника  class Наследник:Родоначальник
в наследнике переопределяем метод получить, т.е. полностью переписываем его, в Наследнике создаем метод Обработать в котором в завимости от входных условий нужно использовать либо Родоначальник.Получить, либо Наследник.Получить, я понял так что если нужно использовать Родоначальник.Получить пишем Сам().Получить, а если свой метод Получить нужно применить, то пишем просто Получить

То что ты написал реализуется через ПолучитьБазовыйКласс.

А по поводу сам() вот такая схема:

класс Родоначальник с методои Получить и Обработать объявляем наследника  class Наследник:Родоначальник
в наследнике переопределяем метод Получить. Если в классе Родоначальник из метода Обработать вызывать метод Получить через Сам() то вызовется
метод наследника иначе метод базового класса. Т.е. при переопределении в наследники метода получить изменится поведение родительского метода обновить
  
Наверх
ICQ  
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #7 - 04. Июля 2008 :: 01:57
Печать  
теперь понял по поводу сам(), но не могу придумать практического применения где нужно применять вызовы в родителе методов, которые  переопределены  в потомке. А вот ПолучитьБазовыйКласс пользовался, вспомнил.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #8 - 04. Июля 2008 :: 03:54
Печать  
Это же основы наследования Улыбка
Например, в классе-родителе реализован некий общий алгоритм (Выполнить/Обработать), который может себя по-разному вести в зависимости от используемого класса.
Вот подобные вариации и закидываются в так называемые виртуальные функции, которые могут переопределяться в классах-наследниках.
Пример кода
1. В родителе Класс1 определен алгоритм
Код
Выбрать все
Проц Выполнить() Экспорт
  Код1();
  Сам().ВыполнитьЗаписьВЛог(Параметры...);
  Код2();
КонецПроц

Проц ВыполнитьЗаписьВЛог(Параметры...) ЭКспорт // для виртуальных функций экспорт обязателен
// по умолчанию никакого лога
КонецПроцедуры 


а в наследнике КлассСЗаписьюВЛог1С переопределяем
Код
Выбрать все
Проц ВыполнитьЗаписьВЛог(Параметры...) ЭКспорт
  ВыполнитьЗаписьВЛог1С();
КонецПроцедуры 


или в наследнике2 КлассСЗаписьюЛогаВФайлНаДиске переопределяем
Код
Выбрать все
Проц ВыполнитьЗаписьВЛог(Параметры...) ЭКспорт
  ВыполнитьЗаписьВФайл();
КонецПроцедуры 



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

ЗЫ поищи какую-нибудь популярную книжку по основам ООП для любого языка программирования.

ЗЗЫ в 1С++ 3.0 можно не определять в модуле класса методы типа Сам() или Этот(), а сразу в коде писать вирт().ВыполнитьЗаписьВЛог(Параметры...)
  

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



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #9 - 04. Июля 2008 :: 04:15
Печать  
artbear
Например, в классе-родителе реализован некий общий алгоритм (Выполнить/Обработать), который может себя по-разному вести в зависимости от используемого класса.

Ну так это понятно что основы ООП, мне просто применять наследование почти нигде его не требуется в основном пользуюсь композицией классов, зачастую влом писать абстрактный класс(да и не нужен он) с абстрактными методами, тем более что наследников всё равно писать придется.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #10 - 04. Июля 2008 :: 08:21
Печать  
ev-kov писал(а) 04. Июля 2008 :: 04:15:
мне просто применять наследование почти нигде его не требуется

упс...  Озадачен
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #11 - 07. Июля 2008 :: 04:35
Печать  
Arta писал(а) 04. Июля 2008 :: 08:21:
упс...  Озадачен

Про наследование многие пишут что не для всех задач его нужно применять, иногда это просто вредно алгоритма.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #12 - 07. Июля 2008 :: 05:02
Печать  
ev-kov писал(а) 07. Июля 2008 :: 04:35:
Про наследование многие пишут что не для всех задач его нужно применять, иногда это просто вредно алгоритма.

Можно в принципе вообще не использовать классы, а выносить все в обработки и ГМ.
Я не представляю как можно написать нормальный удобный класс наследника ТП или Активикса без использования наследования.
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #13 - 07. Июля 2008 :: 05:16
Печать  
Arta писал(а) 07. Июля 2008 :: 05:02:
Можно в принципе вообще не использовать классы, а выносить все в обработки и ГМ.
Я не представляю как можно написать нормальный удобный класс наследника ТП или Активикса без использования наследования.


Ну я же не отрицаю полностью использование наследования, есть удачные примеры, наследование чаще всего не нужно в случае например когда предполагается  Родителем сделать КОП, а в твоем случае родитель получается уже не КОП, а встроенный класс 1с++. И потом видимо с задачами по интерфейсу: ТП, Активикс, множественный фильтр наследование всё таки рулит, хотя не уверен что там нельзя было просто объявить переменную типа ТП, или Активикс ... это ущемило бы в чем то разработчика ?.
  

Информация - то, что снижает неопределенность в какой-либо области и очень важно не ошибиться областью в наш информационный век!
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #14 - 07. Июля 2008 :: 05:21
Печать  
Перехватчиком не пользуешься?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать