07 Methods
07 Methods
Eric Roberts
CS 106A
January 20, 2010
Once upon a time . . .
David Parnas
David Parnas is Professor of Computer Science at
Limerick University in Ireland, where he directs
the Software Quality Research Laboratory, and
has also taught at universities in Germany,
Canada, and the United States.
Parnas’s most influential contribution to software
engineering is his groundbreaking 1972 paper
“On the criteria to be used in decomposing
systems into modules,” which laid the foundation
for modern structured programming. This paper
appears in many anthologies and is available on
the web at
http://portal.acm.org/citation.cfm?id=361623
Methods
A Quick Overview of Methods
• You have been working with methods ever since you wrote
your first Java program in Chapter 2. The run method in
every program is just one example. Most of the programs
you have seen have used other methods as well, such as
println and setColor.
• At the most basic level, a method is a sequence of statements
that has been collected together and given a name. The name
makes it possible to execute the statements much more easily;
instead of copying out the entire list of statements, you can
just provide the method name.
• The following terms are useful when learning about methods:
– Invoking a method using its name is known as calling that method.
– The caller can pass information to a method by using arguments.
– When a method completes its operation, it returns to its caller.
– A method can pass information to the caller by returning a result.
Methods and Information Hiding
• One of the most important advantages of methods is that they
make it possible for callers to ignore the inner workings of
complex operations.
• When you use a method, it is more important to know what
the method does than to understand exactly how it works.
The underlying details are of interest only to the programmer
who implements a method. Programmers who use a method
as a tool can usually ignore the implementation altogether.
• The idea that callers should be insulated from the details of
method operation is the principle of information hiding,
which is one of the cornerstones of software engineering.
Methods as Tools for Programmers
• Particularly when you are first learning about programming,
it is important to keep in mind that methods are not the same
as application programs, even though both provide a service
that hides the underlying complexity involved in
computation.
• The key difference is that an application program provides a
service to a user, who is typically not a programmer but
rather someone who happens to be sitting in front of the
computer. By contrast, a method provides a service to a
programmer, who is typically creating some kind of
application.
• This distinction is particularly important when you are trying
to understand how the applications-level concepts of input
and output differ from the programmer-level concepts of
arguments and results. Methods like readInt and println
are used to communicate with the user and play no role in
communicating information from one part of a program to
another.
Method Calls as Expressions
• Syntactically, method calls in Java are part of the expression
framework. Methods that return a value can be used as terms
in an expression just like variables and constants.
• The Math class in the java.lang package defines several
methods that are useful in writing mathematical expressions.
Suppose, for example, that you need to compute the distance
from the origin to the point (x, y), which is given by
x2 + y2
You can apply the square root function by calling the sqrt
method in the Math class like this:
double distance = Math.sqrt(x * x + y * y);
• Note that you need to include the name of the class along
with the method name. Methods like Math.sqrt that belong
to a class are called static methods.
Useful Methods in the Math Class
Math.abs(x) Returns the absolute value of x
Math.min(x, y) Returns the smaller of x and y
Math.max(x, y) Returns the larger of x and y
Math.sqrt(x) Returns the square root of x
Math.log(x) Returns the natural logarithm of x (loge x )
Math.exp(x) Returns the inverse logarithm of x (e x )
Math.pow(x, y) Returns the value of x raised to the y power (x y )
Math.sin(theta) Returns the sine of theta, measured in radians
Math.cos(theta) Returns the cosine of theta
Math.tan(theta) Returns the tangent of theta
Math.asin(x) Returns the angle whose sine is x
Math.acos(x) Returns the angle whose cosine is x
Math.atan(x) Returns the angle whose tangent is x
Math.toRadians(degrees) Converts an angle from degrees to radians
Math.toDegrees(radians) Converts an angle from radians to degrees
Method Calls as Messages
• In object-oriented languages like Java, the act of calling a
method is often described in terms of sending a message to
an object. For example, the method call
rect.setColor(Color.RED);
is regarded metaphorically as sending a message to the rect
object asking it to change its color.
setColor(Color.RED)
receiver.name(arguments);
Writing Your Own Methods
• The general form of a method definition is
return expression;
• Once you have defined a predicate method, you can use it just
like any other Boolean value. For example, you can print the
integers between 1 and 100 that are divisible by 7 as follows:
for (int i = 1; i <= 100; i++) {
if (isDivisibleBy(i, 7)) {
println(i);
}
}
Using Predicate Methods Effectively
• New programmers often seem uncomfortable with Boolean
values and end up writing ungainly code. For example, a
beginner might write isDivisibleBy like this:
private boolean isDivisibleBy(int x, int y) {
if (x % y == 0) {
return true
} else {
return false;
}
}
skip simulation
Exercise: Finding Perfect Numbers
• Greek mathematicians took a special interest in numbers that
are equal to the sum of their proper divisors (a proper divisor
of n is any divisor less than n itself). They called such
numbers perfect numbers. For example, 6 is a perfect
number because it is the sum of 1, 2, and 3, which are the
integers less than 6 that divide evenly into 6. Similarly, 28 is
a perfect number because it is the sum of 1, 2, 4, 7, and 14.
• For the rest of this class, we’re going to design and
implement a Java program that finds all the perfect numbers
between two limits. For example, if the limits are 1 and
10000, the output should look like this:
FindPerfect