powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Определение полиморфизма?
61 сообщений из 61, показаны все 3 страниц
Определение полиморфизма?
    #34460601
GerdaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулась с темой "трёх китов" ООП и выяснилось, что полиморфизм, прямо какая-то "тёмная лошадка" его либо понимают, но не могут коротко и ясно сформулировать, либо дают разные определения не охватывающие всей полноты этого понятия, а какое определение или трактование полиморфизма знаете вы?
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34460657
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, что рассматрение полиморфизма "в общем" - пустая трата времени. Это настольно всебъемлющее и эфемерное понятие, что никаких конкретных изысканий вы не сможете из него почерпнуть. Думаю что в этом корень всех зол. Конечной станцией в этом случае будет холивар между участниками топика и взаимообвинения в ереси и подрыве основ. Поэтому я предлагаю такую постановку закрыть и не рассматривать. Если вы программируете на Java - то лучше спросите у сообщества побольше практических рекомендаций по применению полиморфизма в данном ЯП. Это позволит вам сегодня избежать ненужных рысканий в стороны и быстрее достичь конкретной цели. В будущем-же, поднаторев в имплементациях данного предмета, вы сможете расширить и обобщить его на другие языки и системы без искажения "картины знаний".
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34460735
dr-Wicked
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это подойдёт?
Лично я его понимаю примерно так
Полиморфизм происходит от двух слов Поли (много) морфус(форма) (простите мой древнерязанский)
Полиморфизм - это методика синтеза при моделировании групп сущностей, обеспечивающая обобщение воздействия на состояние конечного объекта.
Профанация науки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
interface Раскатываемый{
   void ПолиморфноеРаскатывание();
}
class Тесто:Раскатываемый{
   public void ПолиморфноеРаскатывание(){
      ВзятьСкалку();
   }
}
class Асфальт:Раскатываемый{
   public void ПолиморфноеРаскатывание(){
      ЗаказатьКаток();
   }
}

Regards
dr-Wicked
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34460776
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GerdaSСтолкнулась с темой "трёх китов" ООП и выяснилось, что полиморфизм, прямо какая-то "тёмная лошадка" его либо понимают, но не могут коротко и ясно сформулировать, либо дают разные определения не охватывающие всей полноты этого понятия, а какое определение или трактование полиморфизма знаете вы?

я знаю


http://users.i.com.ua/~agp1/ru/oopFormalizm.html
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34460777
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34460883
A.D.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, как не сильно давно занимающий изучением программирования, могу сказать, как это понимаю я (как дилетант).
Проще всего, наверное, объяснить это с точки зрения объетов реального мира.
Итак. Есть объект СОБАКА и она ЛАЕТ. (В терминах Java: СОБАКА - это базовый класс, а ЛАЙ - метод этого класса)
Но есть порода собаки СПАНИЕЛЬ и есть порода КАВКАЗСКАЯ ОВЧАРКА (СПАНИЕЛЬ и КАВКАЗСКАЯ ОВЧАРКА - это объекты порожденные от СОБАКИ (разновидности, если хотите)
Так вот. Предположим, что СПАНИЕЛЬ ЛАЕТ:"Гав-гав" (реализация метода ЛАЙ у СПАНИЕЛЯ), а КАВКАЗСКАЯ ОВЧАРКА ЛАЕТ:"Вуф-вуф". (реализация метода ЛАЙ у КАВКАЗСКОЙ ОВЧАРКИ)
Т.е. у СОБАК в общем ЛАЙ, но у каждой из пород он РЕАЛИЗУЕТСЯ по-своему. Т.е. имеем "многоформие" (Polymorphism) ЛАЯ.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34463516
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GerdaSа какое определение или трактование полиморфизма знаете вы?
полиморфизм - это частный случай вызова процедуры-функции по образцу. В качестве образца может использоваться довольно сложная система шаблонов. В простейшем случае по сигнатуре. Существовало задолго до появления ООП и с ним никак не связано.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34463790
javaScript!=java
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мод GerdaSа какое определение или трактование полиморфизма знаете вы?
полиморфизм - это частный случай вызова процедуры-функции по образцу. В качестве образца может использоваться довольно сложная система шаблонов. В простейшем случае по сигнатуре. Существовало задолго до появления ООП и с ним никак не связано.

Давай по порядку.

Каждая функция имеет определение (имя (для Л-фунций оно генерится автоматически и нам не известно), входные и выходное параметры).

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

В ряде языков имеется возможность связать переменную с функцией.
При этом одну и ту же переменную можно связать с разными функциями имеющими одинаковую или различную сигнатуры (в ряде языков).
Т.к. функциональная переменная может указывать на произвольную функцию, появляется эффект гордно именуемый мод'ом полиморфизмом.

Очевидно, что это явление не имеет никакого отношения к полиморфизму, о котором говорится при упоминании букв ООП.

Очевидность складывается из двух моментов.
1. Никто не отменял в ООЯ возможность использования такого же точно "полиморфизма"
2. Полиморфизмом в ООП называется возможность при наследовании изменить реализацию метода класса родителя.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34463896
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javaScript!=java
На этом этапе полиморфизм может быть только параметрический (т.е. может быть несколько функций с одним именем в одной области видимости, но обязательно с разными параметрами).
Такой полиморфизм полиморфизмом называется только из жалости и рассматривать его не стоит.

Почему же не стОит, ведь именно это и реализовано в ООП. Одно и то же имя и разный тип одного аргумента.
javaScript!=java
Т.к. функциональная переменная может указывать на произвольную функцию, появляется эффект гордно именуемый мод'ом полиморфизмом. Очевидно, что это явление не имеет никакого отношения к полиморфизму, о котором говорится при упоминании букв ООП.
Вы что то перепутали, об этом речи не было и это действительно не по теме.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34463940
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Полиморфизм - возможность переопределить уналедованные от родительского класса поля и методы.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34463965
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод javaScript!=java
На этом этапе полиморфизм может быть только параметрический (т.е. может быть несколько функций с одним именем в одной области видимости, но обязательно с разными параметрами).
Такой полиморфизм полиморфизмом называется только из жалости и рассматривать его не стоит.

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

- здесь речи идет не о полиморфизме, а о перегрузке методов (не путать с переопределением!), т. е. overloading, а не overwriting. Или я не догнал?
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34464030
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovПолиморфизм - возможность переопределить уналедованные от родительского класса поля и методы.
Кажется это называется Наследование
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34464047
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov
- здесь речи идет не о полиморфизме, а о перегрузке методов (не путать с переопределением!), т. е. overloading, а не overwriting. Или я не догнал?
ПМСМ перегрузка это способ реализации полиморфизма.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34464136
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод KachalovПолиморфизм - возможность переопределить уналедованные от родительского класса поля и методы.
Кажется это называется Наследование
- ключевое слово "переопределить" :)
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34464338
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GerdaS... а какое определение или трактование полиморфизма знаете вы?

Мне, например, нравится вот этот флейм 3-х годичной давности... (читать про полиморфизм можно прямо вниз, начиная с цитируемого поста, до этого - просто разной степени вялости холи-вары "against FoxPro").
Тоже, ведь, люди что-то для себя выясняли, решали, спорили, доказывали друг-другу...
Теперь, по большей части - молчат...
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34464351
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kachalov- ключевое слово "переопределить" :)
Сорри, невнимателен. Однако поля (свойства) вроде здесь не причем, только методы.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34464389
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewТоже, ведь, люди что-то для себя выясняли, решали, спорили, доказывали друг-другу...
Теперь, по большей части - молчат...
Наверное все уже выяснили :)
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34464403
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод Kachalov- ключевое слово "переопределить" :)
Однако поля (свойства) вроде здесь не причем, только методы.
- ?? В Java сейчас точно можно переопределять типы полей, наверное и в других объектных языках то же. По моему это полиморфизм - в родителе поле x типа byte, а в наследнике поле х типа long - произошло переопределение типа для поля x.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34464480
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GerdaSСтолкнулась с темой "трёх китов" ООП и выяснилось, что полиморфизм, прямо какая-то "тёмная лошадка" его либо понимают, но не могут коротко и ясно сформулировать, либо дают разные определения не охватывающие всей полноты этого понятия, а какое определение или трактование полиморфизма знаете вы?
http://ru.wikipedia.org/wiki/Полиморфизм_в_языках_программирования
www.google.com "define: полиморфизм"
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34465204
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KachalovПо моему это полиморфизм - в родителе поле x типа byte, а в наследнике поле х типа long - произошло переопределение типа для поля x.
Это опасный трюк. Общее св-во родителя и потомков должно иметь один тип (так же как и сигнатура наследованных методов).
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34465751
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод KachalovПо моему это полиморфизм - в родителе поле x типа byte, а в наследнике поле х типа long - произошло переопределение типа для поля x.
Это опасный трюк. Общее св-во родителя и потомков должно иметь один тип (так же как и сигнатура наследованных методов).
- так делать можно - это факт, а нужно ли так делать и когда это другой вопрос.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34466006
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод KachalovПолиморфизм - возможность переопределить уналедованные от родительского класса поля и методы.
Кажется это называется Наследование

Ваше знание ООП ограничивается отсутствием такового.

В формуле "ООП = Инкапсуляция + Наследование + Полиморфизм" не зря упоминается и наследование, и полиморфизм, а не что-то одно.

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

Н-р, записи:
а)
fun parseInt(text: string): int
fun parseInt(text: string, radix: int): int

и

б)
fun parseInt(text: string): int
fun parseIntUsingRadix(text: string, radix: int): int

абсолютно эквиваленты, т.к. для компилятора/интерпретатора нет никакой разницы между этими вариантами.

Более того, существует мнение, что сама возможность определять функции с одинаковыми именами, только вносит путаницу в ум человека разбирающего код.


Остаются ещё два варианта полиморфизма - статический и динамический.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
сlass X {
     fun parseInt(text: string): int
}

class Y extends X {
     fun parseInt(text: string): int
}

//Динамический полиморфизм. Выбор вызываемого метода зависит от "runtime" типа объекта, на который указывает переменная v 
//(вместо "var" в статически типизированных языках будет указан тип X):

var v1 =  new X;
v1.parseInt(...); // == X.parseInt;

var v2 =  new Y;
v2.parseInt(...); // == Y.parseInt;


//Cтатический полиморфизм. Выбор вызваемого метода зависит от типа переменной 
//(существует только в статически типизированых языках):
X v1 =  new X;
v1.parseInt(...); // == X.parseInt;

X v2 =  new Y;
v2.parseInt(...); // == X.parseInt;


В ООЯ полиморфизма без наследования не может быть, но наследование без полиморфизма - запросто:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
сlass X {
     fun parseInt(text: string): int
}

class Y extends X {
     fun parseIntUsingRadix(text: string, radix: int): int
}

Y y = new Y;
y.parseInt(...); // - используется метод унаследованны от родителя.


Разрешать или не разрешать переопределение методов в наследниках зависит от спецификации конкретного языка.
Н-р, в с++ по умолчанию методы не могут быть переопределены в наследнике.

Обычно, термин полиморфизм в контексте ООЯП используется для обозначения динамического полиморфизма, т.к. это самая интересная и полезная в хозяйстве его разновидность.
Параметрический и статический полиморфизм "не интересны", так как вызовы методов при этом разрешаются на этапе анализа исходного кода, а как показывает практика, создание гибких решение при использование одного только статического связывания затруднено и требует ведения либо функциональных переменных, либо вызова функций по их текстовым именам (рефлекшин и т.п.).
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34466775
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsВ ООЯ полиморфизма без наследования не может быть, но наследование без полиморфизма - запросто:
Полиморфизм прекрасно существовал и существует и без наследования и без ООЯ.
Все остальное - пересказ учебника.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34467382
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод NotGonnaGetUsВ ООЯ полиморфизма без наследования не может быть, но наследование без полиморфизма - запросто:
Полиморфизм прекрасно существовал и существует и без наследования и без ООЯ.
Все остальное - пересказ учебника.

Мод, если ты считаешь, что отлично владеешь данной темой, то раскидай на пальцах, где я не прав и в чём истина на самом деле.

Судя по твоим сообщениям, ты даже не читаешь то, на что отвечаешь.

Читающие этот топик, разве я не прав? :)
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34467611
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUs... где я не прав и в чём истина на самом деле...? :)

Истина, как известно, бывает только в 2-х местах: либо - "в вине", либо - "где-то рядом..."

А если по-существу, то мне кажется, что мод имелл ввиду то, что общее понятие полиморфизм -а не ограничивается рамками ООП/ООЯ...

Живой пример: определение функции map в Haskell - map :: (x -> y) -> [x] -> [y], x и y - абсолютно "полиморфные" типы, независимые друг-от-друга, реализуемые бесконечным количеством "реальных" воплощений.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34468461
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavewА если по-существу, то мне кажется, что мод имелл ввиду то, что общее понятие полиморфизм -а не ограничивается рамками ООП/ООЯ...

