Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Зачем нужны виртуальные методы?  [new]
amadeus
Member

Откуда:
Сообщений: 33
Зачем нужны виртуальные методы, если при помощи inherited можно обратиться к одноименному методу родительского класса, даже если он не виртуальный?

TA = class
  function get(): String;
end;

TB = class(TA)
  function get(): String;
end;

...

function TA.get(): String;
begin
  result := 'a';
end;

function TB.get(): String;
begin
  result := inherited;
  //result := 'b';
end;

...

showMessage(b.get());//Возвращает "a"
7 июл 19, 19:08    [21922292]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
rgreat
Member

Откуда:
Сообщений: 5399
Only virtual and dynamic methods can be overridden. All methods, however, can be overloaded;
7 июл 19, 19:17    [21922295]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
amadeus
Member

Откуда:
Сообщений: 33
rgreat, чем не переопределение, если в дочернем классе я создам одноименный метод и просто не буду вызывать inherited (либо, буду, в зависимости от ситуации).
7 июл 19, 19:21    [21922296]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 545
amadeus,

почитай основы языка, что ли
7 июл 19, 19:21    [21922297]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
amadeus
Member

Откуда:
Сообщений: 33
asutp2, *&##*!
7 июл 19, 19:24    [21922298]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 545
amadeus, ну если ты не понимаешь, то вот тебе простой пример:

type
  TA = class
    procedure M; virtual;
  end;
  TB = class(TA)
    procedure M; override;
  end;
  TC = class(TA)
    procedure M; override;
  end;

procedure TA.M;
begin
  ShowMessage('TA');
end;

procedure TB.M;
begin
  ShowMessage('TB');
end;

procedure TC.M;
begin
  ShowMessage('TC');
end;

procedure Test;
var
  test: TA;
begin
  test := TA.Create;
  test.M;
  test := TB.Create;
  test.M;
  test := TC.Create;
  test.M;
end;
7 июл 19, 19:31    [21922300]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
asutp2
Member

Откуда: Тюмень
Сообщений: 545
  TC = class(TB)
    procedure M; override;
  end;
7 июл 19, 19:40    [21922304]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
amadeus
Member

Откуда:
Сообщений: 33
asutp2, спасибо, теперь понятно. Полиморфизм обеспечивает "двустороннюю связь" между классами.
7 июл 19, 19:52    [21922305]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2206
Здесь есть смайлик рука-лицо?
7 июл 19, 23:02    [21922346]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60248

+

Картинка с другого сайта.


Дима давал ссылку на еще какую-то прикольную, но тут
анимированные гифки не работают, а мне искать лень.

Posted via ActualForum NNTP Server 1.5

8 июл 19, 09:40    [21922465]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
DimaBr
Member

Откуда:
Сообщений: 11288
Как это не работает ?
Картинка с другого сайта.
8 июл 19, 09:52    [21922478]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
DimaBr
Member

Откуда:
Сообщений: 11288
Картинка с другого сайта.
8 июл 19, 09:53    [21922480]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60248
ХЗ, я со слов Димы. Видимо, какие-то сайты не "отдают"
так гифку (первая отрисовалась, а вторая - нет, например).

Posted via ActualForum NNTP Server 1.5

8 июл 19, 12:20    [21922580]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
kill_zdm
Member

Откуда:
Сообщений: 1405
раньше не задумывался, ... никого не хочу обидеть, почему нас называют лентяями - дэлфийцев - походу потому, что сама среда отталкивает "удобствами" от ООП. Говорю про себя лично, могу и ошибаться. Другие языки (как только начал отходить от дэлфи) фактически заставляют вникнуть в суть абстракций , ну или хотя бы понимания подходов ООП. Delphi же, наоборот сопротивляется - это мой гнев по поводу поста моего же про удобство реализации интерфейсов )))
Чего греха таить, пока с реальными проектами Java не столкнулся, ходил около и рядом абстракций, не понимая их сущности по факту.... Вопрос несколько о другом принципе ООП, наследовании, но и о нем несколько поменялось представление - мне кажется Вам очень поможет вот эта статья https://habr.com/ru/post/30444/ в будущем. Могу показаться смешным, но я то же долго не мог догнать - нафига интерфейсы в обще нужны ))) Ну а после осознания - все встало на свои места окончательно и по другим вопросам ООП ))
8 июл 19, 17:32    [21922939]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
Michael Longneck
Member

Откуда: Москва
Сообщений: 2300
Всё нормально у дельфи с ООП. Другое дело, что сам подход - моделировать объектами сущности из бизнеса - не единственный вариант применения
8 июл 19, 23:15    [21923123]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
Gator
Member

