Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2014.10.05;
Скачать: [xml.tar.bz2];

Вниз

Я Написал Книжку по Делфи, хотел бы узнать Ваше мнение и отзывы   Найти похожие ветки 

 
DVM ©   (2014-02-25 23:42) [200]


> жена полковника Вагина   (25.02.14 23:26) [190]


> полиморфизм в обоих случаях живет и действует.
>
> ему все равно как происходит диспетчеризация методов.
> он не для этого придуман.
>
>

Есть такой признак полиморфизма:

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

Если просто замещать в наследниках методы базового класса методами с теми же названиями, то это требование не выполняется - полиморфизма не будет.


 
vuk ©   (2014-02-25 23:44) [201]

Полиморфизм - возможность однородной обработки разнородных данных.  Не более того.

В случае с интерфейсами однородность задает интерфейс. Но он не задает реализацию и поэтому там нет наследования кода. При этом полиморфизм достигается за счет реализации интерфейса разными класссами.

В случае с COM Automation дело обстоит так, что однородность определяется вызывающим кодом и работает до тех пор, пока этот код не нарвется на объект, который не сможет отработать требуемые вызовы. Но пока может, таки да, обработка будет полиморфной.


 
жена полковника Вагина   (2014-02-25 23:50) [202]

Полиморфизм - возможность однородной обработки разнородных данных.  Не более того.


я как бы про это весь вечер и говорю.

В случае с интерфейсами однородность задает интерфейс. Но он не задает реализацию и поэтому там нет наследования кода. При этом полиморфизм достигается за счет реализации интерфейса разными класссами.


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

не дофига сферических коней получается?


 
DVM ©   (2014-02-25 23:56) [203]


> жена полковника Вагина   (25.02.14 23:50) [202]


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

Рассматривай интерфейсы Delphi как полностью абстрактные классы все методы которых виртуальные. Собственно в C++ нет интерфейсов и их заменяют именно такие классы.


 
Юрий Зотов ©   (2014-02-25 23:58) [204]

> big_djo ©   (25.02.14 20:28) [142]
> У меня в книжке такое определение


Прискорбно. Вы это определение где-то вычитали, или тоже сами придумали?

Дело в том, что никакого динамического полиморфизма не существует. А то, о чем Вы говорите называется просто полиморфизмом.

Пара вопросов, если позволите...

1. Кто рецензировал Вашу книгу?
2. Вам за нее все еще не стыдно?


 
vuk ©   (2014-02-25 23:59) [205]

to DVM ©   (25.02.14 23:36) [197]:

> Вероятно. Но для ООП языков наследование самый распространенный
> способ.

Чтобы далеко не ходить, возьму, например, vbscript:
class TestClass1
 sub Test
   WScript.Echo "TestClass1.Test"
 end sub
end class

class TestClass2
 sub Test
   WScript.Echo "TestClass2.Test"
 end sub
end class

sub TestCall(Instance)
 Instance.Test
end sub

dim c1, c2

set c1 = new TestClass1

set c2 = new TestClass2

TestCall(c1)
TestCall(c2)

Тоже полиморфизм без наследования в чистом виде.

to жена полковника Вагина   (25.02.14 23:50) [202]:

> но наследовать интерфейс мы не можем, потому что наследования
> у нас нет

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


 
Компромисс1 ©   (2014-02-26 00:03) [206]

наследовать интерфейс

Терминология Delphi портит программистов. Интерфейсы не наследуются, они реализуются.
class MyClass extends Object implements MyInterface


 
DVM ©   (2014-02-26 00:07) [207]


> Компромисс1 ©   (26.02.14 00:03) [206]


> Интерфейсы не наследуются,

еще как наследуются


 
жена полковника Вагина   (2014-02-26 00:08) [208]

теперь смотрите (внимательно) что получается в итоге.

я говорю, что виртуальность методов полиморфизму не мешает, но строго говоря и отсутствие их полиморфизму пофик.

мне говорят, что все что пишу - это тупо наследование.

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

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

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

И это по вашим же словам тру полиморфизм (и я даже согласен с этим)

но постойте постойте.
теперь реализация методов интерфейса у нас в самых неожиданных классах.
и нам теперь даже нафик не надо чтобы эти методы были :
1. унаследованы от предков.
2. были бы виртуальными.

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

это будет работать правильно и по вашим же словам это будет полиморфизмом.

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

спасибо что дочитали до конца.


 
vuk ©   (2014-02-26 00:08) [209]

to Компромисс1 ©   (26.02.14 00:03) [206]:

> Терминология Delphi портит программистов. Интерфейсы не
> наследуются, они реализуются.

Это не является терминологией Delphi. Это является просто кривой терминологией. А так, вообще, у интерфейсов своя, отдельно стоящая иерархия имеется.


 
Юрий Зотов ©   (2014-02-26 00:11) [210]

> vuk ©

И все же реализацию через интерфейсы я бы полиморфизмом не назвал. Скорее, это ближе к плагинной архитектуре.


 
DVM ©   (2014-02-26 00:12) [211]


> жена полковника Вагина   (26.02.14 00:08) [208]

Представь, если бы в Delphi не было интерфейсов, но было бы множественное наследование и полностью абстрактные классы (собственно они уже есть). Тогда все согласуется. Т.е проблема именно в ключевом слове interface.


 
vuk ©   (2014-02-26 00:15) [212]

Юр, плагинная архитектура - тоже способ реализации полиморфизма. :P


 
big_djo ©   (2014-02-26 00:22) [213]

-->Прискорбно. Вы это определение где-то вычитали, или тоже сами
-->придумали?
Любое определение хромает

-->Дело в том, что никакого динамического полиморфизма не
-->существует.
-->А то, о чем Вы говорите называется просто полиморфизмом.

как выяснилось в данной теме не все так считают

-->Пара вопросов, если позволите...
-->1. Кто рецензировал Вашу книгу?

Для публикации рецензия не требовалась

-->2. Вам за нее все еще не стыдно?
В целом есть недочеты, но я их поправлю, считаю что простые вещи могу донести до студентов.


 
жена полковника Вагина   (2014-02-26 00:23) [214]

хорошо.
конкретный пример.

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

Я пишу интерфейс и прикручиваю его к наследникам лейбла и датасета.
Просто потому что писать честную пользовательскую иерархию классов отнаследовавшись от предка tlabel и дойти до датасета у меня не хватит жизни.

написал предков, реализовал интерфейс в обоих.

имею : TMyLabel.СделайМнеХорошо()
         TMyDataSet.СделайМнеХорошо()

и они мне делают хорошо.

полиморфизм?
в философическом смысле этого слова не знаю,
но с точки зрения пользователя этих классов - несомненно полиморфизм.

и обе реализации СделайМнеХорошо() не имеют никакого отношения ни к вирутальнотсти ни к наследованию.


 
DVM ©   (2014-02-26 00:24) [215]


> vuk ©   (25.02.14 23:59) [205]


> Тоже полиморфизм без наследования в чистом виде.

В документации на Visual Basic такой способ полиморфизма не отражен:

http://msdn.microsoft.com/ru-ru/library/28t6afce(v=vs.90).aspx

Там только интерфейсы и наследование.


 
DVM ©   (2014-02-26 00:30) [216]


> жена полковника Вагина   (26.02.14 00:23) [214]


> и обе реализации СделайМнеХорошо() не имеют никакого отношения
> ни к вирутальнотсти ни к наследованию.

Еще раз повторюсь. Такая конструкция - это фишка конкретно делфи. Думай об интерфейсах как об абстрактных классах. В Delphi 2 не было интерфейсов, но COM как то поддерживалось, просто использовали абстрактные классы с виртуальными методами.


 
vuk ©   (2014-02-26 00:34) [217]

to DVM ©   (26.02.14 00:24) [215]:

> В документации на Visual Basic такой способ полиморфизма
> не отражен:

Ну, это таки vbscript. Там интерфейсов нет. Наследования тоже. :)


 
big_djo ©   (2014-02-26 00:38) [218]

-->Дело в том, что никакого динамического полиморфизма не существует.

Динамический полиморфизм предстает перед нами в форме классов с виртуальными функциями и объектов, работа с которыми осуществляется косвенно — через указатели или ссылки. Статический полиморфизм включает шаблоны классов и функций.

Взято отсюда http://insidecpp.ru/books/cpp_coding_standards/
Не думаю что у Герба Саттера и  Андрея Александреску квалификация ниже вашей и они не правы в своих завявлениях насчет динамического полиморфизма


 
Юрий Зотов ©   (2014-02-26 00:41) [219]

> big_djo ©   (26.02.14 00:22) [213]

> Любое определение хромает
К счастью, не любое.

как выяснилось в данной теме не все так считают
Еще раз: то, о чем Вы говорите называется просто полиморфизмом. И так считают все, кто вообще понимает, что такое полиморфизм.

> Для публикации рецензия не требовалась
Более чем прискорбно.

> В целом есть недочеты
Это не недочеты. Это незнание даже основ того, чему Вы пытаетесь учить.

> но я их поправлю
Боже Вас упаси. Поберегите лес - он стоит дороже макулатуры.

> считаю что простые вещи могу донести до студентов.
Посоветуйте им книгу Тейксейры и Пачеко. Это лучшее, что Вы можете для них сделать.


 
DVM ©   (2014-02-26 00:41) [220]


> big_djo ©   (26.02.14 00:38) [218]

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


 
ухты   (2014-02-26 00:44) [221]


> Статический полиморфизм включает шаблоны классов и функций.
Еще называют параметрическим (дженерики сюда относят).


 
big_djo ©   (2014-02-26 00:50) [222]

-->Это не недочеты. Это незнание даже основ того, чему Вы пытаетесь
-->учить.
Это Ваше мнение, я не претендую на его изменение

-->Боже Вас упаси. Поберегите лес - он стоит дороже макулатуры.
не хочу беречь лес)))