Вот именно. Примеров можно привести много, особенно в обработке данных.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34472054
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavew
Живой пример: определение функции map в Haskell - map :: (x -> y) -> [x] -> [y], x и y - абсолютно "полиморфные" типы, независимые друг-от-друга, реализуемые бесконечным количеством "реальных" воплощений.

Во-первых, тема начинается со слов "Столкнулась с темой \"трёх китов\" ООП ",
поэтому речь идёт именно о полиморфизме в ООП. Это важно помнить, т.к. математикам свойственно одно и тоже слово в разных прикладных областях использовать по своему.

Возвращясь к вашему примеру. Слова 'x,y - абсолютно "полиморфные" типы' вообще лишены смысла, т.к. в данном случае полиморфным типом является тип функции map, а типы x и у могут быть любые.
Опять же, конструирование полиморфных типов в хаскель никак не соотносится с понятием полиморфизма в ООЯ'ах. Для таких целей используется параметризация типов. Н-р:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 interface  Fun<X, Y> {
    Y eval(X x);
}

 class  EvilFunctions {
     public   static  <X, Y> List<Y> map(List<X> xs, Fun<X, Y> fun) {
        List<Y> ys =  new  ArrayList<Y>(xs.size());
         for  (X x : xs) {
            ys.add(fun.eval(x));
        }
         return  ys;
    }
}

//usage:

        List<String> strings =  new  ArrayList<String>();
        strings.add("1");
        strings.add("11");
        strings.add("111");

        List<Integer> lengths = EvilFunctions.map(strings,
                 new  Fun<String, Integer>() {
                     public  Integer eval(String s) {
                         return  s.length();
                    }
                });

        List<Object> objects =  new  ArrayList<Object>();
        objects.add("1");
        objects.add( 2 );
        objects.add( new  ArrayList<HashMap>());

        List<String> asStrings = EvilFunctions.map(objects,
                 new  Fun<Object, String>() {
                     public  String eval(Object s) {
                         return  s.toString();
                    }
                });



Во-вторых, когда модободобные любители ФЯ начинают исходиться желчью слыша об ООЯ'ах и
Модератор:
предупреждение



называя их обрубками и обрезками истинных и гармоничных концепций, дарованых божественным предком всех языков программирования, они забывают, что базис в котром описывать свойства языков существует не в единственном числе. И так же точно, как ООЯ можно описывать в терминах ФЯ, также и ФЯ можно выразить через термины ООЯ.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34472062
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод dejavewА если по-существу, то мне кажется, что мод имелл ввиду то, что общее понятие полиморфизм -а не ограничивается рамками ООП/ООЯ...

Вот именно. Примеров можно привести много, особенно в обработке данных.

Точно. Например, можно привести много примеров того, как разводятся и плодятся кролики.

Только какое отношение эти примеры будут иметь к полиморфизму в ООЯ?
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34472542
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
Модератор:
предупреждение


Прошу великодушного нисхождения к словесным излишествам, кои я (в порыве запальчивости) имел неосторожность употребить.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34472638
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUs... когда модободобные любители ФЯ начинают исходиться желчью слыша об ООЯ'ах и ...
называя их обрубками и обрезками истинных и гармоничных концепций, дарованых божественным предком всех языков программирования, они забывают...

Что за слова-то такие "модободомодободомодободомодободо" ты выдумываешь "в порыве запальчивости"?

И кто тут относил себя к "любителям ФЯ", а уж тем более - "исходился желчью", называл что-то "обрубками и обрезками" (кроме тебя самого)?

Модератор:
позвольте Вам напомнить, что поведение мембров буду только я обсуждать.
Вам не стоит напрягаться.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34472746
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavew NotGonnaGetUs... когда модободобные любители ФЯ начинают исходиться желчью слыша об ООЯ\'ах и ...
называя их обрубками и обрезками истинных и гармоничных концепций, дарованых божественным предком всех языков программирования, они забывают...

Что за слова-то такие "модободомодободомодободомодободо" ты выдумываешь "в порыве запальчивости"?

И кто тут относил себя к "любителям ФЯ", а уж тем более - "исходился желчью", называл что-то "обрубками и обрезками" (кроме тебя самого)?

Всё просто.

В данном топике имели место слова о том, что
"полиморфизм - это частный случай вызова процедуры-функции по образцу"
"Полиморфизм прекрасно существовал и существует и без наследования и без ООЯ."

В другом топике мод высказал своё однозначное отношение к ООП /topic/379368&pg=1

mod
NotGonnaGetUs
Мне очень любопытно понять с какой колокольни ты смотришь на ООП и почему оно вызывает у тебя такую необычную реакцию отторжения.


Смотрю как на синтаксическое извращение причем практически бесполезное.



Но это всё лирика. Как насчёт дискуссии по существу вопроса? :)
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34472764
мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUsречь идёт именно о полиморфизме в ООП
При такой постановке вопроса конечно обсуждать нечего, и так все ясно. Однако большинство задач обработки данных использует полиморфизм (явно или неявно), но не использует ООП, что и создает определенные проблемы.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34473104
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мод NotGonnaGetUsречь идёт именно о полиморфизме в ООП
При такой постановке вопроса конечно обсуждать нечего, и так все ясно. Однако большинство задач обработки данных использует полиморфизм (явно или неявно), но не использует ООП, что и создает определенные проблемы.

"Определённые проблемы" вызывает не то, что в каких-то задачах что-то используется, а непоследовательность в рассуждениях.

В общем случае, полиморфизм - это возможность иметь много форм.
В частости, в пределах одного вида могут быть резко отличные по облику особи, не имеющие переходных форм (мужчины/женщины), одно и тоже вещество может принимать разные кристалические формы, функция может иметь много реализаций.

При таком широком взгляде, использование любой спецификации не определяющей реализацию (будь то интерфейс объекта, сингнатура функции, именованная ссылка) можно рассматривать как пример полиморфизма в действии и говорить, что в "большинстве задач" таковой используется.

Беда в том, что такие формулировки слишком общи, а потому мало полезны.

Какой практический смысл называть полиморфизмом возможность присвоить функциональной переменной ссылку на различные функции с одинаковой сигнатурой, если это просто "присвоение переменной значения"? Для галочки "полиморфизм тут был"?

Тоже самое относится к возможности одинаково именовать функции с разными сигнатурами, т.н. параметрический полиморфизм.

И ещё меньше смысла, отвечая на вопрос про то, что такое полиморфизм в ООП, говорить, что это "частный случай вызова процедуры-функции по образцу", т.к. это равносильно следующему ответу на вопрос "что такое круг?": "круг - это проекция цилиндра, конуса, полусферы, другой диковинной шутки на двухмерную поверхность (нужное подчеркнуть)".


Но, как обычно, все останутся при своих мнениях :)
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34473206
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NotGonnaGetUs...В другом топике мод высказал своё однозначное отношение к ООП /topic/379368&pg=1
... Но это всё лирика. Как насчёт дискуссии по существу вопроса? :)

Ну, в другом топике бы его и "клеймил" своими "модободо", причем, в ответ на цитаты из его постов, а не из моих... (а то как-то странно все это выглядит со стороны).

А насчет т.н. "дискуссии по существу вопроса" - что, собс-нно, обсуждать-то?
Если твою нелюбовь к ФП/ФЯ (и всему, что так или иначе косвенно пересекается с мод -ом "в другом топике"), то тут я - пас...
Если твое вИдение полиморфизма в ООП/ООЯ - тогда уж лучше переместиться тот "в другой топик", там по крайней мере высказывания более-менее адекватных людей попадаются, а не только "модободо"-фобов...
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34473363
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavew NotGonnaGetUs...В другом топике мод высказал своё однозначное отношение к ООП /topic/379368&pg=1
... Но это всё лирика. Как насчёт дискуссии по существу вопроса? :)

Ну, в другом топике бы его и "клеймил" своими "модободо", причем, в ответ на цитаты из его постов, а не из моих... (а то как-то странно все это выглядит со стороны).

А насчет т.н. "дискуссии по существу вопроса" - что, собс-нно, обсуждать-то?
Если твою нелюбовь к ФП/ФЯ (и всему, что так или иначе косвенно пересекается с мод -ом "в другом топике"), то тут я - пас...
Если твое вИдение полиморфизма в ООП/ООЯ - тогда уж лучше переместиться тот "в другой топик", там по крайней мере высказывания более-менее адекватных людей попадаются, а не только "модободо"-фобов...

1. Хмм... Вообще-то я очень люблю фя, но не люблю тех, кто делает из них культ :)

2. "По-существу" - первая часть моего ответа на ваше сообщение.

3. Моё видение полиморфизма в ООЯ (озвученное в предыдущих сообщениях) совпадает с общеизвестным. Единственно, я добавил в него свою оценку ценности того или иного вида полиморфизма. Я с удовольствием послушаю и пообсуждаю другие видения и оценки :)

4. Я не отношу вас к тем личностям, намёк на которых сделал, употребив слово начинающеся на "м" и кончающееся на "е". Если вам так показалось, покорнейше прошу прощения.
В "во вторых" говорится о том, что пользоваться абстракциями ФЯ для описания абстракций ООЯ или наоборот, довольно глупо, т.к. в обоих подходах достаточно мощности, чтобы выразить друг друга.

Модератор:
с этого момента переходим к полиморфизму.
Особенно это касается dejavew
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34475322
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Модератор:позвольте Вам напомнить, что поведение мембров буду только я обсуждать.
Вам не стоит напрягаться.


Модератор:с этого момента переходим к полиморфизму.
Особенно это касается dejavew


Ну, ба-лин, ваще-е-е-е...
Слыхал я, что на форумах SQL-RU модераторы, мягко говоря, не могут похвастаться адекватностью, но такого гипертрофированого комплекса неполноценности еще поискать...

Да, плевать мне на полиморфизм, честно говоря, пусть его обсуждают те, у кого есть с этим проблемы...

Мне гораздо интересней, откуда это "мембр" NGGU извлек такой хитро-вые...ный ООЯ, в котором можно ad-hoc определять реализацию интерфейсов прямо в конструкторе экземпляра фактически еще несуществующего класса?
(я об этом "пассаже"):
Код: plaintext
1.
2.
3.
4.
5.
6.
...
<something, f.e. second map() parameter> = new Fun<Object, String>() {
                    public String eval(Object s) {
                        return s.toString();
                    }
...
Это что - Java 7, C#3.0 или что-то "из головы" приводящего примеры?
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34475564
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavew Мне гораздо интересней, откуда это "мембр" NGGU извлек такой хитро-вые...ный ООЯ
Это что - Java 7, C#3.0 или что-то "из головы" приводящего примеры?мне показалось, что этот код относится к вот этому пассажу
NotGonnaGetUsконструирование полиморфных типов в хаскель

возможно я не прав, надеюсь, NotGonnaGetUs пояснит.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34475628
dejavew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
4321мне показалось, что этот код относится к вот этому пассажу
NotGonnaGetUsконструирование полиморфных типов в хаскель


Да нет, синтаксис очень напоминает Java ("toString()" у объектов и "add()" у стандартных коллекций с маленькой буквы, "HashMap" в качестве встроенного типа).
Но что-то я не припомню, чтобы в существующих версиях Java были уже реализованы "анонимные" классы (по-моему, сан-техники даже еще до "анонимных" методов не добрались).
Хотя, может быть - отстал от жизни...
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #34475812
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dejavew 4321мне показалось, что этот код относится к вот этому пассажу
NotGonnaGetUsконструирование полиморфных типов в хаскель


Да нет, синтаксис очень напоминает Java ("toString()" у объектов и "add()" у стандартных коллекций с маленькой буквы, "HashMap" в качестве встроенного типа).
Но что-то я не припомню, чтобы в существующих версиях Java были уже реализованы "анонимные" классы (по-моему, сан-техники даже еще до "анонимных" методов не добрались).
Хотя, может быть - отстал от жизни...

Анонимные классы появились в java чуть ли не с версии 1.1, если мне изменяет память. Если изменят, то с версии 1.2.

Генерики появились в java в версии 1.5, до этого просуществовав в течении нескольких лет ввиде расширения к стандартной java (н-р, http://pizzacompiler.sourceforge.net/ , которые предлагает помимо прочего поддержку first-class функций и алгебраических типов).

В java 1.6 появилась поддержка исполнения скриптовых языков.

В java 1.7 будут полноценные замыкания, которые упростят синтаксис применяемый сейчас при создании анонимных классов с одним методом и позволят достаточно элегантно использовать многие общепринятые в фя способы обработки данных (в частности левые/правые свёртки, etc).

С# 3.0 (см.проект LINQ, http://msdn2.microsoft.com/en-us/vcsharp/aa336745.aspx) пошёл ещё дальше и обещает собрать в себе многие вкусности из ФЯ.

Язык Nemerle создаваемый на базе .NET (http://nemerle.org/Main_Page) представляет собой фактически самый интересный гибрид ОО и Ф парадигм.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Определение полиморфизма?
    #36769364
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On Understanding Types, Data Abstraction, and Polymorphism. Luca Cardelli, Peter Wegner
Similarity relations among
type expressions that permit a type expression to denote more than one type, or to be compatible with many types, are referred to as polymorphism.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36769918
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NotGonnaGetUs
Параметрический полиморфизм не является полиморфизмом как таковым. О чём уже не однократно писалось в этом форуме (в том числе и мной).

Н-р, записи:
а)
fun parseInt(text: string): int
fun parseInt(text: string, radix: int): int

это не параметрический полиморфизм
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36770334
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36770336
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36770339
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36770753
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tchingiz,

А это что ?
Код: plaintext
1.
func f(x) return x
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36770902
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_модtchingiz,

А это что ?
Код: plaintext
1.
func f(x) return x

параметрический полиморфизм, очевидно же, функция типа
f :: a -> a

и называется она identity (в CL/Scheme) или id (в Haskell)
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36771021
Фотография kosh the best
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для себя решил, что если спросят про полиморфизм на собеседовании или еще где, то ничего на словах объяснять не буду. Просто приведу куски кода на том языке, который предположительно на будущей работе будет чаще всего использоваться. Например, для С++ - динамический полиморфизм, реализуемый через механизм наследования и таблицы виртуальных функций, и статический, реализуемый через шаблоны. Также скажу, что некоторые считают и перегрузку функций + параметры по умолчанию некоторой разновидностью полиморфизма.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
#include <iostream>
using namespace std;

class A
{
public:
  virtual void foo() =  0 ;
};

class B : public A
{
public:
  void foo() { cout << "B"; }
};

class C : public A
{
public:
  void foo() { cout << "C"; }
};

void main(void)
{
  A* a = NULL;
  a = new B;
  a->foo();
  delete a;
  a = new C;
  a->foo();
  delete a;
}
Ну еще можно сказать про основную "зацепку" - если есть кусок одинакового кода выполняет разные действия, здесь, например a->foo(); - встречается в 2 местах, но выполняет разные действия.
В завершение можно сказать для чего он нужен - для реализации идеи "каркасного" программирования.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36771212
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kosh the bestздесь, например a->foo(); - встречается в 2 местах, но выполняет разные действия.
Ваш пример тиричный ad_hoc overloading
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36771246
Фотография kosh the best
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Ваш пример тиричный ad_hoc overloading
Да, знаю. Смысл моего поста в том, что не стоит углубляться в теории, сложные темы легче всего показывать на примерах.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36771467
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На собеседовании обычно разговор идёт в контексте конкретной технологии или языка. Поэтому говорить стоит, но не сильно теоретизировать.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36771570
rstudio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коротко и на пальцах.
Полиморфизм это принцип легко взаимозаменяемых модулей в любом автомате.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36771861
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k0rvin_модtchingiz,

А это что ?
Код: plaintext
1.
func f(x) return x

параметрический полиморфизм, очевидно же, функция типа
f :: a -> a

и называется она identity (в CL/Scheme) или id (в Haskell)
думаю да.
под полиморфизм включения не подходит - нет иерархии подтипов,
работает одинаково для всех типов и, можно трактовать, что использует "общую структуру" всех множеств - каждый элемент каждого множества можно сравнивать с собой
и получать результат true.
под полиморфизм перегрузки и приведения тоже не подходит.
Остается только параметрический.
У Харрисона введение в функциональное программирование перегрузка
вообще не полиморфизм, а функция идентичности приводится как пример
полиморфизма.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36772104
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И Карделли с Вегнером и Харрисон ссылаются на некоего Стрейчи.
Причем Харрисон в явной форме приписывает авторство термина Стрейчи
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36772131
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще одно. Стрейчи похоже, был голова
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36772958
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tchingizУ Харрисона введение в функциональное программирование перегрузка
вообще не полиморфизм, а функция идентичности приводится как пример
полиморфизма.
наследование+полиморфизм=перегрузка, (которая вообще не полиморфизм)
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36854043
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
замечание от Пирса. Типы в языках программирования
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36854048
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторполиморфизм это - средство решения задачи типизации терма.

Средство состоит из двух компонет:
- множества полиморфных функций //то есть, две и/ли более
или бинарного отношения полиморфизма на функциях;
- правила/алгоритма/указания которое по тексту программы и номеру байта в программе
выбирает конкретную функцию из множества полиморфных функций.

/*типизация терма == определение типа терма без его вычисления */


отношение полиморфизма задается средствами языка.
Например, текст
Код: plaintext
func f(x) return x
в соответствующем языке задает потенциально бесконечное множество функций идентити,
по одной для каждого типа.
в одном из примеров (статический и динамический.) отNotGonnaGetUs
/topic/418324&pg=1#4030553

язык задает три функции X::parseInt, родительская (унаследованная) Y::parseInt и
детская (перегруженная) Y::parseInt и два правила выбора

- одно для динамического полиморфизма - выбирается детская функция ;
- одно для статического полиморфизма - выбирается родительская функция.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36854526
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- одно для статического полиморфизма - выбирается родительская функция.
виноват
- одно для статического полиморфизма - выбирается функция родительского объекта,
а не унаследованная от родителя
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36854528
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://fprog.ru/2010/issue4/roman-dushkin-existentials/

Роман Душкин
1. Предикативный параметрический полиморфизм проявляется тогда, когда в качестве значений типовых переменных могут быть подставлены только мономорфные типы («монотипы»), то есть такие типы, в определениях которых не используются типовые переменные.
2. Непредикативный параметрический полиморфизм позволяет конкретизировать типовые переменные произвольными типами (мономорфными и полиморфными), в том числе и рекурсивно: если в определении типа τ используется типовая переменная α, то при конкретизации вместо неё может быть подставлен сам тип τ. В данном случае слово «непредикативный» обозначает, что при определении сущности возможно использование ссылки на саму определяемую сущность, что потенциально может привести к парадоксам типа канторовского и расселовского. Иногда непредикативный полиморфизм называют полиморфизмом первого класса.

Существует еще одна система классификации параметрических полиморфных типов, основаная на понятии ранга. В данной классификации выделяют три подвида параметрического полиморфизма:

1. Полиморфизм ранга 1 (также предварённый полиморфизм или let-полиморфизм) предполагает, что в качестве типовых переменных могут быть подставлены только монотипы. Соответственно, предварённый полиморфизм может быть только предикативным. В языках семейства ML (включая язык Haskell стандарта 98 года без расширений) используется именно этот вид параметрического полиморфизма.
2. Полиморфизм ранга k (при k > 1) позволяет конкретизировать типовые переменные полиморфными типами ранга не выше (k - 1). В [2] доказано, что вывод типов возможен для k = 2, но для больших k задача вывода типов неразрешима.
3. Полиморфизм высшего ранга (полиморфизм ранга N) проявляется тогда, когда конкретизация типовых переменных может производиться произвольными типами, в том числе и полиморфными любого ранга. Непредикативный полиморфизм высшего ранга является наиболее общим видом параметрического полиморфизма.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36865923
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k0rvin_модtchingiz,

А это что ?
Код: plaintext
1.
func f(x) return x

параметрический полиморфизм, очевидно же, функция типа
f :: a -> a

и называется она identity (в CL/Scheme) или id (в Haskell)
совпало мнение с классиком


Карделли О понимании
Сходным образом и функция идентификации может быть определена только для конкретных типов, например, целых: fun(x:Int)x. Мы не можем отразить тот факт, что её форма не зависит ни от какого типа. Мы не можем выразить идею одинаковой функциональной формы для множества типов, и должны явно связывать переменные и значения с определенным типом в момент, когда такое связывание может быть преждевременным.

То, что данная функциональная форма одинакова для всех типов, можно выразить с помощью кванторов всеобщности. В частности, функцию идентификации можно выразить так:

Код: plaintext
value id = all[a] fun(x:a) x

В этом определении id а – это переменная типа, а all[a] предоставляет абстракцию для а, так что id – это идентификатор для всех типов. Чтобы применить функцию идентификации к аргументу определенного типа, мы должны сперва представить тип как параметр, а затем аргумент данного типа:

Код: plaintext
id [Int] ( 3 )

(Здесь используется соглашение, что параметр типа заключен в квадратные скобки, а типизированный аргумент – в круглые)

Такие функции, как id, требующие параметр типа прежде, чем они могут быть применены к функциям некоторого типа, мы будем называть обобщенными функциями (generic functions). Id – это обобщенная функция идентификации.
...
Рейтинг: 0 / 0
Определение полиморфизма?
    #36893810
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
полиморфизм - это средство решения задачи типизации.
Состоит из классов функций, находящихся в отношении полиморфизма между собой
(похоже, классы эквивалентности) и отображения,
которое вхождению имени каждой функции в каждом выражени каждой программы
ставит в соответствие одну из полиморфных функций
...
Рейтинг: 0 / 0
61 сообщений из 61, показаны все 3 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Определение полиморфизма?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]