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



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

нет
  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #16 - 07. Июля 2008 :: 11:12
Печать  
Просто с ним еще нагляднее.
Ладно, как говорится на вкус и цвет...
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Обращение к методам класса
Ответ #17 - 08. Июля 2008 :: 07:11
Печать  
А всегда полезно делать классы с наследниками?
Как отражается на скорости класса, что быстрее сравнение в Если или вызов вирт. функции?
На сколько страдает наглядность кода, удобсво просматривания(изучения, в одном файле или нескольких)?
А при изменении кода(логики) родителя, незабыть исправить(добавить) во всех потомках?

Что удобнее?  Подмигивание
  
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #18 - 08. Июля 2008 :: 07:18
Печать  
PVR писал(а) 08. Июля 2008 :: 07:11:
А всегда полезно делать классы с наследниками?
Как отражается на скорости класса, что быстрее сравнение в Если или вызов вирт. функции?
На сколько страдает наглядность кода, удобсво просматривания(изучения, в одном файле или нескольких)?
А при изменении кода(логики) родителя, незабыть исправить(добавить) во всех потомках?

Что удобнее?  Подмигивание


Наверное тут Артур или Федор должны сказать свое веское слово Улыбка
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Обращение к методам класса
Ответ #19 - 08. Июля 2008 :: 07:36
Печать  
Смех эт я просто так.
Каждый программист решает для себя сам, исходя из условий конкретной задачи Подмигивание
И это КЛАСС! Улыбка
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #20 - 08. Июля 2008 :: 07:38
Печать  
PVR писал(а) 08. Июля 2008 :: 07:11:
А при изменении кода(логики) родителя, незабыть исправить(добавить) во всех потомках?

+1
Это очень большая сложность применения наследования наделаешь наследников от предка, а потом оказывается что либо 90 % приходится переписывать в нем от родителя, либо что ещё хуже смысл предка теряется вовсе
  

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


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #21 - 08. Июля 2008 :: 09:10
Печать  
Весь смысл наследования как раз и состоит в однократном/редком задании кода алгоритма родителя и добавления вариативности поведения к этому алгоритму путем добавления спец. методов в наследниках, т.н. виртуальных функциях.
И если ты часто переписываешь код родителя, совершенно его так меняя, что приходится и код наследников менять, то это проблема твоего проектирования Печаль

В наследнике как раз никогда не нужно переписывать код от родителя, наследник должен уметь пользоваться кодом родителя.

Пример наследования:
Документ - Документ.СчетФактура
В родителе описан метод Записать(), вызывающий Виртуальный метод ВыполнитьЗапись()
1. В Документе код ВыполнитьЗапись() - проверка прав, даты запрета редактирования и т.д. универсальные действия для любых документов
2. В Счет-Фактуре код ВыполнитьЗапись() - вызов родительского ВыполнитьЗапись(), если он возвращает 1, то выполняем спец.действия только для счет-фактуры.
В коде класса Счет-Фактура нет кода для исходного Записать(), есть только ВыполнитьЗапись()

Как видите, никакого дублирования.

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

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #22 - 08. Июля 2008 :: 09:12
Печать  
+100 Улыбка
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Обращение к методам класса
Ответ #23 - 08. Июля 2008 :: 09:27
Печать  
+100 с оговоркой, что все зависит от специфики кода и нужности класса как родителя Улыбка
Повторюсь классы и ООП, это КЛАСС!
Не зря ведь в языках высокого уровня всё на них  Подмигивание
  
Наверх
 
IP записан
 
PVR
God Member
*****
Отсутствует



Сообщений: 622
Зарегистрирован: 19. Ноября 2007
Пол: Мужской
Re: Обращение к методам класса
Ответ #24 - 08. Июля 2008 :: 09:45
Печать  
Еще плюс Вирт. функций, это их вызов из других языков прогр.  Улыбка
но это к 1С не относится  Подмигивание
  
Наверх
 
IP записан
 
ev-kov
God Member
*****
Отсутствует



Сообщений: 694
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #25 - 08. Июля 2008 :: 10:32
Печать  
artbear писал(а) 08. Июля 2008 :: 09:10:
Весь смысл наследования как раз и состоит в однократном/редком задании кода алгоритма родителя и добавления вариативности поведения к этому алгоритму путем добавления спец. методов в наследниках, т.н. виртуальных функциях.
И если ты часто переписываешь код родителя, совершенно его так меняя, что приходится и код наследников менять, то это проблема твоего проектирования Печаль

В наследнике как раз никогда не нужно переписывать код от родителя, наследник должен уметь пользоваться кодом родителя.

Пример наследования:
Документ - Документ.СчетФактура
В родителе описан метод Записать(), вызывающий Виртуальный метод ВыполнитьЗапись()
1. В Документе код ВыполнитьЗапись() - проверка прав, даты запрета редактирования и т.д. универсальные действия для любых документов
2. В Счет-Фактуре код ВыполнитьЗапись() - вызов родительского ВыполнитьЗапись(), если он возвращает 1, то выполняем спец.действия только для счет-фактуры.
В коде класса Счет-Фактура нет кода для исходного Записать(), есть только ВыполнитьЗапись()

Как видите, никакого дублирования.

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


Универсальными классами Отчет, Документ не пользуюсь, классы применяю для выноса расчетных алгоритмов, либо просто для выделения блока глоб. функций в отдельный ert, есть ещё пара классов специфичных по проверке табл частей документа и т.д., удобство тут конечно в основном инкапсуляция. Вот для этих задач наследование ну никак не годится.

Согласен Документ -> Документ.РасходнаяНакладная может и удобно тому кто переписывает на классы работу стандартных методов типа 1с Документ, интересно а для чего оно нужно это переписывание, чтобы внести новую функциональность ?
  

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



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Обращение к методам класса
Ответ #26 - 08. Июля 2008 :: 11:55
Печать  
ev-kov писал(а) 08. Июля 2008 :: 10:32:
интересно а для чего оно нужно это переписывание, чтобы внести новую функциональность ?

1. Написал один раз и навсегда событие ПриКонтекстномМеню в наследнике ТП, и создаешь везде этого наследника, а не просто ТП.
И в любом месте будет вызываться необходимый тебе механизм контекстного меню. Явный пример наследования.
2. А вообще - возьми демо-конфу с классами в ветке Репозиторий. Думаю что вопросы будут сняты.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать