Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Наследование (число прочтений - 3130 )
TeMHuK
YaBB Newbies
*
Отсутствует


Иду в тумане

Сообщений: 7
Зарегистрирован: 17. Марта 2007
Наследование
23. Марта 2007 :: 12:40
Печать  
Никак не могу понять, в доках говорится: Цитата:
    Наследование - это обобщение объектов за счет выведения общего поведения в логически связанных сущностях проекта. , Возможность возможность повторно использовать код и отделить интерфейс объекта от его реализации с целью повышения взаимозаменяемости и расширения частей системы без перепрограммирования и дополнительного тестирования множества модулей. Наследование позволяет представить на логическим уровне модель проектирования учетной системы более приближенно к проектируемой области. Наследование необходимо реализовать для достижения следующих целей:
    * уменьшение зависимостей не связанных между собой логически частей учетной системы;
     * уменьшение написания и тестирования кода для связанных между собой логически понятий объектов системы;
     * возможность расширения существующего функционала;
     * концентрирование кода алгоритма в одном программном модуле с четко определенным интерфейсом его использования, что позволит вносить изменения в алгоритм и осуществлять его исправление без необходимости проверки и исправления всего зависящего от него кода.;
     * для разделения функционала на три логических уровня: уровень интерфейс пользователя, уровень бизнес-логики, уровень сохранения/получения (персистентность) результатов и объектов, другими словами - уровень взаимодействия с БД.;
     * повторяемость кода или наследуемость кода базового класса его наследниками.

Вроде бы текст связный, и слова все знаю, а в единую картину не складывается. Объясните пожалюйса на примере: создаем ТЗ = СоздатьОбъект("Общие.ТаблицаЗначений");
То есть понятно, что мы создаем класс "Общие", для которого базовым классом является класс "ТаблицаЗначений".
Но только вот не могу понять зачем? Зачем нужен класс "Общие"? Почему нельзя воспользоваться базовым классом? Прекрасно осознаю что раз функционал заложен, то он нужен и может использоваться, но не понимаю как. Растолкуйте пожалуйста  Смущённый
  
Наверх
 
IP записан
 
mash
1c++ donor
Отсутствует


1C++ v. 3.0.1.23

Сообщений: 148
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наследование
Ответ #1 - 26. Марта 2007 :: 07:51
Печать  
По ООП есть множество хороших книг, в двух словах не растолкуешь. Вкратце, наследование применяется чтобы наделять объекты новым, ранее не существовавшим поведением, либо же изменять уже существующее.
Например, хочешь ты добавить к таблице значений добавить возможность поиска по нескольким значениям одновременно, ты можешь взять за основу класс ТаблицаЗначений и переопределить метод НайтиЗначение таким образом чтобы она принимал в своем аргументе не одно значение агрегатного типа для поиска, а список значений. Тогда твой класс будет в поведении идентичен базовому но у него появится новое поведение, он сможет искать не только по одному значению, но и по любому из списка.
  

Поспешность наносит ущерб
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
TeMHuK
YaBB Newbies
*
Отсутствует


Иду в тумане

Сообщений: 7
Зарегистрирован: 17. Марта 2007
Re: Наследование
Ответ #2 - 26. Марта 2007 :: 08:32
Печать  
Огромное спасибо! Стало намного понятней.
Иногда даже простые вещи не понимаешь, пока доходчиво не объяснят.
Я достаточно далек от ООП, сейчас пытаюсь осваивать по самоучителям но совета практика это не заменит.  Улыбка
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Наследование
Ответ #3 - 26. Марта 2007 :: 08:54
Печать  
TeMHuK писал(а) 23. Марта 2007 :: 12:40:
Зачем нужен класс "Общие"?


В данном случае мне лично кажется что "Общие" - это такое своего рода определенное нами "пространство имен" - потому что имя класса будет как раз "Общие.ТаблицаЗначений" - то есть Общие это не класс родитель для класса ТаблицаЗначений - а как раз вид НОВОГО класса ТаблицаЗначений (который естественно и наследует методы стандартной ТЗ c помощью операторов при определении)...
То есть точка после Общие немного вводит в заблуждение

Так к примеру в конфигурации Демо ТП и АктивИкс можно увидеть пространство имен "ТДокумент." используемое для удобства...
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
TeMHuK
YaBB Newbies
*
Отсутствует


Иду в тумане

Сообщений: 7
Зарегистрирован: 17. Марта 2007
Re: Наследование
Ответ #4 - 27. Марта 2007 :: 06:48
Печать  
То есть, здесь нет прямого обращения к родителю?

Если я правильно понимаю, то, например, класс "Документ.РасходнаяНакладная" является подчиненным классу "Документ". Илиэто не тот случай?
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Наследование
Ответ #5 - 27. Марта 2007 :: 06:54
Печать  
TeMHuK писал(а) 27. Марта 2007 :: 06:48:
То есть, здесь нет прямого обращения к родителю?

Если я правильно понимаю, то, например, класс "Документ.РасходнаяНакладная" является подчиненным классу "Документ". Илиэто не тот случай?


В случае с родными классами 1С - это так и есть
напиши создатьОбъект("Документ")... и посмотри методы и свойства объекта Документ
в данном случае они будут доступны и для наследника РасходныяНакладная...

а вот если ты напишешь создатьОбъект("Общие") - ты получишь исключение, если конечно не создал класс Улыбка "Общие"  до этого

  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
TeMHuK
YaBB Newbies
*
Отсутствует


Иду в тумане

Сообщений: 7
Зарегистрирован: 17. Марта 2007
Re: Наследование
Ответ #6 - 27. Марта 2007 :: 07:07
Печать  
Это я понимаю.
Наверное надо было написать в том случае класс "ТаблицаЗначений.Общие", чтобы показать подчиненность "Общие".  Я просто взял  образец из FAQ у fez'a.
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Наследование
Ответ #7 - 27. Марта 2007 :: 07:15
Печать  
Мне больше нравится в данном случае

class РасширеннаяТаблицаЗначений = РасширеннаяТаблицаЗначений.ert :ТаблицаЗначений

То есть явно указывать что это новый класс в системе, но расширяющий возможности стандартной ТЗ - чтобы потом не  було путаницы

Применения имени "Общие.ТаблицаЗначений" может вызвать вопросы "А что за класс Общие?"  Подмигивание - но зато это уже какая никакая группировка классов... Когда их будет 600 начнется путаница Подмигивание

Но на самом деле каждый сам решает как ему именовать классы

  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
TeMHuK
YaBB Newbies
*
Отсутствует


Иду в тумане

Сообщений: 7
Зарегистрирован: 17. Марта 2007
Re: Наследование
Ответ #8 - 27. Марта 2007 :: 07:28
Печать  
Улыбка
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Наследование
Ответ #9 - 29. Марта 2007 :: 08:53
Печать  
TeMHuK писал(а) 27. Марта 2007 :: 06:48:
То есть, здесь нет прямого обращения к родителю?

Если я правильно понимаю, то, например, класс "Документ.РасходнаяНакладная" является подчиненным классу "Документ". Илиэто не тот случай?

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 записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать