Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Определение полиморфизма? / 25 сообщений из 61, страница 1 из 3
13.04.2007, 21:21:57
    #34460601
GerdaS
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение полиморфизма?
Столкнулась с темой "трёх китов" ООП и выяснилось, что полиморфизм, прямо какая-то "тёмная лошадка" его либо понимают, но не могут коротко и ясно сформулировать, либо дают разные определения не охватывающие всей полноты этого понятия, а какое определение или трактование полиморфизма знаете вы?
...
Рейтинг: 0 / 0
13.04.2007, 23:06:00
    #34460657
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение полиморфизма?
Думаю, что рассматрение полиморфизма "в общем" - пустая трата времени. Это настольно всебъемлющее и эфемерное понятие, что никаких конкретных изысканий вы не сможете из него почерпнуть. Думаю что в этом корень всех зол. Конечной станцией в этом случае будет холивар между участниками топика и взаимообвинения в ереси и подрыве основ. Поэтому я предлагаю такую постановку закрыть и не рассматривать. Если вы программируете на Java - то лучше спросите у сообщества побольше практических рекомендаций по применению полиморфизма в данном ЯП. Это позволит вам сегодня избежать ненужных рысканий в стороны и быстрее достичь конкретной цели. В будущем-же, поднаторев в имплементациях данного предмета, вы сможете расширить и обобщить его на другие языки и системы без искажения "картины знаний".
...
Рейтинг: 0 / 0
14.04.2007, 01:16:44
    #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
14.04.2007, 03:21:30
    #34460776
tchingiz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение полиморфизма?
GerdaSСтолкнулась с темой "трёх китов" ООП и выяснилось, что полиморфизм, прямо какая-то "тёмная лошадка" его либо понимают, но не могут коротко и ясно сформулировать, либо дают разные определения не охватывающие всей полноты этого понятия, а какое определение или трактование полиморфизма знаете вы?

я знаю


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

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

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

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

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

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

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

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

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

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

Мне, например, нравится вот этот флейм 3-х годичной давности... (читать про полиморфизм можно прямо вниз, начиная с цитируемого поста, до этого - просто разной степени вялости холи-вары "against FoxPro").
Тоже, ведь, люди что-то для себя выясняли, решали, спорили, доказывали друг-другу...
Теперь, по большей части - молчат...
...
Рейтинг: 0 / 0
16.04.2007, 17:51:27
    #34464351
мод
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение полиморфизма?
Kachalov- ключевое слово "переопределить" :)
Сорри, невнимателен. Однако поля (свойства) вроде здесь не причем, только методы.
...
Рейтинг: 0 / 0
16.04.2007, 17:59:45
    #34464389
мод
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение полиморфизма?
dejavewТоже, ведь, люди что-то для себя выясняли, решали, спорили, доказывали друг-другу...
Теперь, по большей части - молчат...
Наверное все уже выяснили :)
...
Рейтинг: 0 / 0
16.04.2007, 18:05:29
    #34464403
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение полиморфизма?
мод Kachalov- ключевое слово "переопределить" :)
Однако поля (свойства) вроде здесь не причем, только методы.
- ?? В Java сейчас точно можно переопределять типы полей, наверное и в других объектных языках то же. По моему это полиморфизм - в родителе поле x типа byte, а в наследнике поле х типа long - произошло переопределение типа для поля x.
...
Рейтинг: 0 / 0
16.04.2007, 18:28:38
    #34464480
ErV
ErV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение полиморфизма?
GerdaSСтолкнулась с темой "трёх китов" ООП и выяснилось, что полиморфизм, прямо какая-то "тёмная лошадка" его либо понимают, но не могут коротко и ясно сформулировать, либо дают разные определения не охватывающие всей полноты этого понятия, а какое определение или трактование полиморфизма знаете вы?
http://ru.wikipedia.org/wiki/Полиморфизм_в_языках_программирования
www.google.com "define: полиморфизм"
...
Рейтинг: 0 / 0
17.04.2007, 09:14:45
    #34465204
мод
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение полиморфизма?
KachalovПо моему это полиморфизм - в родителе поле x типа byte, а в наследнике поле х типа long - произошло переопределение типа для поля x.
Это опасный трюк. Общее св-во родителя и потомков должно иметь один тип (так же как и сигнатура наследованных методов).
...
Рейтинг: 0 / 0
17.04.2007, 11:30:04
    #34465751
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение полиморфизма?
мод KachalovПо моему это полиморфизм - в родителе поле x типа byte, а в наследнике поле х типа long - произошло переопределение типа для поля x.
Это опасный трюк. Общее св-во родителя и потомков должно иметь один тип (так же как и сигнатура наследованных методов).
- так делать можно - это факт, а нужно ли так делать и когда это другой вопрос.
...
Рейтинг: 0 / 0
17.04.2007, 12:20:31
    #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
17.04.2007, 14:54:17
    #34466775
мод
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение полиморфизма?
NotGonnaGetUsВ ООЯ полиморфизма без наследования не может быть, но наследование без полиморфизма - запросто:
Полиморфизм прекрасно существовал и существует и без наследования и без ООЯ.
Все остальное - пересказ учебника.
...
Рейтинг: 0 / 0
17.04.2007, 17:57:02
    #34467382
NotGonnaGetUs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Определение полиморфизма?
мод NotGonnaGetUsВ ООЯ полиморфизма без наследования не может быть, но наследование без полиморфизма - запросто:
Полиморфизм прекрасно существовал и существует и без наследования и без ООЯ.
Все остальное - пересказ учебника.

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

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

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

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

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

Живой пример: определение функции map в Haskell - map :: (x -> y) -> [x] -> [y], x и y - абсолютно "полиморфные" типы, независимые друг-от-друга, реализуемые бесконечным количеством "реальных" воплощений.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Определение полиморфизма? / 25 сообщений из 61, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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