#0
by los_hooliganos
Что-то не могу въехать. По мере изучения ООП, для меня это де факто одно и тоже. Хотя в учениях об ООП это делят на 2 разные вещи. И вообще можно пример где есть наследование, но нет полиморфизма
#0
by los_hooliganos
Что-то не могу въехать. По мере изучения ООП, для меня это де факто одно и тоже. Хотя в учениях об ООП это делят на 2 разные вещи. И вообще можно пример где есть наследование, но нет полиморфизма
#0
by los_hooliganos
Что-то не могу въехать. По мере изучения ООП, для меня это де факто одно и тоже. Хотя в учениях об ООП это делят на 2 разные вещи. И вообще можно пример где есть наследование, но нет полиморфизма
#0
by los_hooliganos
Что-то не могу въехать. По мере изучения ООП, для меня это де факто одно и тоже. Хотя в учениях об ООП это делят на 2 разные вещи. И вообще можно пример где есть наследование, но нет полиморфизма
#1
by ДенисЧ
Наследование - это у объекта есть методы родителя Полиморфизм - это когда одну функцию можешь вызывать с разными параметрами. Это коротко и для чайников
#2
by vvp91
Полиморфизм - способность метода обрабатывать параметры разных типов. Наследование - способность объекта выдавать себя за родителя. В 1С протокольно все процедуры и функции полиморфны, т.е. нет платформенного ограничения на тип передаваемых значений. Например, есть в БСП функция ОбщегоНазначения.ЗначенияРеквизитовОбъекта, принимающая параметр Ссылка - этот параметр может быть любого ссылочного типа. Еще пример, можно написать метод, принимающий параметр Объект, а внутри читающий от этого объекта два поля через точку (Дата, Номер). Тогда в этот метод можно передать: - ссылку на любой документ - или данные формы документа (основной реквизит Объект) - или структуру с двумя этими полями - или выборку из запроса с двумя этими полями - или строку таблицы значений с двумя этими полями - и т.д. Это и есть полиморфизм. Наследования в 1С нет. Хотя с появлением расширений конфигурации появляется "псевдонаследование", когда переопределяется поведение методов форм и модулей.
#3
by b_ru
Наследование в 1С таки есть, но только то, что прошито в платформу, свои классы на основании родительских нельзя определять. Например, класс "Документ.РеализацияТоваровУслуг" наследуется от класса "Документ" и т.п.
#4
by GenAcid
Насколько я помню полиморфизм это способность переопределять методы и свойства предка. Возможно не прав, давно по ООП теорию не читал.
#7
by los_hooliganos
Скажем так, полиморфизм и наследование очень тесно связаны. Если считать это 2мя разными штуками. Инкапсуляция где-то в сторонке от них. Кстати обращение к свойству или методу через 2 точки как в и есть нарушение правила инкапсуляции.
#10
by los_hooliganos
Насчет вброса, я тут на выходных изучал рефлексию класса/объекта и у меня мозг окончательно взорвался.
#11
by Рэйв
да нифига они не связаны. для Полиморфизма нужно описывать каждый вариант вызова.А наследование указывается при создании класса. Учи мат часть ужеке
#17
by los_hooliganos
Автора на хабре раскритиковали, что полиморфизм нужон для интерфейсов, а не для наследников базового класса. Хотя в последнем случае он тоже работает.
#19
by spock
В компилируемых ЯП полиморфизм реализуется через наследование. Что еще обосновывать? Можно, конечно, изобрести велосипед, применив рефлексию или методы определения типов, но это колхоз.
#20
by Рэйв
Полиморфизм вообще сдлабо привязан к наследованию. Я могу создать 50 вариантов описания вызова функции Foo, но это ни на шаг не приблизит ее к классу и наследованию.
#25
by Рэйв
Вызов одноименной функции с разными типами и количества параметров. А что такое полиморфизм в твоем понимании?
#28
by woww
Полиморфизм это когда процедура может принимать значения разных типов. А наследование это когда один класс/объект может наследовать параметры от другого. Инкапсуляция это хранение данных вместо с кодом.
#30
by Encode
Полиморфизм это когда ты разные объекты объединяешь и обрабатываешь по одинаковым свойствам. Например у класса House и Car реализуем интерфейс Priceble (имеющие стоимость), и потом в коде ты можешь создать New ArrayList<Priceble>, запихнуть туда дом, машину, и вызывать у них методы своего интерфейса
#34
by Encode
Соответственно полиморфизм вытекает из наследования. Самый простой пример в java это класс Object - родитель всех классов. Ты можешь вообще любые объекты объединить в массив Object-ов и вызывать методы Object у всех них. Это и будет полиморфизм.
#35
by los_hooliganos
Получается разные конструкторы одного и того же объекта и есть полиморфизм в 1с?
#36
by woww
В 1с динамическая типизация. Значит по умолчанию все процедуры и функции полиморфны, т.к. могут принимать значения разных типов.
#37
by los_hooliganos
В чем колхозность рефлексии? Я так понимаю рефлексия нужна для разработки инструментов. Например написание калькулятора, который будет считать только по тем командам, которые я ему передам текстовым файлом.
#38
by spock
Полиморфизм - это когда компилятор сам определяет, метод какого класса дернуть. Не какую из переопределенных функций, а именно метод какого класса.
#45
by Рэйв
"полиморфизмом называется способность функции обрабатывать данные разных типов" Предельно доступно для понимания помоему:-)
#47
by spock
Ты прочитал начало wiki-статьи и решил нас научить? Читай дальше: "В сообществе объектно-ориентированного программирования под термином «полиморфизм» обычно подразумевают наследование, а использование параметрического полиморфизма называют обобщённым программированием[8], или иногда «статическим полиморфизмом»."
#51
by spock
Наследование - это расширение, переопределение функциональности. А полиморфизм - это способ реализации интерфейсного метода, через наследование.
#53
by spock
Я даже не пытался спорить. А так, да, можно сказать, что полиморфизм - это частность ООП'шного ЯП.
#56
by spock
Классическое объяснение: Работают два программиста над проектом (java/c++). Один программирует взаимодействие пользователя с программой (нажатие кнопки "Рисовать фигуру"), другой - реализует конкретную реализацию рисования фигур "Круг" или "Квадрат". Интерфейщик пишет такой код: Процедура ПриРисовании(Фигуры* Фигура, handle НаЧемРисовать) Фигура->Рисовать(НаЧемРисовать); КонецПроцедуры // ПриРисовании И он не знает, какая фигура будет рисоваться, да и не хочет знать. Второму программисту-функциональщик приходится рисовать три класса: 1. Абстрактный Класс "Фигуры" с методом Рисовать(handle) 2. Прикладной класс "Круг" с методом Рисовать(handle) 2. Прикладной класс "Квадрат" с методом Рисовать(handle) И в обоих классах "Круг" и "Квадрат" реализуется логика рисования конкретной фигуры. и в момент вызова Фигура->Рисовать(НаЧемРисовать) компилятор сам определяет какой из классов использовать, чтобы вызвать конкретную реализацию метода. Т.е. в точке вызова нет контекста, есть только тип. Сессно, что перед использованием ПриРисовании нужно где-то написать так: Фигуры* Фигура = new Круг или Фигуры* Фигура = new Квадрат
#57
by Лефмихалыч
он хочет достебаться до "с разными параметрами", ведь они, строго говоря, не совсем разные
#61
by Тролль главный
наследование - способ построения новых типов через имеющиеся (базовые типы) с возможностью собственной специализации (новые методы, поля, свойства) полиморфизм - изменение поведения функций (методов) подтипа по сравнению с базовым поведением
#62
by woww
А я сразу подумал что там где вызов функции определяется динамически, а не при компиляции. Полиморфизм перестал быть полиморфизмом.
#64
by rs_trade
Простой пример полиморфизма обычный + хотя бы в 1С. В одном случае складывает числа, в другом например строки. Интерфейс один, но результат разный и зависит от типа входных данных.
#65
by sash-ml
Полиморфизм методов(с разным количеством параметров) <> полиморфизму объектов с методами с одинаковой сигнатурой в одной иерархии наследования. - не копмилятор. + рантайм на этапе выполнения, так как неизвестно какой объект будет создан.
#66
by woww
А если у меня динамический язычек, в котором нету интерфейсов (т.к. не нужны) например JavaScript, то у меня уже нету полиморфизма?
#67
by Тролль главный
да, потому что в 1С нет типизации а вообще это совпадение сигнатур - не более то есть вот это: class A { public: void Test; } class B { public: void Test; } не полиморфизм, а просто совпадение имен
#68
by ViSo76
ДенисЧ вызов функции с разными параметрами называется перегрузка функции. Это так для чайников. Есть тип переменной типа Variant это не полиморфизм. Полный бред. Есть прототип объекта документ, то что он работает с разным количеством полей это не означает наследование.
#69
by los_hooliganos
вот полиморфизм toString в 1С: ОбработкаПолученияПредставления(<Данные>, <Представление>, <СтандартнаяОбработка>)
#70
by spock
" - не копмилятор." - и да, и нет. Конечно же компилятор не знает, какой из классов в данном конкретном случае использовать на этапе компиляции. Компилятор в таких местах вставляет обвязку из таблиц виртуальных методов.
#72
by woww
Если хочешь "понять" проблемы полиморфизма. Возьми язычек со статической типизацией типа C#, Java. В динамике проблемы полиморфизма нету.
#77
by woww
В 1с динамика там все функции изначально полиморфны. Так как проверки типов нету. И по этому интерфесы не нужны. Интерфейсы нужны язычкам в которых типы проверяются на этапе компиляции, а не в рантайме.
#78
by ViSo76
В общем представьте массив разных объектов ( circle, point, square ) порождённых от shape. В прототипе shape есть обязательно перегружаемая процедура show. Так вот идём по массиву и приводим получаемый элемент к базовому объекту и вызываем у них перегруженную функцию show. Это и будет полиморфизмом. То что переменные разных типов, так сам 1С не типизирован, и все переменные там Variant
#79
by spock
+75 Я понял в чем неточность. Конечно же прикладные классы "Круг" и "Квадрат" являются наследниками абстрактного класса "Фигуры".
#82
by ViSo76
Делегат это объект который содержит в себе вызов или батарею вызовов, а полиморфизм это изменение типа класса, тапа как хамелеон. И всё это связано лишь с тем что полиморфизм нужен лишь для типизированных языков.
#83
by Лефмихалыч
>полиморфизм - изменение поведения функций (методов) подтипа по сравнению с базовым поведением чааво?..
#86
by spock
Читаем буквально "...массив разных объектов ( circle, point, square ) порождённых от shape..." + "идём по массиву... и вызываем ...show...".
#88
by Лефмихалыч
+ какое в пень " поведение"? вот, на мой взгляд, отличное определение: "Если говорить кратко, полиморфизм — это способность обьекта использовать методы производного класса, который не существует на момент создания базового" ты бредишь
#89
by woww
Ну не только для языков со статической типизацией. С хорошим полиморфизмом гораздо удобнее работать и в динамике. Ведь удобно когда метод определяется не только проверкой типа, а еще может проверяет значение типа. Такое таким язычкам как C#, java и не снилось.
#90
by Dotoshin
Все достаточно просто. Класс наследник получает от класса родителя все его свойства и методы так сказать по умолчанию, то есть есть все эти свойства будут присутствовать у наследника уже при "рождении" - это наследование. А полиморфизм - это многократное описание одного и того же метода для разных случаев. При этом не важно был этот метод унаследован или был описан "с нуля". Например класс может иметь метод "сложить", в зависимости от типа параметров он будет действовать по разному. Получит на входе две строки - на выходе будет конкатенация этих строк. Получит два числа - на выходе будет сумма чисел. Ну и т.д.
#92
by Рэйв
Как ни жаль но он прав. Если стоит overload в ролительстком, то в наследуемом классе можешь написать там что угодно.
#95
by Dotoshin
Все правильно в сказано. Может существовать класс с абстрактным методом - это как бы базовое поведение, а в классах наследниках будет описано поведение этого метода для разных типов параметров.
#96
by Лефмихалыч
к полиморфизму это каким боком? Это наследование, точнее возможности управления наследованием в разных языках. Полиморфизм - это когда ты делаешь один метод с неким поведением относительно базового класса и в него можшь передавать любых потомков этого базового класса
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Зуп (Добавление своего варинта отчета в типовой СКД)
- УФ, как определить название отчета в конфигураторе из варианта в предприятии?
- Как списывается себестоимость при перемещении товара между складами?
- Регистр накопления обороты
- Подключение весов Масса-К ВП-15 т.2
- УТ 11.2 Автоматически меняется дата отгрузки по заказу покупателя
- Вытащить адрес УТ 11.2
- Выгрузка данных в Excel по ШАБЛОНУ (((8.х ОФ)))
- УТ 11.2 Органайзер
- Специалист по платформе 8.3 Оперативный учет. Второй регистр накопления
- Можно в расширении изменять код процедур или функций не обработчиков?
- 1С ERP 2 ABC-анализ номенклатуры
- Маленькая задачка, проснуться и размяться
- Бух 3.0 подмена регистратора в регистре бухгалтерии
- Ширина колонок таблицы значений, добавляемой программной
- Конвертация данных. Отбор по значению.
- УФ копировать ТЧ из одной формы в другую
- ЗУП 3.0 Утверждение штатного расписания ошибка Организация заполнено не верно
- перезапись кодов номенклатуры
- v7: Разная цена одинаковой номенклатуры в документе