Откуда: Москва
Сообщений: 14978
kill_zdm,
Michael Longneck,

Фигня все это, множественного наследования нету!
Затрахаешься кнопку описывать.
Мне такую и сякую, ромбиком или квадратную (круглую/овальную)/(черно/бело/серо-буро-среневую), плоскую/впуклую, для такой/сякой хренотени...

Вот у меня в сиквеле всё описывается - любую хрень можно представить в таблицах.
Настолько это технологично. Вот только...
Работать (выборки делать) муторно очень. Скрипты надо придумывать.

+Ну, например.
Сход поезда на Транссибе. Всё круто, проезд на красный, 8 локомотивов, до туи тонн...
Причина? Санкции?

Типа, машинист-наставник устал и всю бригаду "построил".
Дочка позвонила - у неё каблук сломался и тра-та-та-та-пулемёт и козёл... и ишак Бухарский.

И как тут от "проезда на красный" до обувеой мастерской добраться*
9 июл 19, 01:08    [21923147]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60248
Michael Longneck> не единственный вариант применения

Он не только не единственный, но и даже [далеко] не
[всегда] самый правильный/быстрый/эффективный.

Можно написать хорошо/плохо, как с ООП, так и без.

Posted via ActualForum NNTP Server 1.5

9 июл 19, 08:37    [21923193]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3370
Gator,

интерфейсы в помощь. все с ними работают и как-то не особо страдают:

TSpTBXPopupMenu = class(TTBPopupMenu, ISpTBXPopupMenu)
9 июл 19, 09:20    [21923210]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 60248
makhaon> все с ними работают

Милостивый государь, Вы совершенно зря так обобщаете и наговариваете.

Posted via ActualForum NNTP Server 1.5

9 июл 19, 09:47    [21923223]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
Gator
Member

Откуда: Москва
Сообщений: 14978
makhaon> интерфейсы в помощь

И в результате обломиться на IUnknown?
9 июл 19, 11:28    [21923287]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
ziv-2014
Member

Откуда:
Сообщений: 462
Gator
makhaon> интерфейсы в помощь

И в результате обломиться на IUnknown?

А что с ним не так с IUnknown?
9 июл 19, 15:19    [21923503]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
Gator
Member

Откуда: Москва
Сообщений: 14978
А потому, что это хрень, ии к чему не привязанная (абстракция). С таким же успехом можно от TObject плясать. Всё равно надо каждый чих описывать отдельно.
9 июл 19, 20:28    [21923780]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
Gator
Member

Откуда: Москва
Сообщений: 14978
Кстати о виртуальных методах
+ http://docwiki.embarcadero.com/RADStudio/Rio/en/Virtual_Methods

Virtual Methods

Go Up to Dispatching Methods


Virtual methods employ a more complicated, and more flexible, dispatch mechanism than static methods. A virtual method can be redefined in descendent classes, but still be called in the ancestor class. The address of a virtual method isn't determined at compile time; instead, the object where the method is defined looks up the address at run time.

To make a method virtual, add the directive virtual after the method declaration. The virtual directive creates an entry in the object's virtual method table, or VMT, which holds the addresses of all the virtual methods in an object type.

When you derive a new class from an existing one, the new class gets its own VMT, which includes all the entries from the ancestor's VMT plus any additional virtual methods declared in the new class.
9 июл 19, 20:53    [21923787]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
Dimonka
Member

Откуда:
Сообщений: 1178
Gator
kill_zdm,
Michael Longneck,
Фигня все это, множественного наследования нету!
Затрахаешься кнопку описывать.
Мне такую и сякую, ромбиком или квадратную (круглую/овальную)/(черно/бело/серо-буро-среневую), плоскую/впуклую, для такой/сякой хренотени...
Так а в чём собственно сложность-то? И какое всё это дело имеет отношение к множественному наследованию?

Ты если чего обращайся - тебе коллективный разум мигом твои впукло-выпуклые цветные кнопки опишет.
10 июл 19, 13:38    [21924162]     Ответить | Цитировать Сообщить модератору
 Re: Зачем нужны виртуальные методы?  [new]
Gator
Member

Откуда: Москва
Сообщений: 14978
Dimonka,

Это я ТСу спойлер закстатил. Он не в курсе до сих пор и читать ленится... ;)
Про Принцип Обслуживания и Хранинения Унифицированной Информации (краткий) отдельная песня.
Там больше реляционных баз касается. Но нужно скрипт придумывать, чтобы описывать "связанное неопределённым образом".
А Collective Intelligence слишком безумен для реадизации цастно идеи Картинка с другого сайта.
10 июл 19, 14:25    [21924207]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Delphi Ответить