Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #34272

Re: When to use dynamic binding over dynamic dispatch?

Path csiph.com!news.swapon.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From Robert Klemme <shortcutter@googlemail.com>
Newsgroups comp.lang.java.programmer
Subject Re: When to use dynamic binding over dynamic dispatch?
Date Mon, 9 May 2016 08:16:02 +0200
Lines 134
Message-ID <dpao94F9eg1U1@mid.individual.net> (permalink)
References <ebf7e9a1-18b1-4d36-91ef-7dc93d0bf25a@googlegroups.com> <ngbitr$70c$1@gioia.aioe.org> <dp8if4Fqm9cU1@mid.individual.net> <ngnb33$1rif$1@gioia.aioe.org> <ngnctb$pp9$1@dont-email.me> <ngniup$8u0$1@gioia.aioe.org> <dp9lveF3ctkU1@mid.individual.net> <ngov04$aop$1@gioia.aioe.org>
Mime-Version 1.0
Content-Type text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding quoted-printable
X-Trace individual.net OxIL4F4iBQPkkppSnuWJiAY0+w+tL/urClju+h2Xq5kCje8t8=
Cancel-Lock sha1:oCExNZOekRnZr+vDllF3gT16uek=
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.2
In-Reply-To <ngov04$aop$1@gioia.aioe.org>
Xref csiph.com comp.lang.java.programmer:34272

Show key headers only | View raw


On 09.05.2016 05:08, Arne Vajhøj wrote:
> On 5/8/2016 4:30 PM, Robert Klemme wrote:
>> On 08.05.2016 16:37, Arne Vajhøj wrote:
>>> On 5/8/2016 8:57 AM, Eric Sosman wrote:
>>>> On 5/8/2016 8:23 AM, Arne Vajhøj wrote:
>>>>> On 5/8/2016 6:24 AM, Robert Klemme wrote:
>>>>>> On 04.05.2016 03:23, Arne Vajhøj wrote:
>>>>>>> All methods unless declared static or final are virtual in Java,
>>>>>>> so dynamic dispatch is used all the time.
>>>>>>
>>>>>> Methods declared as "final" are virtual as well.
>>>>>
>>>>> Given that:
>>>>>
>>>>> virtual method = method that can be overridden
>>>>> final method = method that can not be overridden
>>>>>
>>>>> then how can it be?
>>>>
>>>>     class Super {
>>>>         public void method() {}
>>>>     }
>>>>
>>>>     class Sub extends Super {
>>>>         public final void method() {}
>>>>     }
>>>>
>>>>     ...
>>>>
>>>>     Super obj = new Sub();
>>>>     obj.method();
>>>
>>> As a starting point I would not call Sub.method
>>> a virtual method due to above definition.
>>
>> That seems to me a fairly uncommon definition.  For me a virtual method
>> uses dynamic dispatch (late binding) as described in Wikipedia:
>> https://en.wikipedia.org/wiki/Virtual_method
>
> Well - it is actually mentioned as one possibility in the link
> you provide so ...

I had thought so for a brief moment, too, but now I do not.  The point 
is, the sentence is ambiguous.  Here are two ways you can understand it:

"In object-oriented programming, a virtual function or virtual method is 
( an inheritable and overridable function ) or ( method for which 
dynamic dispatch is facilitated )."

"In object-oriented programming, a virtual function or virtual method is 
an inheritable and overridable ( function or method ) for which dynamic 
dispatch is facilitated."

Now, given the remainder of the article I believe the only valid 
interpretation in this context is the second one.  This is also 
suggested by the "a virtual function or virtual method" which indicates 
that the definition is intended for functions and methods as well.

>>> But per JLS such calls are "invocation mode virtual".
>>
>> Hence it's a virtual method in my book.
>>
>>> If we make the logical conclusion that methods that will be called
>>> with invocation mode virtual are virtual methods, then the definition
>>> of virtual methods is certainly different in Java.
>>
>> Certainly different from the definition you offered above.  Ironically
>> your first statement matches the definition of "virtual method" that I
>> have in mind much better because it speaks of "dynamic dispatch", i.e.
>> does not make a statement about whether it can be overridden and instead
>> focuses on invocation semantics.
>
> I just find it very difficult to see:
>
> public class Funny {
>      public final void m() {
>          System.out.println("I am funny");
>      }
>      public static void main(String[] args) {
>          Funny o = new Funny();
>          o.m();
>      }
> }
>
> as a virtual method. And there is no need for dynamic dispatch.
> Java just uses the same instruction as when dynamic dispatch
> is needed.

"final" and "virtual" are two orthogonal concepts: "final" is an 
instruction to the compiler to not compile a method with the same 
signature in classes inheriting from the class owning the final method. 
  (Additionally the JVM will verify on class load that this constraint 
holds.)

"virtual" describes a technique of method dispatch also commonly called 
"late binding".  It means the method to call is determined at runtime 
vs. at compile time for non virtual methods.  You can also have a 
virtual method in C++ in a class declared "final" (since C++11, see [1]) 
which effectively renders all methods unoverridable.  I mention C++ here 
because there it actually makes a difference for the invocation whether 
a method is declared "virtual" or not.

In Java virtual method invocation is the default and only static and 
private methods are the exceptions.  I use "virtual" in the conceptual 
sense including "invokevirtual" and "invokeinterface" because both 
employ late binding.


Can you provide more background how you got to this definition you are 
using?

virtual method = method that can be overridden

Kind regards

	robert

[1] https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Final_Class


-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

When to use dynamic binding over dynamic dispatch? cdalten@gmail.com - 2016-05-02 18:08 -0700
  Re: When to use dynamic binding over dynamic dispatch? Sebastian <news@seyweiler.dyndns.org> - 2016-05-03 20:47 +0200
    Re: When to use dynamic binding over dynamic dispatch? Lew <lewbloch@gmail.com> - 2016-05-03 12:14 -0700
  Re: When to use dynamic binding over dynamic dispatch? Arne Vajhøj <arne@vajhoej.dk> - 2016-05-03 21:23 -0400
    Re: When to use dynamic binding over dynamic dispatch? Martin Gregorie <martin@address-in-sig.invalid> - 2016-05-04 10:48 +0000
    Re: When to use dynamic binding over dynamic dispatch? Robert Klemme <shortcutter@googlemail.com> - 2016-05-08 12:24 +0200
      Re: When to use dynamic binding over dynamic dispatch? Arne Vajhøj <arne@vajhoej.dk> - 2016-05-08 08:23 -0400
        Re: When to use dynamic binding over dynamic dispatch? Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-05-08 08:57 -0400
          Re: When to use dynamic binding over dynamic dispatch? Arne Vajhøj <arne@vajhoej.dk> - 2016-05-08 10:37 -0400
            Re: When to use dynamic binding over dynamic dispatch? Robert Klemme <shortcutter@googlemail.com> - 2016-05-08 22:30 +0200
              Re: When to use dynamic binding over dynamic dispatch? Arne Vajhøj <arne@vajhoej.dk> - 2016-05-08 23:08 -0400
                Re: When to use dynamic binding over dynamic dispatch? Robert Klemme <shortcutter@googlemail.com> - 2016-05-09 08:16 +0200
            Re: When to use dynamic binding over dynamic dispatch? Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-05-08 16:44 -0400
              Re: When to use dynamic binding over dynamic dispatch? Arne Vajhøj <arne@vajhoej.dk> - 2016-05-08 23:16 -0400
                Re: When to use dynamic binding over dynamic dispatch? Eric Sosman <esosman@comcast-dot-net.invalid> - 2016-05-09 00:39 -0400

csiph-web