-->Посоветуйте им книгу Тейксейры и Пачеко. Это лучшее, что Вы можете
-->для них сделать.
А вот к этому замечанию прислушаюсь! Я не читал Пачеко к сожалению, я рекомендую студентам книжку Тома Свана "Библия Делфи", на мой взгляд очень хорошая


 
Юрий Зотов ©   (2014-02-26 00:56) [223]

> big_djo ©   (26.02.14 00:38) [218]

Вы сами сказали, что речь идет о Delphi 7. Где Вы в Delphi 7 нашли шаблоны классов и функций?


 
big_djo ©   (2014-02-26 01:01) [224]

-->Вы сами сказали, что речь идет о Delphi 7. Где Вы в Delphi 7 нашли
-->шаблоны классов и функций?

То есть теперь напопятную? прицепляемся к языку программирования?)))


 
Компромисс1 ©   (2014-02-26 01:21) [225]

DVM ©   (26.02.14 00:30) [216]

Еще раз повторюсь. Такая конструкция - это фишка конкретно делфи. Думай об интерфейсах как об абстрактных классах.

Э, нет. Эта "фишка" присутствует в Java, Flex и наверняка еще в куче языков. Я бы скорее назвал фишкой вынужденное использование абстрактные классов, у которых все методы абстрактные, в тех языках, где нет интерфейсов.


 
Юрий Зотов ©   (2014-02-26 01:23) [226]

> big_djo ©   (26.02.14 01:01) [224]

При чем тут "прицепляемся"? Не я, а Вы сами обозначили сабж, вот о нем я и говорю.

А Вы как хотели - сразу обо всем, что ли? Это равносильно "ни о чем".


 
Компромисс1 ©   (2014-02-26 01:33) [227]

Кстати, динамический полиморфизм таки существует.

http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)


 
Константин   (2014-02-26 06:11) [228]

Мне казалось, что книг уже столько написано, что достаточно было бы лишь всякие нюансы, типа дженериков, описывать.  Или просто дополнять тейксеропачевские тома.


 
Ega23 ©   (2014-02-26 08:23) [229]

Тема - огонь.


 
clickmaker ©   (2014-02-26 09:01) [230]

вот еще одна реализация полиморфизма. Это динамический или статический?
var assembly = Assembly.GetExecutingAssembly();
var type = assembly.GetType(string.Format("SomeNamespace.{0}", _dictionary.Name));
var method = type.GetMethod("GetDefaultView");
var dv = method.Invoke(null, new object[]{_parentId}) as DataView;


 
имя   (2014-02-26 09:05) [231]

Удалено модератором


 
Inovet ©   (2014-02-26 09:08) [232]

> [230] clickmaker ©   (26.02.14 09:01)

Ну я ещё на Радио РК-86 на асм 8080 делал полиморфизм, только я тогда не знал такого слова, и не знаю какой он был. Но функции были виртуальные, вызывались в зависимости от типа объекта, ага, по таблице указателей на функции.


 
Inovet ©   (2014-02-26 09:11) [233]

> [232] Inovet ©   (26.02.14 09:08)
> Радио РК-86

Эээ, Радио-86РК.
http://ru.wikipedia.org/wiki/%D0%E0%E4%E8%EE_86%D0%CA


 
clickmaker ©   (2014-02-26 09:53) [234]

> не можешь задекларировать в коде полиморфность.

//Нет полиморфности
TCar = class
procedure startengine;
end;

TBmw = class(TCar)
procedure startengine;
end;

var car: TCar;
car := TBmw.Create;
car.startengine;

//Есть полиморфность
TCar = class
procedure startengine; virtual;
end;

TBmw = class(TCar)
procedure startengine; override;
end;

var car: TCar;
car := TBmw.Create;
car.startengine;


 
имя   (2014-02-26 10:12) [235]

Удалено модератором


 
DVM ©   (2014-02-26 10:19) [236]

Удалено модератором


 
clickmaker ©   (2014-02-26 10:22) [237]

Удалено модератором


 
имя   (2014-02-26 10:27) [238]

Удалено модератором


 
имя   (2014-02-26 10:30) [239]

Удалено модератором


 
clickmaker ©   (2014-02-26 10:34) [240]

> то нахрена мне кастомные процедуры заводки если они одинаковые
> и реализованы в базовом классе?

а причем тут полиморфизм?



Страницы: 1 2 3 4 5 6 7 8 9 
10 вся ветка

Форум: "Прочее";
Текущий архив: 2014.10.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 1.08 MB
Время: 0.068 c
15-1393088378
big_djo
2014-02-22 20:59
2014.10.05
Я Написал Книжку по Делфи, хотел бы узнать Ваше мнение и отзывы


2-1382614616
qwerty123
2013-10-24 15:36
2014.10.05
ListView


2-1382695991
JohnKorsh
2013-10-25 14:13
2014.10.05
Обработка исключений


15-1393261182
Sammi
2014-02-24 20:59
2014.10.05
Перезаписывание файла БЕЗ пересоздания


11-1255007559
Валера
2009-10-08 17:12
2014.10.05
Шрифт size





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский