File: node107.html

package info (click to toggle)
babel 0.10.2-1
  • links: PTS
  • area: contrib
  • in suites: sarge
  • size: 43,932 kB
  • ctags: 29,707
  • sloc: java: 74,695; ansic: 73,142; cpp: 40,649; sh: 18,411; f90: 10,062; fortran: 6,727; python: 6,406; makefile: 3,866; xml: 118; perl: 48
file content (155 lines) | stat: -rw-r--r-- 6,364 bytes parent folder | download | duplicates (2)
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>
 &nbsp; <B>  <A NAME="tex2html2237"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <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>
 &nbsp; <B>  <A NAME="tex2html2237"
  HREF="node14.html">Contents</A></B> 
 &nbsp; <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>