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

Вниз

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

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

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

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


 
имя   (2014-02-26 10:35) [241]

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


 
имя   (2014-02-26 10:36) [242]

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


 
DVM ©   (2014-02-26 10:36) [243]

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


 
ухты   (2014-02-26 10:46) [244]

опять медвежонка обижают :)

о чем спор, обязательно наличие virtual/override для обеспечения полиморфизма?


 
clickmaker ©   (2014-02-26 10:47) [245]

> обязательно наличие virtual/override для обеспечения полиморфизма?

если реализовывать через наследование, то да


 
zzz   (2014-02-26 10:50) [246]

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


 
vuk ©   (2014-02-26 11:05) [247]

to ухты   (26.02.14 10:46) [244]:

> о чем спор, обязательно наличие virtual/override для обеспечения
> полиморфизма?

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


 
icWasya ©   (2014-02-26 12:19) [248]

по поводу
grossm ©   (24.02.14 13:59) [84]

MyClass^.Field := 0;   //Ошибка! Следует писать так:
MyClass.Field := 0;

MyClass^.Field := 0; - это НЕ ошибка.
Можно писать и так и так. Более сторго - с ^. Но тогда почти весь программный код пестрел бы этими крышками. Поэтому сделали так: если тип переменной - Class или указатель на Record, то ^ перед точкой можно не писать.
Но если для какой-нибудь функции требуется параметр без типа, то тут уже важно различать - что на самом деле нужно,  адрес самой структуры или переменной в которой этот адрес записан.


 
й   (2014-02-26 13:51) [249]

> clickmaker ©   (26.02.14 09:53) [234]

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

TBmw = class(TCar)
procedure startengine;
end;

// но есть полиморфность ситуативная (ad hoc)
TCar.Create.startengine;
TBmw.Create.startengine;


 
clickmaker ©   (2014-02-26 13:54) [250]

> есть полиморфность ситуативная

это реализация полиморфности а-ля фабрика классов. К наследованию отношения может и не иметь


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

существование полиморфности подразумевает существование мономорфности.


 
clickmaker ©   (2014-02-26 14:13) [252]

http://wikipedia.qwika.com/en2ru/Monomorphism


 
Inovet ©   (2014-02-26 14:42) [253]

> [251] Константин   (26.02.14 14:11)

и аморфности


 
ТНЕ картман   (2014-02-26 15:16) [254]

и монорхизма


 
Внук ©   (2014-02-26 17:00) [255]

>> но есть полиморфность ситуативная
 Называть в разных классах методы одинаково - это полиморфность? Вон оно чо. Охренеть.


 
vuk ©   (2014-02-26 18:12) [256]

to Внук ©   (26.02.14 17:00) [255]:

>  Называть в разных классах методы одинаково - это полиморфность?

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


> Вон оно чо. Охренеть.

Такие дела. :)


 
reonid ©   (2014-02-26 18:20) [257]

2Внук ©   (26.02.14 17:00) [255]
Думаю, в принципе, да.
Ведь статический полиморфизм - это, в частности,
перегрузка функций по типам ( function Max(a, b: Integer): Integer;  function Max(a, b: Double): Double; ),
перегрузка операторов и, в частности, одинаковые имена невиртуальных методов.

Но полиморфизм подразумевает использование одного и того же кода для разных типов,
поэтому без шаблонов всё это как полиморфизм не особо работает.
В принципе, в дельфях можно реализовать такое с помошью *.inc файлов.

Просто в Дельфи такой подход не особо практикуется, поэтому целесообразность
использования термина "статический полиморфизм" в Дельфи как-то не очевидна...


 
Внук ©   (2014-02-26 18:47) [258]

То есть если я написал класс TFoo с методом DoIt, и  Вася из Тамбова написал класс TBar с методом DoIt, то мы, не подозревая о существовании друг друга написали полиморфный код. Теория ради теории.


 
reonid ©   (2014-02-26 19:11) [259]

2Внук ©   (26.02.14 18:47) [258]
В общем случае нет.
Для статического полиморфизма важны конвенции.
Нужно, чтобы вы оба представляли, чему служит этот метод,
каким условиям он должен удовлетворять, чтобы его можно было
использовать в каком-то обобщенном коде.

ну как пример

function Test(obj: TBar): Integer;
begin
 {$I test.inc}
end;

function Test(obj: TFoo): Integer;
begin
 {$I test.inc}
end;

----test.inc----
Result := 0;
while not obj.DoIt do
 Inc(Result);


 
й   (2014-02-26 19:47) [260]

и одну из задач полиморфизма - повысить реюзабельность кода - статика таки выполняет:
//mycar := TCar.Create; // устаревшая версия - закомментирована
mycar := TBmw.Create; // новая версия
mycar.startengine; // весь остальной код таки не нужно менять!


 
й   (2014-02-26 19:49) [261]

забыл, там еще должно было быть
//var mycar: TCar; // старая
var mycar: TBmw; // yjdfz


 
clickmaker ©   (2014-02-27 10:35) [262]

