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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!--Converted with LaTeX2HTML 2002-2-1 (1.70)
original version by: Nikos Drakos, CBLU, University of Leeds
* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan
* with significant contributions from:
Jens Lippmann, Marek Rouchal, Martin Wilck and others -->
<HTML>
<HEAD>
<TITLE>Method Overloading</TITLE>
<META NAME="description" CONTENT="Method Overloading">
<META NAME="keywords" CONTENT="users_guide">
<META NAME="resource-type" CONTENT="document">
<META NAME="distribution" CONTENT="global">
<META NAME="Generator" CONTENT="LaTeX2HTML v2002-2-1">
<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css">
<LINK REL="STYLESHEET" HREF="users_guide.css">
<LINK REL="previous" HREF="node106.html">
<LINK REL="up" HREF="node103.html">
<LINK REL="next" HREF="node108.html">
</HEAD>
<BODY >
<DIV CLASS="navigation"><!--Navigation Panel-->
<A NAME="tex2html2240"
HREF="node108.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html2234"
HREF="node103.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html2230"
HREF="node106.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html2236"
HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<A NAME="tex2html2238"
HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html2241"
HREF="node108.html">XML Repositories</A>
<B> Up:</B> <A NAME="tex2html2235"
HREF="node103.html">Objects</A>
<B> Previous:</B> <A NAME="tex2html2231"
HREF="node106.html">Parameter Passing</A>
<B> <A NAME="tex2html2237"
HREF="node14.html">Contents</A></B>
<B> <A NAME="tex2html2239"
HREF="node317.html">Index</A></B>
<BR>
<BR></DIV>
<!--End of Navigation Panel-->
<H2><A NAME="SECTION02464000000000000000"></A><A NAME="5179"></A><A NAME="5180"></A>
<A NAME="sec:overloading"></A>
<BR>
Method Overloading
</H2>
Method overloading is the object-oriented practice of defining more than one
method with the same name in a class. Doing so allows the convenient reuse of
a method name when, for example, the underlying implementations differ based
on the types of the arguments. Actually, support for overloaded methods
typically relies on the signature<A NAME="5182"></A>
<A NAME="5183"></A><A NAME="5184"></A> of each method to ensure uniqueness. In
this case, the signature consists of the method name along with the number,
types, and ordering of its arguments.
<P>
Since Babel supports languages that do not support method overloading, a
mechanism for generating unique names was needed. These are typically generated
by compilers based on hashing the argument types into the method name. However,
developers often manually address this with far fewer characters than would be
used by a compiler. Consequently, it was determined it would be more efficient
to leave the task of identifying the unique name to the developer. Therefore,
Babel allows the specification of the base, or short,
<A NAME="5185"></A> <A NAME="5186"></A> method name along with an
optional method name extension as illustrated in the SIDL file below for the
<TT>getValue</TT> method.
<P>
<BR>
<PRE CLASS="verbatim">package Overload version 1.0 {
class Sample {
int getValue ( );
int getValue[Int]( in int v );
double getValue[Double]( in double v );
}
}
</I></PRE></td></tr></table></blockquote>
<P>
Thus, the full method name<A NAME="5189"></A> <A NAME="5190"></A>
is the concatenation of the short name followed
by the name extension. When generating code for supported languages, Babel
makes use of either the short or full method name as appropriate for the
language(s) involved. For those that support method overloading, such
as C++ and Java, Babel relies only on the short method name, thus ignoring
the extension. For the rest, like C, Fortran, and Python, Babel must make
use of the full name to ensure methods are uniquely identified.
<P>
In the example above, the first method specification takes no arguments so has
no name extension. This is acceptable because there are no potentially
conflicting methods at this point for any programming language supported by
Babel. The second method, with the user-defined name extension of <TT>Int</TT>,
takes a single int argument, resulting in the unique method name
<TT>getValueInt</TT>. The last method, with a user-defined name extension of
<TT>Double</TT>, takes a single double argument, resulting in the unique method
name of <TT>getValueDouble</TT>. Examples of calling overloaded methods from
Babel-supported languages can be found in the respective language binding
chapters.
<P>
<P>
<DIV CLASS="navigation"><HR>
<!--Navigation Panel-->
<A NAME="tex2html2240"
HREF="node108.html">
<IMG WIDTH="37" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="next" SRC="next.png"></A>
<A NAME="tex2html2234"
HREF="node103.html">
<IMG WIDTH="26" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="up" SRC="up.png"></A>
<A NAME="tex2html2230"
HREF="node106.html">
<IMG WIDTH="63" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="previous" SRC="prev.png"></A>
<A NAME="tex2html2236"
HREF="node14.html">
<IMG WIDTH="65" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="contents" SRC="contents.png"></A>
<A NAME="tex2html2238"
HREF="node317.html">
<IMG WIDTH="43" HEIGHT="24" ALIGN="BOTTOM" BORDER="0" ALT="index" SRC="index.png"></A>
<BR>
<B> Next:</B> <A NAME="tex2html2241"
HREF="node108.html">XML Repositories</A>
<B> Up:</B> <A NAME="tex2html2235"
HREF="node103.html">Objects</A>
<B> Previous:</B> <A NAME="tex2html2231"
HREF="node106.html">Parameter Passing</A>
<B> <A NAME="tex2html2237"
HREF="node14.html">Contents</A></B>
<B> <A NAME="tex2html2239"
HREF="node317.html">Index</A></B> </DIV>
<!--End of Navigation Panel-->
<ADDRESS>
<br><br>babel-0.10.2<br>users_guide Last Modified 2005-03-23<br><br><a href="http://www.llnl.gov/CASC/components">http://www.llnl.gov/CASC/components</a><br><a href="mailto:components@llnl.gov">components@llnl.gov</a>
</ADDRESS>
</BODY>
</HTML>
|