> одну из задач полиморфизма - повысить реюзабельность кода

это вообще-то задача наследования


 
не жена   (2014-02-27 10:39) [263]

То есть если я написал класс TFoo с методом DoIt, и  Вася из Тамбова написал класс TBar с методом DoIt, то мы, не подозревая о существовании друг друга написали полиморфный код. Теория ради теории.

Теперь вам с васей обоим надо еще найти общего предка ваших классов с таким же методом.
так что пример не тему.


 
Внук ©   (2014-02-27 11:01) [264]

>>не жена   (27.02.14 10:39) [263]
 А что в данном конкретном случае изменит общий предок? Если методы невиртуальные, то общий предок побоку. Я ж говорю, это странная теория ради странной терминологии.


 
Внук ©   (2014-02-27 11:05) [265]

>>reonid ©   (26.02.14 19:11) [259]
 Если у нас есть с Васей конвенции, то и методы необязательно называть одинаково, достаточно соблюсти одинаковость сигнатуры, и использовать указатели, верно?


 
clickmaker ©   (2014-02-27 11:08) [266]

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


 
Внук ©   (2014-02-27 11:11) [267]

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


 
не жена   (2014-02-27 11:20) [268]

А что в данном конкретном случае изменит общий предок?

Прикидываемся, или на самом деле все так печально?

общий предок есть:

var v : TOбщийПредок;
begin
v := ОбъектВаси.
v.DoIt;
v := ОбъектВнука.
v.DoIt;

общий предок не есть:
var v1 : TВася;
var v2 : TВнук;
begin
v1 := ОбъектВаси.
v1.DoIt;
v2 := ОбъектВнука.
v2.DoIt;

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

вчерашний случай:

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

итог:
все есть, но вилки нужны. полиморфизмом не пахнет.

вывод:
виртуальность с полиморфизмом никак не связана.


 
не жена   (2014-02-27 11:23) [269]

А technics, которые используют программисты, чтобы облегчить себе жизнь, это не более, чем приемчики.

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


 
clickmaker ©   (2014-02-27 11:26) [270]

> полиморфизм сам по себе никому кроме разраба и нафик не
> уперся

так более того. Программизм сам по себе никому кроме разраба и нафик не нужен. Клиенту нужна кнопка "Сделать все", а остальное не беспокоит


 
Внук ©   (2014-02-27 11:27) [271]

>>не жена   (27.02.14 11:20) [268]
>>var v : TOбщийПредок;
>>begin
>> v := ОбъектВаси.
>> v.DoIt;
>> v := ОбъектВнука.
>> v.DoIt;

Действительно, все печально :)


 
не жена   (2014-02-27 11:29) [272]

ну не дошло так не дошло.


 
Внук ©   (2014-02-27 11:35) [273]

>>не жена   (27.02.14 11:29) [272]
Я тебя все-таки разочарую слегка. Но в вышеприведенном коде в обоих случаях будет вызываться метод
TОбщийПредок.DoIt


 
vuk ©   (2014-02-27 11:36) [274]

to clickmaker ©   (27.02.14 11:08) [266]:

> Если рассматривать полиморфизм как одного из трех слонов,
>  на которых стоит ООП, то без виртуальности/переопределения
> тут не обойтись, хоть на уши встань.

Если говорить про ООП, то виртуальность/переопределение (читай наследование реализации) вообще не является для ООП определяющим. ООП вполне может существовать без этих вещей. Что легко доказывается существованием таких объектных моделей, как COM. Или вот тот пример, что я приводил с vbscript - ни наследования ни виртуальности.

А вот инкапсуляция и полиморфизм, таки да, для ООП определяющи.


 
не жена   (2014-02-27 11:42) [275]

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

Я тебя тоже.
Дуит виртуален, переопределен у тебя и у васи, вы с васей имеете общего предка, от которого и унаследован дуит.


 
Внук ©   (2014-02-27 11:43) [276]

Читаем внимательно еще раз 264.


 
Внук ©   (2014-02-27 11:44) [277]

Речь изначально шла про так называемый "статический полиморфизм". С невиртуальными методами.


 
И.Я. Бляблин   (2014-02-27 11:44) [278]


> драма второго случая :даже если есть полиморфизм, ты делаешь
> вилки в коде.

Проясните весь случай насчет столовых приборов, пжалста.


 
не жена   (2014-02-27 11:44) [279]

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


 
й   (2014-02-27 11:45) [280]

> Полиморфизм, с моей точки зрения, это...

вот зачем выдумывать свои определения для общепринятых ТЕРМИНОВ
да еще и настаивать на них?
хотя, иногда кажется, что процент ТЕРМИНОЛОГИЧЕСКИХ споров в интернете приближается к 80%, т.е. без них просто поговорить не о чем



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

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

Наверх





Память: 1.06 MB
Время: 0.062 c
15-1393261182
Sammi
2014-02-24 20:59
2014.10.05
Перезаписывание файла БЕЗ пересоздания


15-1393662306
Demo
2014-03-01 12:25
2014.10.05
SQl import


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


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


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский